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