int-interval 0.9.0

A small, no_std half-open interval algebra library for primitive integer types.
Documentation
use std::vec;
use std::vec::Vec;

use super::*;

#[test]
fn one_two_iterates_owned_values() {
    assert_eq!(OneTwo::One(1).into_iter().collect::<Vec<_>>(), vec![1]);
    assert_eq!(
        OneTwo::Two(1, 2).into_iter().collect::<Vec<_>>(),
        vec![1, 2]
    );
}

#[test]
fn zero_one_two_iterates_owned_values() {
    assert_eq!(
        ZeroOneTwo::<i32>::Zero.into_iter().collect::<Vec<_>>(),
        vec![]
    );
    assert_eq!(ZeroOneTwo::One(1).into_iter().collect::<Vec<_>>(), vec![1]);
    assert_eq!(
        ZeroOneTwo::Two(1, 2).into_iter().collect::<Vec<_>>(),
        vec![1, 2]
    );
}

#[test]
fn supports_double_ended_iteration() {
    let mut iter = ZeroOneTwo::Two(1, 2).into_iter();

    assert_eq!(iter.next_back(), Some(2));
    assert_eq!(iter.next(), Some(1));
    assert_eq!(iter.next(), None);
    assert_eq!(iter.next_back(), None);
}

#[test]
fn reports_exact_size() {
    let mut iter = OneTwo::Two(1, 2).into_iter();

    assert_eq!(iter.len(), 2);
    assert_eq!(iter.next(), Some(1));
    assert_eq!(iter.len(), 1);
    assert_eq!(iter.next(), Some(2));
    assert_eq!(iter.len(), 0);
}