rangetools 0.1.4

Extending the Rust Range structs found in std::ops
Documentation
use crate::{LowerBound, LowerBoundedRange};

#[test]
fn next() {
    let r1 = LowerBoundedRange::new(LowerBound::excluded(2));
    let mut i1 = r1.into_iter();
    assert_eq!(i1.next(), Some(3));
    assert_eq!(i1.next(), Some(4));
    assert_eq!(i1.next(), Some(5));

    let r2 = LowerBoundedRange::new(LowerBound::included(2));
    let mut i2 = r2.into_iter();
    assert_eq!(i2.next(), Some(2));
    assert_eq!(i2.next(), Some(3));
    assert_eq!(i2.next(), Some(4));
}

#[test]
fn size_hint() {
    let hint = (usize::MAX, None);
    let r1 = LowerBoundedRange::new(LowerBound::excluded(2));
    assert_eq!(r1.into_iter().size_hint(), hint);

    let r2 = LowerBoundedRange::new(LowerBound::included(2));
    assert_eq!(r2.into_iter().size_hint(), hint);
}

#[test]
fn nth() {
    let r1 = LowerBoundedRange::new(LowerBound::excluded(2));
    let mut i1 = r1.into_iter();
    assert_eq!(i1.nth(1), Some(4));
    assert_eq!(i1.nth(2), Some(7));
    assert_eq!(i1.nth(3), Some(11));

    let r2 = LowerBoundedRange::new(LowerBound::included(2));
    let mut i2 = r2.into_iter();
    assert_eq!(i2.nth(1), Some(3));
    assert_eq!(i2.nth(2), Some(6));
    assert_eq!(i2.nth(3), Some(10));
}

#[test]
fn min() {
    let r1 = LowerBoundedRange::new(LowerBound::excluded(2));
    assert_eq!(r1.into_iter().min(), Some(3));

    let r2 = LowerBoundedRange::new(LowerBound::included(2));
    assert_eq!(r2.into_iter().min(), Some(2));
}