@@ -1857,7 +1857,7 @@ pub fn range_step<A: CheckedAdd + Ord + Clone + Zero>(start: A, stop: A, step: A
1857
1857
impl < A : CheckedAdd + Ord + Clone > Iterator < A > for RangeStep < A > {
1858
1858
#[ inline]
1859
1859
fn next ( & mut self ) -> Option < A > {
1860
- if ( self . rev && self . state > self . stop ) || self . state < self . stop {
1860
+ if ( self . rev && self . state > self . stop ) || ( ! self . rev && self . state < self . stop ) {
1861
1861
let result = self . state . clone ( ) ;
1862
1862
match self . state . checked_add ( & self . step ) {
1863
1863
Some ( x) => self . state = x,
@@ -1891,22 +1891,14 @@ pub fn range_step_inclusive<A: CheckedAdd + Ord + Clone + Zero>(start: A, stop:
1891
1891
impl < A : CheckedAdd + Ord + Clone + Eq > Iterator < A > for RangeStepInclusive < A > {
1892
1892
#[ inline]
1893
1893
fn next ( & mut self ) -> Option < A > {
1894
- if !self . done {
1895
- if ( self . rev && self . state > self . stop ) || self . state < self . stop {
1896
- let result = self . state . clone ( ) ;
1897
- match self . state . checked_add ( & self . step ) {
1898
- Some ( x) => self . state = x,
1899
- None => self . done = true
1900
- }
1901
- Some ( result)
1902
- } else {
1903
- if self . state == self . stop {
1904
- self . done = true ;
1905
- Some ( self . state . clone ( ) )
1906
- } else {
1907
- None
1908
- }
1894
+ if !self . done && ( ( self . rev && self . state >= self . stop ) ||
1895
+ ( !self . rev && self . state <= self . stop ) ) {
1896
+ let result = self . state . clone ( ) ;
1897
+ match self . state . checked_add ( & self . step ) {
1898
+ Some ( x) => self . state = x,
1899
+ None => self . done = true
1909
1900
}
1901
+ Some ( result)
1910
1902
} else {
1911
1903
None
1912
1904
}
@@ -2726,13 +2718,15 @@ mod tests {
2726
2718
fn test_range_step ( ) {
2727
2719
assert_eq ! ( range_step( 0 i, 20 , 5 ) . collect:: <~[ int] >( ) , ~[ 0 , 5 , 10 , 15 ] ) ;
2728
2720
assert_eq ! ( range_step( 20 i, 0 , -5 ) . collect:: <~[ int] >( ) , ~[ 20 , 15 , 10 , 5 ] ) ;
2721
+ assert_eq ! ( range_step( 20 i, 0 , -6 ) . collect:: <~[ int] >( ) , ~[ 20 , 14 , 8 , 2 ] ) ;
2729
2722
assert_eq ! ( range_step( 200u8 , 255 , 50 ) . collect:: <~[ u8 ] >( ) , ~[ 200u8 , 250 ] ) ;
2730
2723
}
2731
2724
2732
2725
#[ test]
2733
2726
fn test_range_step_inclusive ( ) {
2734
2727
assert_eq ! ( range_step_inclusive( 0 i, 20 , 5 ) . collect:: <~[ int] >( ) , ~[ 0 , 5 , 10 , 15 , 20 ] ) ;
2735
2728
assert_eq ! ( range_step_inclusive( 20 i, 0 , -5 ) . collect:: <~[ int] >( ) , ~[ 20 , 15 , 10 , 5 , 0 ] ) ;
2729
+ assert_eq ! ( range_step_inclusive( 20 i, 0 , -6 ) . collect:: <~[ int] >( ) , ~[ 20 , 14 , 8 , 2 ] ) ;
2736
2730
assert_eq ! ( range_step_inclusive( 200u8 , 255 , 50 ) . collect:: <~[ u8 ] >( ) , ~[ 200u8 , 250 ] ) ;
2737
2731
}
2738
2732
0 commit comments