File tree 2 files changed +31
-16
lines changed
2 files changed +31
-16
lines changed Original file line number Diff line number Diff line change @@ -331,19 +331,17 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
331
331
332
332
#[ inline]
333
333
fn next ( & mut self ) -> Option < A > {
334
- use cmp:: Ordering :: * ;
335
-
336
- match self . start . partial_cmp ( & self . end ) {
337
- Some ( Less ) => {
334
+ if self . start <= self . end {
335
+ if self . start < self . end {
338
336
let n = self . start . add_one ( ) ;
339
337
Some ( mem:: replace ( & mut self . start , n) )
340
- } ,
341
- Some ( Equal ) => {
338
+ } else {
342
339
let last = self . start . replace_one ( ) ;
343
340
self . end . replace_zero ( ) ;
344
341
Some ( last)
345
- } ,
346
- _ => None ,
342
+ }
343
+ } else {
344
+ None
347
345
}
348
346
}
349
347
@@ -425,19 +423,17 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
425
423
impl < A : Step > DoubleEndedIterator for ops:: RangeInclusive < A > {
426
424
#[ inline]
427
425
fn next_back ( & mut self ) -> Option < A > {
428
- use cmp:: Ordering :: * ;
429
-
430
- match self . start . partial_cmp ( & self . end ) {
431
- Some ( Less ) => {
426
+ if self . start <= self . end {
427
+ if self . start < self . end {
432
428
let n = self . end . sub_one ( ) ;
433
429
Some ( mem:: replace ( & mut self . end , n) )
434
- } ,
435
- Some ( Equal ) => {
430
+ } else {
436
431
let last = self . end . replace_zero ( ) ;
437
432
self . start . replace_one ( ) ;
438
433
Some ( last)
439
- } ,
440
- _ => None ,
434
+ }
435
+ } else {
436
+ None
441
437
}
442
438
}
443
439
Original file line number Diff line number Diff line change @@ -1332,6 +1332,18 @@ fn test_range_inclusive_exhaustion() {
1332
1332
assert_eq ! ( r. next_back( ) , Some ( 10 ) ) ;
1333
1333
assert_eq ! ( r, 1 ..=0 ) ;
1334
1334
1335
+ let mut r = 10 ..=12 ;
1336
+ assert_eq ! ( r. next( ) , Some ( 10 ) ) ;
1337
+ assert_eq ! ( r. next( ) , Some ( 11 ) ) ;
1338
+ assert_eq ! ( r. next( ) , Some ( 12 ) ) ;
1339
+ assert_eq ! ( r, 1 ..=0 ) ;
1340
+
1341
+ let mut r = 10 ..=12 ;
1342
+ assert_eq ! ( r. next_back( ) , Some ( 12 ) ) ;
1343
+ assert_eq ! ( r. next_back( ) , Some ( 11 ) ) ;
1344
+ assert_eq ! ( r. next_back( ) , Some ( 10 ) ) ;
1345
+ assert_eq ! ( r, 1 ..=0 ) ;
1346
+
1335
1347
let mut r = 10 ..=12 ;
1336
1348
assert_eq ! ( r. nth( 2 ) , Some ( 12 ) ) ;
1337
1349
assert_eq ! ( r, 1 ..=0 ) ;
@@ -1340,6 +1352,13 @@ fn test_range_inclusive_exhaustion() {
1340
1352
assert_eq ! ( r. nth( 5 ) , None ) ;
1341
1353
assert_eq ! ( r, 1 ..=0 ) ;
1342
1354
1355
+ let mut r = 100 ..=10 ;
1356
+ assert_eq ! ( r. next( ) , None ) ;
1357
+ assert_eq ! ( r, 100 ..=10 ) ;
1358
+
1359
+ let mut r = 100 ..=10 ;
1360
+ assert_eq ! ( r. next_back( ) , None ) ;
1361
+ assert_eq ! ( r, 100 ..=10 ) ;
1343
1362
}
1344
1363
1345
1364
#[ test]
You can’t perform that action at this time.
0 commit comments