padded-iterator 0.1.0

An iterator that can be padded to a specified length
Documentation
use std::vec::IntoIter;

use crate::{utils::BuildError, PaddedIterBuilder};

#[test]
fn test_padded_iter() {
    let mut iter = PaddedIterBuilder::new()
        .iter(vec![1, 2, 3].into_iter())
        .length(5)
        .pad(0)
        .build()
        .unwrap();

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

#[test]
fn test_padded_iter_length_0() {
    let mut iter = PaddedIterBuilder::new()
        .iter(vec![1, 2, 3].into_iter())
        .length(0)
        .pad(0)
        .build()
        .unwrap();

    assert_eq!(iter.next(), None);
}

#[test]
fn test_padded_iter_length_1() {
    let mut iter = PaddedIterBuilder::new()
        .iter(vec![1, 2, 3].into_iter())
        .length(1)
        .pad(0)
        .build()
        .unwrap();

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

#[test]
fn test_padded_iter_mod_iter_after_creation() {
    let mut builder = PaddedIterBuilder::new()
        .iter(vec![1, 2, 3].into_iter())
        .length(5)
        .pad(0);

    builder = builder.iter(vec![4, 5, 6].into_iter());

    let mut iter = builder.build().unwrap();

    assert_eq!(iter.next(), Some(4));
    assert_eq!(iter.next(), Some(5));
    assert_eq!(iter.next(), Some(6));
    assert_eq!(iter.next(), Some(0));
    assert_eq!(iter.next(), Some(0));
    assert_eq!(iter.next(), None);
}

#[test]
fn test_padded_iter_mod_length_after_creation() {
    let mut builder = PaddedIterBuilder::new()
        .iter(vec![1, 2, 3].into_iter())
        .length(5)
        .pad(0);
    builder = builder.length(2);

    let mut iter = builder.build().unwrap();

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

#[test]
fn test_padded_iter_mod_pad_after_creation() {
    let mut builder = PaddedIterBuilder::new()
        .iter(vec![1, 2, 3].into_iter())
        .length(5)
        .pad(0);
    builder = builder.pad(1);

    let mut iter = builder.build().unwrap();

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

#[test]
fn test_padded_iter_no_length() {
    let builder = PaddedIterBuilder::new()
        .iter(vec![1, 2, 3].into_iter())
        .pad(0);

    assert!(matches!(builder.build(), Err(BuildError::LengthNotSet)));
}

#[test]
fn test_padded_iter_no_pad() {
    let builder = PaddedIterBuilder::new()
        .iter(vec![1, 2, 3].into_iter())
        .length(5);

    assert!(matches!(builder.build(), Err(BuildError::PadNotSet)));
}

#[test]
fn test_padded_iter_no_iter() {
    let builder: PaddedIterBuilder<IntoIter<i32>, i32> = PaddedIterBuilder::new().length(5).pad(0);

    assert!(matches!(builder.build(), Err(BuildError::IterNotSet)));
}