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 @@ -334,19 +334,17 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
334
334
335
335
#[ inline]
336
336
fn next ( & mut self ) -> Option < A > {
337
- use cmp:: Ordering :: * ;
338
-
339
- match self . start . partial_cmp ( & self . end ) {
340
- Some ( Less ) => {
337
+ if self . start <= self . end {
338
+ if self . start < self . end {
341
339
let n = self . start . add_one ( ) ;
342
340
Some ( mem:: replace ( & mut self . start , n) )
343
- } ,
344
- Some ( Equal ) => {
341
+ } else {
345
342
let last = self . start . replace_one ( ) ;
346
343
self . end . replace_zero ( ) ;
347
344
Some ( last)
348
- } ,
349
- _ => None ,
345
+ }
346
+ } else {
347
+ None
350
348
}
351
349
}
352
350
@@ -428,19 +426,17 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
428
426
impl < A : Step > DoubleEndedIterator for ops:: RangeInclusive < A > {
429
427
#[ inline]
430
428
fn next_back ( & mut self ) -> Option < A > {
431
- use cmp:: Ordering :: * ;
432
-
433
- match self . start . partial_cmp ( & self . end ) {
434
- Some ( Less ) => {
429
+ if self . start <= self . end {
430
+ if self . start < self . end {
435
431
let n = self . end . sub_one ( ) ;
436
432
Some ( mem:: replace ( & mut self . end , n) )
437
- } ,
438
- Some ( Equal ) => {
433
+ } else {
439
434
let last = self . end . replace_zero ( ) ;
440
435
self . start . replace_one ( ) ;
441
436
Some ( last)
442
- } ,
443
- _ => None ,
437
+ }
438
+ } else {
439
+ None
444
440
}
445
441
}
446
442
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