@@ -2,7 +2,8 @@ mod control_flow;
2
2
mod from_residual;
3
3
4
4
use core:: ops:: {
5
- Bound , Deref , DerefMut , Range , RangeFrom , RangeFull , RangeInclusive , RangeTo , RangeToInclusive ,
5
+ Bound , Deref , DerefMut , OneSidedRange , OneSidedRangeBound , Range , RangeBounds , RangeFrom ,
6
+ RangeFull , RangeInclusive , RangeTo , RangeToInclusive ,
6
7
} ;
7
8
8
9
// Test the Range structs and syntax.
@@ -70,6 +71,35 @@ fn test_range_to_inclusive() {
70
71
let _ = RangeToInclusive { end : 42 } ;
71
72
}
72
73
74
+ #[ test]
75
+ fn test_range_contains ( ) {
76
+ assert ! ( !( 1u32 ..5 ) . contains( & 0u32 ) ) ;
77
+ assert ! ( ( 1u32 ..5 ) . contains( & 1u32 ) ) ;
78
+ assert ! ( ( 1u32 ..5 ) . contains( & 4u32 ) ) ;
79
+ assert ! ( !( 1u32 ..5 ) . contains( & 5u32 ) ) ;
80
+ assert ! ( !( 1u32 ..5 ) . contains( & 6u32 ) ) ;
81
+ }
82
+
83
+ #[ test]
84
+ fn test_range_to_contains ( ) {
85
+ assert ! ( !( 1u32 ..=5 ) . contains( & 0 ) ) ;
86
+ assert ! ( ( 1u32 ..=5 ) . contains( & 1 ) ) ;
87
+ assert ! ( ( 1u32 ..=5 ) . contains( & 4 ) ) ;
88
+ assert ! ( ( 1u32 ..=5 ) . contains( & 5 ) ) ;
89
+ assert ! ( !( 1u32 ..=5 ) . contains( & 6 ) ) ;
90
+ }
91
+
92
+ // This test covers `RangeBounds::contains` when the start is excluded.
93
+ #[ test]
94
+ fn test_range_bounds_contains ( ) {
95
+ let r = ( Bound :: Excluded ( 1u32 ) , Bound :: Included ( 5u32 ) ) ;
96
+ assert ! ( !r. contains( & 0 ) ) ;
97
+ assert ! ( !r. contains( & 1 ) ) ;
98
+ assert ! ( r. contains( & 3 ) ) ;
99
+ assert ! ( r. contains( & 5 ) ) ;
100
+ assert ! ( !r. contains( & 6 ) ) ;
101
+ }
102
+
73
103
#[ test]
74
104
fn test_range_is_empty ( ) {
75
105
assert ! ( !( 0.0 ..10.0 ) . is_empty( ) ) ;
@@ -91,6 +121,34 @@ fn test_range_is_empty() {
91
121
assert ! ( ( f32 :: NAN ..=f32 :: NAN ) . is_empty( ) ) ;
92
122
}
93
123
124
+ #[ test]
125
+ fn test_range_inclusive_end_bound ( ) {
126
+ let mut r = 1u32 ..=1 ;
127
+ r. next ( ) . unwrap ( ) ;
128
+ assert ! ( !r. contains( & 1 ) ) ;
129
+ }
130
+
131
+ #[ test]
132
+ fn test_range_bounds ( ) {
133
+ let r = ( Bound :: Included ( 1u32 ) , Bound :: Excluded ( 5u32 ) ) ;
134
+ assert ! ( !r. contains( & 0 ) ) ;
135
+ assert ! ( r. contains( & 1 ) ) ;
136
+ assert ! ( r. contains( & 3 ) ) ;
137
+ assert ! ( !r. contains( & 5 ) ) ;
138
+ assert ! ( !r. contains( & 6 ) ) ;
139
+
140
+ let r = ( Bound :: < u32 > :: Unbounded , Bound :: Unbounded ) ;
141
+ assert ! ( r. contains( & 0 ) ) ;
142
+ assert ! ( r. contains( & u32 :: MAX ) ) ;
143
+ }
144
+
145
+ #[ test]
146
+ fn test_one_sided_range_bound ( ) {
147
+ assert ! ( matches!( ( ..1u32 ) . bound( ) , ( OneSidedRangeBound :: End , 1 ) ) ) ;
148
+ assert ! ( matches!( ( 1u32 ..) . bound( ) , ( OneSidedRangeBound :: StartInclusive , 1 ) ) ) ;
149
+ assert ! ( matches!( ( ..=1u32 ) . bound( ) , ( OneSidedRangeBound :: EndInclusive , 1 ) ) ) ;
150
+ }
151
+
94
152
#[ test]
95
153
fn test_bound_cloned_unbounded ( ) {
96
154
assert_eq ! ( Bound :: <& u32 >:: Unbounded . cloned( ) , Bound :: Unbounded ) ;
@@ -240,3 +298,17 @@ fn deref_on_ref() {
240
298
fn test_not_never ( ) {
241
299
if !return ( ) { }
242
300
}
301
+
302
+ #[ test]
303
+ fn test_fmt ( ) {
304
+ let mut r = 1 ..=1 ;
305
+ assert_eq ! ( format!( "{:?}" , r) , "1..=1" ) ;
306
+ r. next ( ) . unwrap ( ) ;
307
+ assert_eq ! ( format!( "{:?}" , r) , "1..=1 (exhausted)" ) ;
308
+
309
+ assert_eq ! ( format!( "{:?}" , 1 ..1 ) , "1..1" ) ;
310
+ assert_eq ! ( format!( "{:?}" , 1 ..) , "1.." ) ;
311
+ assert_eq ! ( format!( "{:?}" , ..1 ) , "..1" ) ;
312
+ assert_eq ! ( format!( "{:?}" , ..=1 ) , "..=1" ) ;
313
+ assert_eq ! ( format!( "{:?}" , ..) , ".." ) ;
314
+ }
0 commit comments