about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-09-15 00:39:34 -0400
committerDaniel Micay <danielmicay@gmail.com>2013-09-15 00:39:34 -0400
commit66c2965b046029bec04b3f2c73e6619c15784145 (patch)
treee65b17ebc94818075951a290c854d72e27428995
parentbf7587f5510d146c1f8bce4cb1ec10379d5b7d78 (diff)
downloadrust-66c2965b046029bec04b3f2c73e6619c15784145.tar.gz
rust-66c2965b046029bec04b3f2c73e6619c15784145.zip
iter: fix `RangeInclusive`'s `DoubleEndedIterator`
-rw-r--r--src/libstd/iter.rs8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/libstd/iter.rs b/src/libstd/iter.rs
index ba109bfa125..0903d6d0b23 100644
--- a/src/libstd/iter.rs
+++ b/src/libstd/iter.rs
@@ -1829,11 +1829,11 @@ impl<A: Sub<A, A> + Integer + Ord + Clone> DoubleEndedIterator<A> for RangeInclu
             let result = self.range.stop.clone();
             self.range.stop = self.range.stop - self.range.one;
             Some(result)
-        } else if self.done {
-            None
-        } else {
+        } else if !self.done && self.range.state == self.range.stop {
             self.done = true;
             Some(self.range.stop.clone())
+        } else {
+            None
         }
     }
 }
@@ -2713,7 +2713,9 @@ mod tests {
         assert_eq!(range_inclusive(0i, 5).collect::<~[int]>(), ~[0i, 1, 2, 3, 4, 5]);
         assert_eq!(range_inclusive(0i, 5).invert().collect::<~[int]>(), ~[5i, 4, 3, 2, 1, 0]);
         assert_eq!(range_inclusive(200, -5).collect::<~[int]>(), ~[]);
+        assert_eq!(range_inclusive(200, -5).invert().collect::<~[int]>(), ~[]);
         assert_eq!(range_inclusive(200, 200).collect::<~[int]>(), ~[200]);
+        assert_eq!(range_inclusive(200, 200).invert().collect::<~[int]>(), ~[200]);
     }
 
     #[test]