1 // Here we test all kinds of range patterns in terms of parsing / recovery.
2 // We want to ensure that:
3 // 1. Things parse as they should.
4 // 2. Or at least we have parser recovery if they don't.
6 #![feature(exclusive_range_pattern)]
7 #![deny(ellipsis_inclusive_range_patterns)]
14 fn exclusive_from_to() {
15 if let 0..3 = 0 {} // OK.
16 if let 0..Y = 0 {} // OK.
17 if let X..3 = 0 {} // OK.
18 if let X..Y = 0 {} // OK.
19 if let true..Y = 0 {} //~ ERROR only char and numeric types
20 if let X..true = 0 {} //~ ERROR only char and numeric types
21 if let .0..Y = 0 {} //~ ERROR mismatched types
22 //~^ ERROR float literals must have an integer part
23 if let X.. .0 = 0 {} //~ ERROR mismatched types
24 //~^ ERROR float literals must have an integer part
27 fn inclusive_from_to() {
28 if let 0..=3 = 0 {} // OK.
29 if let 0..=Y = 0 {} // OK.
30 if let X..=3 = 0 {} // OK.
31 if let X..=Y = 0 {} // OK.
32 if let true..=Y = 0 {} //~ ERROR only char and numeric types
33 if let X..=true = 0 {} //~ ERROR only char and numeric types
34 if let .0..=Y = 0 {} //~ ERROR mismatched types
35 //~^ ERROR float literals must have an integer part
36 if let X..=.0 = 0 {} //~ ERROR mismatched types
37 //~^ ERROR float literals must have an integer part
40 fn inclusive2_from_to() {
41 if let 0...3 = 0 {} //~ ERROR `...` range patterns are deprecated
42 if let 0...Y = 0 {} //~ ERROR `...` range patterns are deprecated
43 if let X...3 = 0 {} //~ ERROR `...` range patterns are deprecated
44 if let X...Y = 0 {} //~ ERROR `...` range patterns are deprecated
45 if let true...Y = 0 {} //~ ERROR only char and numeric types
46 //~^ ERROR `...` range patterns are deprecated
47 if let X...true = 0 {} //~ ERROR only char and numeric types
48 //~^ ERROR `...` range patterns are deprecated
49 if let .0...Y = 0 {} //~ ERROR mismatched types
50 //~^ ERROR float literals must have an integer part
51 //~| ERROR `...` range patterns are deprecated
52 if let X... .0 = 0 {} //~ ERROR mismatched types
53 //~^ ERROR float literals must have an integer part
54 //~| ERROR `...` range patterns are deprecated
58 if let 0.. = 0 {} //~ ERROR `X..` range patterns are not supported
59 if let X.. = 0 {} //~ ERROR `X..` range patterns are not supported
60 if let true.. = 0 {} //~ ERROR `X..` range patterns are not supported
61 //~^ ERROR only char and numeric types
62 if let .0.. = 0 {} //~ ERROR `X..` range patterns are not supported
63 //~^ ERROR float literals must have an integer part
64 //~| ERROR mismatched types
68 if let 0..= = 0 {} //~ ERROR `X..=` range patterns are not supported
69 if let X..= = 0 {} //~ ERROR `X..=` range patterns are not supported
70 if let true..= = 0 {} //~ ERROR `X..=` range patterns are not supported
71 //~| ERROR only char and numeric types
72 if let .0..= = 0 {} //~ ERROR `X..=` range patterns are not supported
73 //~^ ERROR float literals must have an integer part
74 //~| ERROR mismatched types
77 fn inclusive2_from() {
78 if let 0... = 0 {} //~ ERROR `X...` range patterns are not supported
79 //~^ ERROR `...` range patterns are deprecated
80 if let X... = 0 {} //~ ERROR `X...` range patterns are not supported
81 //~^ ERROR `...` range patterns are deprecated
82 if let true... = 0 {} //~ ERROR `X...` range patterns are not supported
83 //~^ ERROR `...` range patterns are deprecated
84 //~| ERROR only char and numeric types
85 if let .0... = 0 {} //~ ERROR `X...` range patterns are not supported
86 //~^ ERROR float literals must have an integer part
87 //~| ERROR `...` range patterns are deprecated
88 //~| ERROR mismatched types
92 if let ..0 = 0 {} //~ ERROR `..X` range patterns are not supported
93 if let ..Y = 0 {} //~ ERROR `..X` range patterns are not supported
94 if let ..true = 0 {} //~ ERROR `..X` range patterns are not supported
95 //~| ERROR only char and numeric types
96 if let .. .0 = 0 {} //~ ERROR `..X` range patterns are not supported
97 //~^ ERROR float literals must have an integer part
98 //~| ERROR mismatched types
102 if let ..=3 = 0 {} //~ ERROR `..=X` range patterns are not supported
103 if let ..=Y = 0 {} //~ ERROR `..=X` range patterns are not supported
104 if let ..=true = 0 {} //~ ERROR `..=X` range patterns are not supported
105 //~| ERROR only char and numeric types
106 if let ..=.0 = 0 {} //~ ERROR `..=X` range patterns are not supported
107 //~^ ERROR float literals must have an integer part
108 //~| ERROR mismatched types
112 if let ...3 = 0 {} //~ ERROR `...X` range patterns are not supported
113 //~^ ERROR `...` range patterns are deprecated
114 if let ...Y = 0 {} //~ ERROR `...X` range patterns are not supported
115 //~^ ERROR `...` range patterns are deprecated
116 if let ...true = 0 {} //~ ERROR `...X` range patterns are not supported
117 //~^ ERROR `...` range patterns are deprecated
118 //~| ERROR only char and numeric types
119 if let ....3 = 0 {} //~ ERROR `...X` range patterns are not supported
120 //~^ ERROR float literals must have an integer part
121 //~| ERROR `...` range patterns are deprecated
122 //~| ERROR mismatched types