Use is_empty in range iteration exhaustion tests
This commit is contained in:
parent
7fe182fdfe
commit
b5cb393cf5
@ -262,6 +262,13 @@ impl<Idx: PartialOrd<Idx>> RangeTo<Idx> {
|
||||
/// The `RangeInclusive` `start..=end` contains all values with `x >= start`
|
||||
/// and `x <= end`.
|
||||
///
|
||||
/// This iterator is [fused], but the specific values of `start` and `end` after
|
||||
/// iteration has finished are **unspecified** other than that [`.is_empty()`]
|
||||
/// will return `true` once no more values will be produced.
|
||||
///
|
||||
/// [fused]: ../iter/trait.FusedIterator.html
|
||||
/// [`.is_empty()`]: #method.is_empty
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
@ -329,6 +336,17 @@ impl<Idx: PartialOrd<Idx>> RangeInclusive<Idx> {
|
||||
/// assert!(!(3..=3).is_empty());
|
||||
/// assert!( (3..=2).is_empty());
|
||||
/// ```
|
||||
///
|
||||
/// This method returns `true` after iteration has finished:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(range_is_empty,inclusive_range_syntax)]
|
||||
///
|
||||
/// let mut r = 3..=5;
|
||||
/// for _ in r.by_ref() {}
|
||||
/// // Precise field values are unspecified here
|
||||
/// assert!(r.is_empty());
|
||||
/// ```
|
||||
#[unstable(feature = "range_is_empty", reason = "recently added", issue = "123456789")]
|
||||
pub fn is_empty(&self) -> bool {
|
||||
!(self.start <= self.end)
|
||||
|
@ -1322,42 +1322,84 @@ fn test_range() {
|
||||
(isize::MAX as usize + 2, Some(isize::MAX as usize + 2)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_range_exhaustion() {
|
||||
let mut r = 10..10;
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next(), None);
|
||||
assert_eq!(r.next_back(), None);
|
||||
assert_eq!(r, 10..10);
|
||||
|
||||
let mut r = 10..12;
|
||||
assert_eq!(r.next(), Some(10));
|
||||
assert_eq!(r.next(), Some(11));
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r, 12..12);
|
||||
assert_eq!(r.next(), None);
|
||||
|
||||
let mut r = 10..12;
|
||||
assert_eq!(r.next_back(), Some(11));
|
||||
assert_eq!(r.next_back(), Some(10));
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r, 10..10);
|
||||
assert_eq!(r.next_back(), None);
|
||||
|
||||
let mut r = 100..10;
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next(), None);
|
||||
assert_eq!(r.next_back(), None);
|
||||
assert_eq!(r, 100..10);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_range_inclusive_exhaustion() {
|
||||
let mut r = 10..=10;
|
||||
assert_eq!(r.next(), Some(10));
|
||||
assert_eq!(r, 1..=0);
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next(), None);
|
||||
assert_eq!(r.next(), None);
|
||||
|
||||
let mut r = 10..=10;
|
||||
assert_eq!(r.next_back(), Some(10));
|
||||
assert_eq!(r, 1..=0);
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next_back(), None);
|
||||
|
||||
let mut r = 10..=12;
|
||||
assert_eq!(r.next(), Some(10));
|
||||
assert_eq!(r.next(), Some(11));
|
||||
assert_eq!(r.next(), Some(12));
|
||||
assert_eq!(r, 1..=0);
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next(), None);
|
||||
|
||||
let mut r = 10..=12;
|
||||
assert_eq!(r.next_back(), Some(12));
|
||||
assert_eq!(r.next_back(), Some(11));
|
||||
assert_eq!(r.next_back(), Some(10));
|
||||
assert_eq!(r, 1..=0);
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next_back(), None);
|
||||
|
||||
let mut r = 10..=12;
|
||||
assert_eq!(r.nth(2), Some(12));
|
||||
assert_eq!(r, 1..=0);
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next(), None);
|
||||
|
||||
let mut r = 10..=12;
|
||||
assert_eq!(r.nth(5), None);
|
||||
assert_eq!(r, 1..=0);
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next(), None);
|
||||
|
||||
let mut r = 100..=10;
|
||||
assert_eq!(r.next(), None);
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next(), None);
|
||||
assert_eq!(r.next(), None);
|
||||
assert_eq!(r, 100..=10);
|
||||
|
||||
let mut r = 100..=10;
|
||||
assert_eq!(r.next_back(), None);
|
||||
assert!(r.is_empty());
|
||||
assert_eq!(r.next_back(), None);
|
||||
assert_eq!(r.next_back(), None);
|
||||
assert_eq!(r, 100..=10);
|
||||
}
|
||||
|
||||
@ -1427,10 +1469,11 @@ fn test_range_inclusive_nth() {
|
||||
assert_eq!(r, 13..=20);
|
||||
assert_eq!(r.nth(2), Some(15));
|
||||
assert_eq!(r, 16..=20);
|
||||
assert_eq!(r.is_empty(), false);
|
||||
assert_eq!(ExactSizeIterator::is_empty(&r), false);
|
||||
assert_eq!(r.nth(10), None);
|
||||
assert_eq!(r.is_empty(), true);
|
||||
assert_eq!(ExactSizeIterator::is_empty(&r), true);
|
||||
assert_eq!(r, 1..=0); // We may not want to document/promise this detail
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -1514,11 +1557,11 @@ fn test_range_inclusive_folds() {
|
||||
|
||||
let mut it = 10..=20;
|
||||
assert_eq!(it.try_fold(0, |a,b| Some(a+b)), Some(165));
|
||||
assert_eq!(it, 1..=0);
|
||||
assert!(it.is_empty());
|
||||
|
||||
let mut it = 10..=20;
|
||||
assert_eq!(it.try_rfold(0, |a,b| Some(a+b)), Some(165));
|
||||
assert_eq!(it, 1..=0);
|
||||
assert!(it.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
x
Reference in New Issue
Block a user