about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorvarkor <github@varkor.com>2018-01-05 18:57:10 +0000
committervarkor <github@varkor.com>2018-01-05 18:57:10 +0000
commitc23d4500fdb865040a584da24122592b25feb09a (patch)
treeaa6b224bc8388551d01c7830d88ee1a6807776da /src/libcore
parent439beab41fb5162b26c075a7d7cb28662ba0ab7b (diff)
Fix behaviour after iterator exhaustion
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/iter/range.rs12
-rw-r--r--src/libcore/tests/iter.rs13
2 files changed, 20 insertions, 5 deletions
diff --git a/src/libcore/iter/range.rs b/src/libcore/iter/range.rs
index 03cc5a03cff..7a38e0cf7cc 100644
--- a/src/libcore/iter/range.rs
+++ b/src/libcore/iter/range.rs
@@ -377,17 +377,23 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
 
     #[inline]
     fn last(self) -> Option<A> {
-        Some(self.end)
+        if self.start <= self.end {
+            Some(self.end)
+        } else { None }
     }
 
     #[inline]
     fn min(self) -> Option<A> {
-        Some(self.start)
+        if self.start <= self.end {
+            Some(self.start)
+        } else { None }
     }
 
     #[inline]
     fn max(self) -> Option<A> {
-        Some(self.end)
+        if self.start <= self.end {
+            Some(self.end)
+        } else { None }
     }
 }
 
diff --git a/src/libcore/tests/iter.rs b/src/libcore/tests/iter.rs
index c75417f8de9..9cbec8f9e6e 100644
--- a/src/libcore/tests/iter.rs
+++ b/src/libcore/tests/iter.rs
@@ -1360,21 +1360,30 @@ fn test_range_max() {
 }
 
 #[test]
-fn test_range_inc_last_max() {
+fn test_range_inclusive_last_max() {
     assert_eq!((0..=20).last(), Some(20));
     assert_eq!((-20..=0).last(), Some(0));
     assert_eq!((5..=5).last(), Some(5));
+    let mut r = 10..=10;
+    r.next();
+    assert_eq!(r.last(), None);
 
     assert_eq!((0..=20).max(), Some(20));
     assert_eq!((-20..=0).max(), Some(0));
     assert_eq!((5..=5).max(), Some(5));
+    let mut r = 10..=10;
+    r.next();
+    assert_eq!(r.max(), None);
 }
 
 #[test]
-fn test_range_inc_min() {
+fn test_range_inclusive_min() {
     assert_eq!((0..=20).min(), Some(0));
     assert_eq!((-20..=0).min(), Some(-20));
     assert_eq!((5..=5).min(), Some(5));
+    let mut r = 10..=10;
+    r.next();
+    assert_eq!(r.min(), None);
 }
 
 #[test]