pipeawesome2 0.1.3

Loops, branches and joins to UNIX pipes… in a sane way…
Documentation
pub fn remove_vec_vec_index<X>(vals: &mut Vec<Vec<X>>, index_0: usize, index_1: usize) {
    if let Some(v) = vals.get_mut(index_0) {
        if index_1 < v.len() {
            v.remove(index_1);
        }
    }
}

pub fn remove_vec_vec<X>(vals: &mut Vec<Vec<X>>) {
    for i in (0..vals.len()).rev() {
        let mut inner_len = 99;
        if let Some(iv) = vals.get(i) {
            inner_len = iv.len();
        }
        if inner_len == 0 {
            vals.remove(i);
        }
    }
}

#[test]
fn test_remove_vec_vec_index() {
    let mut vals = vec![
        vec![0, 1, 2],
        vec![3, 4, 5],
        vec![6, 7, 8],
    ];
    remove_vec_vec_index(&mut vals, 3, 1);
    assert_eq!(
        vals,
        vec![
            vec![0, 1, 2],
            vec![3, 4, 5],
            vec![6, 7, 8],
        ]
    );
    remove_vec_vec_index(&mut vals, 2, 3);
    assert_eq!(
        vals,
        vec![
            vec![0, 1, 2],
            vec![3, 4, 5],
            vec![6, 7, 8],
        ]
    );
    remove_vec_vec_index(&mut vals, 1, 1);
    assert_eq!(
        vals,
        vec![
            vec![0, 1, 2],
            vec![3, 5],
            vec![6, 7, 8],
        ]
    );
    remove_vec_vec_index(&mut vals, 0, 1);
    assert_eq!(
        vals,
        vec![
            vec![0, 2],
            vec![3, 5],
            vec![6, 7, 8],
        ]
    );
    remove_vec_vec_index(&mut vals, 2, 1);
    assert_eq!(
        vals,
        vec![
            vec![0, 2],
            vec![3, 5],
            vec![6, 8],
        ]
    );
    remove_vec_vec_index(&mut vals, 0, 0);
    assert_eq!(
        vals,
        vec![
            vec![2],
            vec![3, 5],
            vec![6, 8],
        ]
    );
    remove_vec_vec_index(&mut vals, 2, 1);
    assert_eq!(
        vals,
        vec![
            vec![2],
            vec![3, 5],
            vec![6],
        ]
    );
}


#[test]
fn test_remove_vec_vec() {
    let mut vals_0 = vec![
        vec![0, 1, 2],
        vec![3, 4, 5],
        vec![6, 7, 8],
    ];
    remove_vec_vec(&mut vals_0);
    assert_eq!(
        vals_0,
        vec![
            vec![0, 1, 2],
            vec![3, 4, 5],
            vec![6, 7, 8],
        ]
    );
    let mut vals_1 = vec![
        vec![0, 1, 2],
        vec![],
        vec![6, 7, 8],
    ];
    remove_vec_vec(&mut vals_1);
    assert_eq!(
        vals_1,
        vec![
            vec![0, 1, 2],
            vec![6, 7, 8],
        ]
    );
    let mut vals_2 = vec![
        vec![],
        vec![3, 4, 5],
        vec![6, 7, 8],
    ];
    remove_vec_vec(&mut vals_2);
    assert_eq!(
        vals_2,
        vec![
            vec![3, 4, 5],
            vec![6, 7, 8],
        ]
    );
    let mut vals_3 = vec![
        vec![],
        vec![3, 4, 5],
        vec![],
    ];
    remove_vec_vec(&mut vals_3);
    assert_eq!(
        vals_3,
        vec![
            vec![3, 4, 5],
        ]
    );
    let mut vals_4: Vec<Vec<usize>> = vec![
        vec![],
        vec![],
        vec![],
    ];
    remove_vec_vec(&mut vals_4);
    assert_eq!(vals_4.len(), 0);
}