]> git.lizzy.rs Git - rust.git/blob - src/test/ui/enum-discriminant/repr128.rs
Rollup merge of #95376 - WaffleLapkin:drain_keep_rest, r=dtolnay
[rust.git] / src / test / ui / enum-discriminant / repr128.rs
1 // run-pass
2 #![feature(repr128, core_intrinsics, discriminant_kind)]
3 //~^ WARN the feature `repr128` is incomplete
4
5 use std::intrinsics::discriminant_value;
6 use std::marker::DiscriminantKind;
7
8 #[repr(i128)]
9 enum Signed {
10     Zero = 0,
11     Staircase = 0x01_02_03_04_05_06_07_08_09_0a_0b_0c_0d_0e_0f,
12     U64Limit = u64::MAX as i128 + 1,
13     SmallNegative = -1,
14     BigNegative = i128::MIN,
15     Next,
16 }
17
18 #[repr(u128)]
19 enum Unsigned {
20     Zero = 0,
21     Staircase = 0x01_02_03_04_05_06_07_08_09_0a_0b_0c_0d_0e_0f,
22     U64Limit = u64::MAX as u128 + 1,
23     Next,
24 }
25
26 fn discr<T, U>(v: T, value: U)
27 where
28     <T as DiscriminantKind>::Discriminant: PartialEq<U>,
29 {
30     assert!(discriminant_value(&v) == value);
31 }
32
33 fn main() {
34     discr(Signed::Zero, 0);
35     discr(Signed::Staircase, 0x01_02_03_04_05_06_07_08_09_0a_0b_0c_0d_0e_0f);
36     discr(Signed::U64Limit, u64::MAX as i128 + 1);
37     discr(Signed::SmallNegative, -1);
38     discr(Signed::BigNegative, i128::MIN);
39     discr(Signed::Next, i128::MIN + 1);
40
41     discr(Unsigned::Zero, 0);
42     discr(Unsigned::Staircase, 0x01_02_03_04_05_06_07_08_09_0a_0b_0c_0d_0e_0f);
43     discr(Unsigned::U64Limit, u64::MAX as u128 + 1);
44     discr(Unsigned::Next, u64::MAX as u128 + 2);
45 }