]> git.proxmox.com Git - rustc.git/blob - src/test/ui/enum-discriminant/discriminant_value.rs
New upstream version 1.41.1+dfsg1
[rustc.git] / src / test / ui / enum-discriminant / discriminant_value.rs
1 // run-pass
2 #![allow(stable_features)]
3 #![feature(arbitrary_enum_discriminant, core, core_intrinsics)]
4
5 extern crate core;
6 use core::intrinsics::discriminant_value;
7
8 enum CLike1 {
9 A,
10 B,
11 C,
12 D
13 }
14
15 enum CLike2 {
16 A = 5,
17 B = 2,
18 C = 19,
19 D
20 }
21
22 #[repr(i8)]
23 enum CLike3 {
24 A = 5,
25 B,
26 C = -1,
27 D
28 }
29
30 enum ADT {
31 First(u32, u32),
32 Second(u64)
33 }
34
35 enum NullablePointer {
36 Something(&'static u32),
37 Nothing
38 }
39
40 static CONST : u32 = 0xBEEF;
41
42 #[allow(dead_code)]
43 #[repr(isize)]
44 enum Mixed {
45 Unit = 3,
46 Tuple(u16) = 2,
47 Struct {
48 a: u8,
49 b: u16,
50 } = 1,
51 }
52
53 pub fn main() {
54 assert_eq!(discriminant_value(&CLike1::A), 0);
55 assert_eq!(discriminant_value(&CLike1::B), 1);
56 assert_eq!(discriminant_value(&CLike1::C), 2);
57 assert_eq!(discriminant_value(&CLike1::D), 3);
58
59 assert_eq!(discriminant_value(&CLike2::A), 5);
60 assert_eq!(discriminant_value(&CLike2::B), 2);
61 assert_eq!(discriminant_value(&CLike2::C), 19);
62 assert_eq!(discriminant_value(&CLike2::D), 20);
63
64 assert_eq!(discriminant_value(&CLike3::A), 5);
65 assert_eq!(discriminant_value(&CLike3::B), 6);
66 assert_eq!(discriminant_value(&CLike3::C), -1_i8 as u64);
67 assert_eq!(discriminant_value(&CLike3::D), 0);
68
69 assert_eq!(discriminant_value(&ADT::First(0,0)), 0);
70 assert_eq!(discriminant_value(&ADT::Second(5)), 1);
71
72 assert_eq!(discriminant_value(&NullablePointer::Nothing), 1);
73 assert_eq!(discriminant_value(&NullablePointer::Something(&CONST)), 0);
74
75 assert_eq!(discriminant_value(&10), 0);
76 assert_eq!(discriminant_value(&"test"), 0);
77
78 assert_eq!(3, discriminant_value(&Mixed::Unit));
79 assert_eq!(2, discriminant_value(&Mixed::Tuple(5)));
80 assert_eq!(1, discriminant_value(&Mixed::Struct{a: 7, b: 11}));
81 }