@@ -4605,8 +4605,10 @@ impl<A: Step + One> Iterator for ops::RangeInclusive<A> where
4605
4605
Empty { .. } => ( None , None ) , // empty iterators yield no values
4606
4606
4607
4607
NonEmpty { ref mut start, ref mut end } => {
4608
- let one = A :: one ( ) ;
4609
- if start <= end {
4608
+ if start == end {
4609
+ ( Some ( mem:: replace ( end, A :: one ( ) ) ) , Some ( mem:: replace ( start, A :: one ( ) ) ) )
4610
+ } else if start < end {
4611
+ let one = A :: one ( ) ;
4610
4612
let mut n = & * start + & one;
4611
4613
mem:: swap ( & mut n, start) ;
4612
4614
@@ -4620,7 +4622,7 @@ impl<A: Step + One> Iterator for ops::RangeInclusive<A> where
4620
4622
// ^ are we done yet?
4621
4623
Some ( n) ) // < the value to output
4622
4624
} else {
4623
- ( Some ( mem:: replace ( start, one) ) , None )
4625
+ ( Some ( mem:: replace ( start, A :: one ( ) ) ) , None )
4624
4626
}
4625
4627
}
4626
4628
} ;
@@ -4664,15 +4666,17 @@ impl<A: Step + One> DoubleEndedIterator for ops::RangeInclusive<A> where
4664
4666
Empty { .. } => return None ,
4665
4667
4666
4668
NonEmpty { ref mut start, ref mut end } => {
4667
- let one = A :: one ( ) ;
4668
- if start <= end {
4669
+ if start == end {
4670
+ ( Some ( mem:: replace ( start, A :: one ( ) ) ) , Some ( mem:: replace ( end, A :: one ( ) ) ) )
4671
+ } else if start < end {
4672
+ let one = A :: one ( ) ;
4669
4673
let mut n = & * end - & one;
4670
4674
mem:: swap ( & mut n, end) ;
4671
4675
4672
4676
( if n == * start { Some ( mem:: replace ( start, one) ) } else { None } ,
4673
4677
Some ( n) )
4674
4678
} else {
4675
- ( Some ( mem:: replace ( end, one) ) , None )
4679
+ ( Some ( mem:: replace ( end, A :: one ( ) ) ) , None )
4676
4680
}
4677
4681
}
4678
4682
} ;
0 commit comments