@@ -4605,8 +4605,10 @@ impl<A: Step + One> Iterator for ops::RangeInclusive<A> where
46054605 Empty { .. } => ( None , None ) , // empty iterators yield no values
46064606
46074607 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 ( ) ;
46104612 let mut n = & * start + & one;
46114613 mem:: swap ( & mut n, start) ;
46124614
@@ -4620,7 +4622,7 @@ impl<A: Step + One> Iterator for ops::RangeInclusive<A> where
46204622 // ^ are we done yet?
46214623 Some ( n) ) // < the value to output
46224624 } else {
4623- ( Some ( mem:: replace ( start, one) ) , None )
4625+ ( Some ( mem:: replace ( start, A :: one ( ) ) ) , None )
46244626 }
46254627 }
46264628 } ;
@@ -4664,15 +4666,17 @@ impl<A: Step + One> DoubleEndedIterator for ops::RangeInclusive<A> where
46644666 Empty { .. } => return None ,
46654667
46664668 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 ( ) ;
46694673 let mut n = & * end - & one;
46704674 mem:: swap ( & mut n, end) ;
46714675
46724676 ( if n == * start { Some ( mem:: replace ( start, one) ) } else { None } ,
46734677 Some ( n) )
46744678 } else {
4675- ( Some ( mem:: replace ( end, one) ) , None )
4679+ ( Some ( mem:: replace ( end, A :: one ( ) ) ) , None )
46764680 }
46774681 }
46784682 } ;
0 commit comments