]> git.proxmox.com Git - rustc.git/blame - 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
CommitLineData
dc9dc135 1// run-pass
0bf4aa26 2#![allow(stable_features)]
dc9dc135 3#![feature(arbitrary_enum_discriminant, core, core_intrinsics)]
9346a6ac
AL
4
5extern crate core;
6use core::intrinsics::discriminant_value;
7
8enum CLike1 {
9 A,
10 B,
11 C,
12 D
13}
14
15enum CLike2 {
16 A = 5,
17 B = 2,
18 C = 19,
19 D
20}
21
22#[repr(i8)]
23enum CLike3 {
24 A = 5,
25 B,
26 C = -1,
27 D
28}
29
30enum ADT {
31 First(u32, u32),
32 Second(u64)
33}
34
35enum NullablePointer {
36 Something(&'static u32),
37 Nothing
38}
39
40static CONST : u32 = 0xBEEF;
41
dc9dc135
XL
42#[allow(dead_code)]
43#[repr(isize)]
44enum Mixed {
45 Unit = 3,
46 Tuple(u16) = 2,
47 Struct {
48 a: u8,
49 b: u16,
50 } = 1,
51}
52
9346a6ac 53pub 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}