csr_matrix 0.1.0

Simple implementation of a generic Compressed Sparse Row (CSR) matrix.
Documentation
use csr_matrix::CsrMatrixBuilder;
use itertools::Itertools;

#[test]
fn test_row_iter() {
    let m = 3;
    let n = 3;

    let matrix = {
        let mut builder = CsrMatrixBuilder::<usize>::new(m, n);

        builder.add_entry(0, 0, 0);
        builder.add_entry(1, 1, 1);
        builder.add_entry(2, 2, 2);

        builder.build()
    };

    for i in 0..m {
        let mut row_iter = matrix.row_iter(i);
        assert_eq!(Some(&(i, i)), row_iter.next());
        assert!(row_iter.next().is_none());
    }
}

#[test]
fn test_entries_iter() {
    let m = 9;
    let n = 9;

    for permutation in (0..m).permutations(m) {
        test_entries_iter_helper(m, n, permutation);
    }
}

fn test_entries_iter_helper(m: usize, n: usize, permutation: Vec<usize>) {
    let matrix = {
        let mut builder = CsrMatrixBuilder::<usize>::new(m, n);

        for i in permutation.into_iter() {
            builder.add_entry(i, i, i);
        }

        builder.build()
    };

    let mut entries_iter = matrix.entries_iter();
    for i in 0..m {
        assert_eq!(Some((i, &(i, i))), entries_iter.next());
    }
    assert_eq!(None, entries_iter.next());
}