flat-zip 0.1.0

An iterator adaptor to help traverse two-level collections
Documentation
use super::FlatZipExt;
use std::collections::BTreeMap;

#[test]
fn test_enumerated() {
    let jagged_vec = vec![
        vec!["zero", "", "0"],
        vec![],
        vec!["II", "two"],
        vec!["three", "three", "three"],
        vec![],
        vec!["55555"],
        vec!["6"],
        vec!["seven"; 2],
        vec![],
        vec![],
    ];

    let mut iter = jagged_vec.into_iter().enumerate().flat_zip();

    assert_eq!(iter.next(), Some((0, "zero")));
    assert_eq!(iter.next(), Some((0, "")));
    assert_eq!(iter.next(), Some((0, "0")));

    assert_eq!(iter.next(), Some((2, "II")));
    assert_eq!(iter.next(), Some((2, "two")));

    assert_eq!(iter.next(), Some((3, "three")));
    assert_eq!(iter.next(), Some((3, "three")));
    assert_eq!(iter.next(), Some((3, "three")));

    assert_eq!(iter.next(), Some((5, "55555")));

    assert_eq!(iter.next(), Some((6, "6")));

    assert_eq!(iter.next(), Some((7, "seven")));
    assert_eq!(iter.next(), Some((7, "seven")));

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

#[test]
fn test_multimap() {
    let mut map = BTreeMap::new();
    map.insert(3, vec!["three", "3", "III"]);
    map.insert(7, vec!["7", "seven", "VII"]);
    map.insert(9, vec![]);
    map.insert(8, vec!["eight", "8"]);

    let mut iter = map.into_iter().flat_zip();

    assert_eq!(iter.next(), Some((3, "three")));
    assert_eq!(iter.next(), Some((3, "3")));
    assert_eq!(iter.next(), Some((3, "III")));

    assert_eq!(iter.next(), Some((7, "7")));
    assert_eq!(iter.next(), Some((7, "seven")));
    assert_eq!(iter.next(), Some((7, "VII")));

    assert_eq!(iter.next(), Some((8, "eight")));
    assert_eq!(iter.next(), Some((8, "8")));

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