diff options
Diffstat (limited to 'tests/ui/derives/derive-partial-ord-discriminant-64bit.rs')
| -rw-r--r-- | tests/ui/derives/derive-partial-ord-discriminant-64bit.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/ui/derives/derive-partial-ord-discriminant-64bit.rs b/tests/ui/derives/derive-partial-ord-discriminant-64bit.rs new file mode 100644 index 00000000000..5b6bf6fbf1f --- /dev/null +++ b/tests/ui/derives/derive-partial-ord-discriminant-64bit.rs @@ -0,0 +1,40 @@ +//! Regression test for https://github.com/rust-lang/rust/issues/15523 + +//@ run-pass +// Issue 15523: derive(PartialOrd) should use the provided +// discriminant values for the derived ordering. +// +// This test is checking corner cases that arise when you have +// 64-bit values in the variants. + +#[derive(PartialEq, PartialOrd)] +#[repr(u64)] +enum Eu64 { + Pos2 = 2, + PosMax = !0, + Pos1 = 1, +} + +#[derive(PartialEq, PartialOrd)] +#[repr(i64)] +enum Ei64 { + Pos2 = 2, + Neg1 = -1, + NegMin = 1 << 63, + PosMax = !(1 << 63), + Pos1 = 1, +} + +fn main() { + assert!(Eu64::Pos2 > Eu64::Pos1); + assert!(Eu64::Pos2 < Eu64::PosMax); + assert!(Eu64::Pos1 < Eu64::PosMax); + + assert!(Ei64::Pos2 > Ei64::Pos1); + assert!(Ei64::Pos2 > Ei64::Neg1); + assert!(Ei64::Pos1 > Ei64::Neg1); + assert!(Ei64::Pos2 > Ei64::NegMin); + assert!(Ei64::Pos1 > Ei64::NegMin); + assert!(Ei64::Pos2 < Ei64::PosMax); + assert!(Ei64::Pos1 < Ei64::PosMax); +} |
