Skip to content

Commit cc80d7f

Browse files
committed
Add tests for pattern type literals
1 parent 1ec6e42 commit cc80d7f

File tree

2 files changed

+419
-0
lines changed

2 files changed

+419
-0
lines changed
+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
//! Check where literals can be used to initialize pattern types and where not.
2+
3+
#![feature(pattern_types, const_trait_impl, pattern_type_range_trait)]
4+
#![feature(pattern_type_macro)]
5+
6+
use std::pat::pattern_type;
7+
8+
fn out_of_range() -> pattern_type!(u32 is 1..) {
9+
0
10+
//~^ mismatched types
11+
}
12+
13+
fn at_range_start() -> pattern_type!(u32 is 1..) {
14+
1
15+
//~^ mismatched types
16+
}
17+
18+
fn in_range() -> pattern_type!(u32 is 1..) {
19+
2
20+
//~^ mismatched types
21+
}
22+
23+
fn negative_lit_on_unsigned_ty() -> pattern_type!(u32 is 1..) {
24+
-3
25+
//~^ mismatched types
26+
}
27+
28+
fn negative_lit_in_range() -> pattern_type!(i8 is -5..5) {
29+
-2
30+
//~^ mismatched types
31+
}
32+
33+
fn positive_lit_in_range_of_signed() -> pattern_type!(i8 is -5..5) {
34+
2
35+
//~^ mismatched types
36+
}
37+
38+
fn negative_lit_at_range_start() -> pattern_type!(i8 is -5..5) {
39+
-5
40+
//~^ mismatched types
41+
}
42+
43+
fn positive_lit_at_range_end() -> pattern_type!(i8 is -5..5) {
44+
4
45+
//~^ mismatched types
46+
}
47+
48+
fn lit_one_beyond_range_end() -> pattern_type!(i8 is -5..5) {
49+
5
50+
//~^ mismatched types
51+
}
52+
53+
fn wrong_lit_kind() -> pattern_type!(u32 is 1..) {
54+
'3'
55+
//~^ mismatched types
56+
}
57+
58+
fn char_lit_in_range() -> pattern_type!(char is 'a'..'z') {
59+
'b'
60+
//~^ mismatched types
61+
}
62+
63+
fn char_lit_out_of_range() -> pattern_type!(char is 'a'..'z') {
64+
'A'
65+
//~^ mismatched types
66+
}
67+
68+
fn lit_at_unsigned_range_inclusive_end() -> pattern_type!(u32 is 0..=1) {
69+
1
70+
//~^ mismatched types
71+
}
72+
73+
fn single_element_range() -> pattern_type!(u32 is 0..=0) {
74+
0
75+
//~^ mismatched types
76+
}
77+
78+
fn lit_oob_single_element_range() -> pattern_type!(u32 is 0..=0) {
79+
1
80+
//~^ mismatched types
81+
}
82+
83+
fn lit_oob_single_element_range_exclusive() -> pattern_type!(u32 is 0..1) {
84+
1
85+
//~^ mismatched types
86+
}
87+
88+
fn single_element_range_exclusive() -> pattern_type!(u32 is 0..1) {
89+
0
90+
//~^ mismatched types
91+
}
92+
93+
fn empty_range_at_base_type_min() -> pattern_type!(u32 is 0..0) {
94+
//~^ evaluation of constant value failed
95+
0
96+
}
97+
98+
fn empty_range_at_base_type_min2() -> pattern_type!(u32 is 0..0) {
99+
//~^ evaluation of constant value failed
100+
1
101+
}
102+
103+
fn empty_range() -> pattern_type!(u32 is 1..1) {
104+
0
105+
//~^ mismatched types
106+
}
107+
108+
fn empty_range2() -> pattern_type!(u32 is 1..1) {
109+
1
110+
//~^ mismatched types
111+
}
112+
113+
fn wraparound_range_at_base_ty_end() -> pattern_type!(u32 is 1..0) {
114+
//~^ evaluation of constant value failed
115+
1
116+
}
117+
118+
fn wraparound_range_at_base_ty_end2() -> pattern_type!(u32 is 1..0) {
119+
//~^ evaluation of constant value failed
120+
0
121+
}
122+
123+
fn wraparound_range_at_base_ty_end3() -> pattern_type!(u32 is 1..0) {
124+
//~^ evaluation of constant value failed
125+
2
126+
}
127+
128+
fn wraparound_range() -> pattern_type!(u32 is 2..1) {
129+
1
130+
//~^ mismatched types
131+
}
132+
133+
fn lit_in_wraparound_range() -> pattern_type!(u32 is 2..1) {
134+
0
135+
//~^ mismatched types
136+
}
137+
138+
fn lit_at_wraparound_range_start() -> pattern_type!(u32 is 2..1) {
139+
2
140+
//~^ mismatched types
141+
}
142+
143+
fn main() {}

0 commit comments

Comments
 (0)