]> git.lizzy.rs Git - rust.git/blob - src/test/ui/enum-discriminant/discriminant_value.rs
Auto merge of #106349 - LeSeulArtichaut:dyn-star-tracking-issue, r=jackh726
[rust.git] / src / test / ui / enum-discriminant / discriminant_value.rs
1 // run-pass
2 #![allow(stable_features)]
3 #![feature(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 #[allow(unused_tuple_struct_fields)]
31 enum ADT {
32     First(u32, u32),
33     Second(u64)
34 }
35
36 enum NullablePointer {
37     Something(#[allow(unused_tuple_struct_fields)] &'static u32),
38     Nothing
39 }
40
41 static CONST : u32 = 0xBEEF;
42
43 #[allow(dead_code)]
44 #[repr(isize)]
45 enum Mixed {
46     Unit = 3,
47     Tuple(u16) = 2,
48     Struct {
49         a: u8,
50         b: u16,
51     } = 1,
52 }
53
54 pub fn main() {
55     assert_eq!(discriminant_value(&CLike1::A), 0isize);
56     assert_eq!(discriminant_value(&CLike1::B), 1);
57     assert_eq!(discriminant_value(&CLike1::C), 2);
58     assert_eq!(discriminant_value(&CLike1::D), 3);
59
60     assert_eq!(discriminant_value(&CLike2::A), 5isize);
61     assert_eq!(discriminant_value(&CLike2::B), 2);
62     assert_eq!(discriminant_value(&CLike2::C), 19);
63     assert_eq!(discriminant_value(&CLike2::D), 20);
64
65     assert_eq!(discriminant_value(&CLike3::A), 5i8);
66     assert_eq!(discriminant_value(&CLike3::B), 6);
67     assert_eq!(discriminant_value(&CLike3::C), -1);
68     assert_eq!(discriminant_value(&CLike3::D), 0);
69
70     assert_eq!(discriminant_value(&ADT::First(0,0)), 0isize);
71     assert_eq!(discriminant_value(&ADT::Second(5)), 1);
72
73     assert_eq!(discriminant_value(&NullablePointer::Nothing), 1isize);
74     assert_eq!(discriminant_value(&NullablePointer::Something(&CONST)), 0);
75
76     assert_eq!(discriminant_value(&10), 0u8);
77     assert_eq!(discriminant_value(&"test"), 0u8);
78
79     assert_eq!(discriminant_value(&Mixed::Unit), 3isize);
80     assert_eq!(discriminant_value(&Mixed::Tuple(5)), 2);
81     assert_eq!(discriminant_value(&Mixed::Struct{a: 7, b: 11}), 1);
82 }