]>
Commit | Line | Data |
---|---|---|
dc9dc135 | 1 | // run-pass |
0bf4aa26 | 2 | #![allow(stable_features)] |
dc9dc135 | 3 | #![feature(arbitrary_enum_discriminant, core, core_intrinsics)] |
9346a6ac AL |
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 | ||
dc9dc135 XL |
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 | ||
9346a6ac | 53 | pub fn main() { |
60c5eb7d XL |
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); | |
9346a6ac | 58 | |
60c5eb7d XL |
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); | |
9346a6ac | 63 | |
60c5eb7d XL |
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); | |
9346a6ac | 68 | |
60c5eb7d XL |
69 | assert_eq!(discriminant_value(&ADT::First(0,0)), 0); |
70 | assert_eq!(discriminant_value(&ADT::Second(5)), 1); | |
9346a6ac | 71 | |
60c5eb7d XL |
72 | assert_eq!(discriminant_value(&NullablePointer::Nothing), 1); |
73 | assert_eq!(discriminant_value(&NullablePointer::Something(&CONST)), 0); | |
9346a6ac | 74 | |
60c5eb7d XL |
75 | assert_eq!(discriminant_value(&10), 0); |
76 | assert_eq!(discriminant_value(&"test"), 0); | |
9346a6ac | 77 | |
60c5eb7d XL |
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})); | |
9346a6ac | 81 | } |