From c23d4500fdb865040a584da24122592b25feb09a Mon Sep 17 00:00:00 2001 From: varkor Date: Fri, 5 Jan 2018 18:57:10 +0000 Subject: [PATCH] Fix behaviour after iterator exhaustion --- src/libcore/iter/range.rs | 12 +++++++++--- src/libcore/tests/iter.rs | 13 +++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/libcore/iter/range.rs b/src/libcore/iter/range.rs index 03cc5a03cff2..7a38e0cf7cc4 100644 --- a/src/libcore/iter/range.rs +++ b/src/libcore/iter/range.rs @@ -377,17 +377,23 @@ impl Iterator for ops::RangeInclusive { #[inline] fn last(self) -> Option { - Some(self.end) + if self.start <= self.end { + Some(self.end) + } else { None } } #[inline] fn min(self) -> Option { - Some(self.start) + if self.start <= self.end { + Some(self.start) + } else { None } } #[inline] fn max(self) -> Option { - 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 c75417f8de92..9cbec8f9e6e8 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]