]> git.lizzy.rs Git - rust.git/blob - src/test/ui/half-open-range-patterns/half-open-range-pats-semantics.rs
Update tests to remove old numeric constants
[rust.git] / src / test / ui / half-open-range-patterns / half-open-range-pats-semantics.rs
1 // run-pass
2
3 // Test half-open range patterns against their expression equivalents
4 // via `.contains(...)` and make sure the dynamic semantics match.
5
6 #![feature(half_open_range_patterns)]
7 #![feature(exclusive_range_pattern)]
8 #![allow(illegal_floating_point_literal_pattern)]
9 #![allow(unreachable_patterns)]
10
11 macro_rules! yes {
12     ($scrutinee:expr, $($t:tt)+) => {
13         {
14             let m = match $scrutinee { $($t)+ => true, _ => false, };
15             let c = ($($t)+).contains(&$scrutinee);
16             assert_eq!(m, c);
17             m
18         }
19     }
20 }
21
22 fn range_to_inclusive() {
23     // `..=X` (`RangeToInclusive`-equivalent):
24     //---------------------------------------
25
26     // u8; `..=X`
27     assert!(yes!(u8::MIN, ..=u8::MIN));
28     assert!(yes!(u8::MIN, ..=5));
29     assert!(yes!(5u8, ..=5));
30     assert!(!yes!(6u8, ..=5));
31
32     // i16; `..=X`
33     assert!(yes!(i16::MIN, ..=i16::MIN));
34     assert!(yes!(i16::MIN, ..=0));
35     assert!(yes!(i16::MIN, ..=-5));
36     assert!(yes!(-5, ..=-5));
37     assert!(!yes!(-4, ..=-5));
38
39     // char; `..=X`
40     assert!(yes!('\u{0}', ..='\u{0}'));
41     assert!(yes!('\u{0}', ..='a'));
42     assert!(yes!('a', ..='a'));
43     assert!(!yes!('b', ..='a'));
44
45     // f32; `..=X`
46     assert!(yes!(f32::NEG_INFINITY, ..=f32::NEG_INFINITY));
47     assert!(yes!(f32::NEG_INFINITY, ..=1.0f32));
48     assert!(yes!(1.5f32, ..=1.5f32));
49     assert!(!yes!(1.6f32, ..=-1.5f32));
50
51     // f64; `..=X`
52     assert!(yes!(f64::NEG_INFINITY, ..=f64::NEG_INFINITY));
53     assert!(yes!(f64::NEG_INFINITY, ..=1.0f64));
54     assert!(yes!(1.5f64, ..=1.5f64));
55     assert!(!yes!(1.6f64, ..=-1.5f64));
56 }
57
58 fn range_to() {
59     // `..X` (`RangeTo`-equivalent):
60     //-----------------------------
61
62     // u8; `..X`
63     assert!(yes!(0u8, ..1));
64     assert!(yes!(0u8, ..5));
65     assert!(!yes!(5u8, ..5));
66     assert!(!yes!(6u8, ..5));
67
68     // u8; `..X`
69     const NU8: u8 = u8::MIN + 1;
70     assert!(yes!(u8::MIN, ..NU8));
71     assert!(yes!(0u8, ..5));
72     assert!(!yes!(5u8, ..5));
73     assert!(!yes!(6u8, ..5));
74
75     // i16; `..X`
76     const NI16: i16 = i16::MIN + 1;
77     assert!(yes!(i16::MIN, ..NI16));
78     assert!(yes!(i16::MIN, ..5));
79     assert!(yes!(-6, ..-5));
80     assert!(!yes!(-5, ..-5));
81
82     // char; `..X`
83     assert!(yes!('\u{0}', ..'\u{1}'));
84     assert!(yes!('\u{0}', ..'a'));
85     assert!(yes!('a', ..'b'));
86     assert!(!yes!('a', ..'a'));
87     assert!(!yes!('b', ..'a'));
88
89     // f32; `..X`
90     assert!(yes!(f32::NEG_INFINITY, ..1.0f32));
91     assert!(!yes!(1.5f32, ..1.5f32));
92     const E32: f32 = 1.5f32 + f32::EPSILON;
93     assert!(yes!(1.5f32, ..E32));
94     assert!(!yes!(1.6f32, ..1.5f32));
95
96     // f64; `..X`
97     assert!(yes!(f64::NEG_INFINITY, ..1.0f64));
98     assert!(!yes!(1.5f64, ..1.5f64));
99     const E64: f64 = 1.5f64 + f64::EPSILON;
100     assert!(yes!(1.5f64, ..E64));
101     assert!(!yes!(1.6f64, ..1.5f64));
102 }
103
104 fn range_from() {
105     // `X..` (`RangeFrom`-equivalent):
106     //--------------------------------
107
108     // u8; `X..`
109     assert!(yes!(u8::MIN, u8::MIN..));
110     assert!(yes!(u8::MAX, u8::MIN..));
111     assert!(!yes!(u8::MIN, 1..));
112     assert!(!yes!(4, 5..));
113     assert!(yes!(5, 5..));
114     assert!(yes!(6, 5..));
115     assert!(yes!(u8::MAX, u8::MAX..));
116
117     // i16; `X..`
118     assert!(yes!(i16::MIN, i16::MIN..));
119     assert!(yes!(i16::MAX, i16::MIN..));
120     const NI16: i16 = i16::MIN + 1;
121     assert!(!yes!(i16::MIN, NI16..));
122     assert!(!yes!(-4, 5..));
123     assert!(yes!(-4, -4..));
124     assert!(yes!(-3, -4..));
125     assert!(yes!(i16::MAX, i16::MAX..));
126
127     // char; `X..`
128     assert!(yes!('\u{0}', '\u{0}'..));
129     assert!(yes!(core::char::MAX, '\u{0}'..));
130     assert!(yes!('a', 'a'..));
131     assert!(yes!('b', 'a'..));
132     assert!(!yes!('a', 'b'..));
133     assert!(yes!(core::char::MAX, core::char::MAX..));
134
135     // f32; `X..`
136     assert!(yes!(f32::NEG_INFINITY, f32::NEG_INFINITY..));
137     assert!(yes!(f32::INFINITY, f32::NEG_INFINITY..));
138     assert!(!yes!(f32::NEG_INFINITY, 1.0f32..));
139     assert!(yes!(f32::INFINITY, 1.0f32..));
140     assert!(!yes!(1.0f32 - f32::EPSILON, 1.0f32..));
141     assert!(yes!(1.0f32, 1.0f32..));
142     assert!(yes!(f32::INFINITY, 1.0f32..));
143     assert!(yes!(f32::INFINITY, f32::INFINITY..));
144
145     // f64; `X..`
146     assert!(yes!(f64::NEG_INFINITY, f64::NEG_INFINITY..));
147     assert!(yes!(f64::INFINITY, f64::NEG_INFINITY..));
148     assert!(!yes!(f64::NEG_INFINITY, 1.0f64..));
149     assert!(yes!(f64::INFINITY, 1.0f64..));
150     assert!(!yes!(1.0f64 - f64::EPSILON, 1.0f64..));
151     assert!(yes!(1.0f64, 1.0f64..));
152     assert!(yes!(f64::INFINITY, 1.0f64..));
153     assert!(yes!(f64::INFINITY, f64::INFINITY..));
154 }
155
156 fn main() {
157     range_to_inclusive();
158     range_to();
159     range_from();
160 }