]> git.lizzy.rs Git - rust.git/blob - tests/ui/enum-discriminant/discriminant_size.rs
Move /src/test to /tests
[rust.git] / tests / ui / enum-discriminant / discriminant_size.rs
1 // run-pass
2 #![feature(core_intrinsics, repr128)]
3 //~^ WARN the feature `repr128` is incomplete
4
5 use std::intrinsics::discriminant_value;
6
7 enum E1 {
8     A,
9     B,
10 }
11
12 #[repr(i8)]
13 enum E2 {
14     A = 7,
15     B = -2,
16 }
17
18 #[repr(C)]
19 enum E3 {
20     A = 42,
21     B = 100,
22 }
23
24 #[repr(i128)]
25 enum E4 {
26     A = 0x1223_3445_5667_7889,
27     B = -0x1223_3445_5667_7889,
28 }
29
30 fn main() {
31     let mut target: [isize; 3] = [0, 0, 0];
32     target[1] = discriminant_value(&E1::A);
33     assert_eq!(target, [0, 0, 0]);
34     target[1] = discriminant_value(&E1::B);
35     assert_eq!(target, [0, 1, 0]);
36
37     let mut target: [i8; 3] = [0, 0, 0];
38     target[1] = discriminant_value(&E2::A);
39     assert_eq!(target, [0, 7, 0]);
40     target[1] = discriminant_value(&E2::B);
41     assert_eq!(target, [0, -2, 0]);
42
43     let mut target: [isize; 3] = [0, 0, 0];
44     target[1] = discriminant_value(&E3::A);
45     assert_eq!(target, [0, 42, 0]);
46     target[1] = discriminant_value(&E3::B);
47     assert_eq!(target, [0, 100, 0]);
48
49     let mut target: [i128; 3] = [0, 0, 0];
50     target[1] = discriminant_value(&E4::A);
51     assert_eq!(target, [0, 0x1223_3445_5667_7889, 0]);
52     target[1] = discriminant_value(&E4::B);
53     assert_eq!(target, [0, -0x1223_3445_5667_7889, 0]);
54 }