zip_long 0.1.1

iterator adaptors for zipping together two or more iterators
Documentation
use super::Zip;

#[test]
fn fill_with() {
    let q = vec![0_usize; 4];
    let r = vec![1_usize; 7];
    let want = vec![(0_usize, 1_usize); 7];
    let got: Vec<(usize, usize)> = q.into_iter().zip_fill_with(r, 0).collect();
    assert_eq!(want, got);

    let want = vec![
        ("abc".to_string(), "foo".to_string()),
        ("abc".to_string(), "bar".to_string()),
    ];
    let got: Vec<(String, String)> = Vec::new()
        .into_iter()
        .zip_fill_with(
            vec!["foo".to_string(), "bar".to_string()],
            "abc".to_string(),
        )
        .collect();
    assert_eq!(got, want)
}
#[test]
fn fill() {
    let mut i: u8 = 0;
    let filler = || {
        let c = (b'a' + i) as char;
        i += 1;
        c
    };
    let want = vec![('A', 'a'), ('B', 'b'), ('C', 'c'), ('D', 'd')];
    let q = vec!['A', 'B', 'C', 'D'];
    let got: Vec<(char, char)> = q.clone().zip_fill(Vec::new(), filler).collect();
    assert_eq!(want, got);

    let want_rev = vec![('e', 'A'), ('f', 'B'), ('g', 'C'), ('h', 'D')];
    let mut i = 4;
    let filler = || {
        let c = (b'a' + i) as char;
        i += 1;
        c
    };
    let got_reversed: Vec<(char, char)> = Vec::new().zip_fill(q, filler).collect();
    assert_eq!(got_reversed, want_rev)
}
#[test]
fn fill_default() {

    let want = vec![(1, 2), (3, 4), (5, 6), (0, 8)];
    let got: Vec<(usize, usize)> = vec![1, 3, 5].zip_fill_default( vec![2, 4, 6, 8]).collect();
    assert_eq!(want, got)
}
#[test]
fn size_hint() {
    use std::iter::repeat;
    assert_eq!(
        (20, Some(20)),
        repeat(0_usize)
            .take(10)
            .zip_fill_default(repeat(0).take(20))
            .size_hint()
    );

    let ten = std::iter::repeat(10).take(10);
    let it = ten.zip_fill_default(repeat(0));
    assert_eq!(it.size_hint(), (::std::usize::MAX, None));
}