10
10
11
11
// Test inclusive range syntax.
12
12
13
- use std:: ops:: { RangeInclusive , RangeToInclusive } ;
13
+ #![ feature( range_is_empty) ]
14
+ #![ allow( unused_comparisons) ]
15
+
16
+ use std:: ops:: RangeToInclusive ;
14
17
15
18
fn foo ( ) -> isize { 42 }
16
19
17
20
// Test that range syntax works in return statements
18
- fn return_range_to ( ) -> RangeToInclusive < i32 > { return ..=1 ; }
21
+ pub fn return_range_to ( ) -> RangeToInclusive < i32 > { return ..=1 ; }
22
+
23
+ #[ derive( Debug ) ]
24
+ struct P ( u8 ) ;
19
25
20
26
pub fn main ( ) {
21
27
let mut count = 0 ;
@@ -26,7 +32,7 @@ pub fn main() {
26
32
assert_eq ! ( count, 55 ) ;
27
33
28
34
let mut count = 0 ;
29
- let mut range = 0_usize ..=10 ;
35
+ let range = 0_usize ..=10 ;
30
36
for i in range {
31
37
assert ! ( i >= 0 && i <= 10 ) ;
32
38
count += i;
@@ -80,7 +86,7 @@ pub fn main() {
80
86
short. next ( ) ;
81
87
assert_eq ! ( long. size_hint( ) , ( 255 , Some ( 255 ) ) ) ;
82
88
assert_eq ! ( short. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
83
- assert_eq ! ( short, 1 ..= 0 ) ;
89
+ assert ! ( short. is_empty ( ) ) ;
84
90
85
91
assert_eq ! ( long. len( ) , 255 ) ;
86
92
assert_eq ! ( short. len( ) , 0 ) ;
@@ -95,28 +101,31 @@ pub fn main() {
95
101
for i in 3 ..=251 {
96
102
assert_eq ! ( long. next( ) , Some ( i) ) ;
97
103
}
98
- assert_eq ! ( long, 1 ..= 0 ) ;
104
+ assert ! ( long. is_empty ( ) ) ;
99
105
100
106
// check underflow
101
107
let mut narrow = 1 ..=0 ;
102
108
assert_eq ! ( narrow. next_back( ) , None ) ;
103
- assert_eq ! ( narrow, 1 ..= 0 ) ;
109
+ assert ! ( narrow. is_empty ( ) ) ;
104
110
let mut zero = 0u8 ..=0 ;
105
111
assert_eq ! ( zero. next_back( ) , Some ( 0 ) ) ;
106
112
assert_eq ! ( zero. next_back( ) , None ) ;
107
- assert_eq ! ( zero, 1 ..= 0 ) ;
113
+ assert ! ( zero. is_empty ( ) ) ;
108
114
let mut high = 255u8 ..=255 ;
109
115
assert_eq ! ( high. next_back( ) , Some ( 255 ) ) ;
110
116
assert_eq ! ( high. next_back( ) , None ) ;
111
- assert_eq ! ( high, 1 ..= 0 ) ;
117
+ assert ! ( high. is_empty ( ) ) ;
112
118
113
119
// what happens if you have a nonsense range?
114
120
let mut nonsense = 10 ..=5 ;
115
121
assert_eq ! ( nonsense. next( ) , None ) ;
116
- assert_eq ! ( nonsense, 10 ..= 5 ) ;
122
+ assert ! ( nonsense. is_empty ( ) ) ;
117
123
118
124
// output
119
125
assert_eq ! ( format!( "{:?}" , 0 ..=10 ) , "0..=10" ) ;
120
126
assert_eq ! ( format!( "{:?}" , ..=10 ) , "..=10" ) ;
121
- assert_eq ! ( format!( "{:?}" , long) , "1..=0" ) ;
127
+ assert_eq ! ( format!( "{:?}" , 9 ..=6 ) , "9..=6" ) ;
128
+
129
+ // ensure that constructing a RangeInclusive does not need PartialOrd bound
130
+ assert_eq ! ( format!( "{:?}" , P ( 1 ) ..=P ( 2 ) ) , "P(1)..=P(2)" ) ;
122
131
}
0 commit comments