ldpc-toolbox 0.12.0

Utilities to aid in LDPC code design
Documentation
#[cfg(test)]
mod tests {
    use crate::sparse::Node::{Col, Row};
    use crate::sparse::SparseMatrix;

    #[test]
    fn test_local_girth_circulant() {
        for circulant_size in 2..5 {
            let mut h = SparseMatrix::new(10, 20);
            for j in 0..circulant_size {
                h.insert(j, j);
                h.insert(j, (j + 1) % circulant_size);
            }
            for j in 0..circulant_size {
                assert_eq!(
                    h.girth_at_node_with_max(Col(j), 10),
                    Some(2 * circulant_size)
                );
                assert_eq!(
                    h.girth_at_node_with_max(Row(j), 10),
                    Some(2 * circulant_size)
                );
            }
            for j in circulant_size..h.num_cols() {
                assert_eq!(h.girth_at_node_with_max(Col(j), 10), None);
            }
            for j in circulant_size..h.num_rows() {
                assert_eq!(h.girth_at_node_with_max(Row(j), 10), None);
            }
        }
    }

    #[test]
    fn test_girth_identity() {
        let size = 20;
        let mut h = SparseMatrix::new(size, size);
        for j in 0..size {
            h.insert(j, j);
        }
        assert_eq!(h.girth_with_max(100), None);
    }

    #[test]
    fn test_girth_double_circulant() {
        let mut h = SparseMatrix::new(20, 30);
        let circulant_sizes = (5, 3);
        for j in 0..circulant_sizes.0 {
            h.insert(j, j);
            h.insert(j, (j + 1) % circulant_sizes.0);
        }
        for j in 0..circulant_sizes.1 {
            h.insert(j + circulant_sizes.0, j + circulant_sizes.0);
            h.insert(
                j + circulant_sizes.0,
                (j + 1) % circulant_sizes.1 + circulant_sizes.0,
            );
        }
        assert_eq!(h.girth_with_max(100), Some(2 * circulant_sizes.1));
        for j in 0..circulant_sizes.0 {
            assert_eq!(
                h.girth_at_node_with_max(Col(j), 100),
                Some(2 * circulant_sizes.0)
            );
            assert_eq!(
                h.girth_at_node_with_max(Row(j), 100),
                Some(2 * circulant_sizes.0)
            );
        }
        for j in circulant_sizes.0..(circulant_sizes.0 + circulant_sizes.1) {
            assert_eq!(
                h.girth_at_node_with_max(Col(j), 100),
                Some(2 * circulant_sizes.1)
            );
            assert_eq!(
                h.girth_at_node_with_max(Row(j), 100),
                Some(2 * circulant_sizes.1)
            );
        }
        for j in (circulant_sizes.0 + circulant_sizes.1)..h.num_cols() {
            assert_eq!(h.girth_at_node_with_max(Col(j), 100), None);
        }
        for j in (circulant_sizes.0 + circulant_sizes.1)..h.num_rows() {
            assert_eq!(h.girth_at_node_with_max(Row(j), 100), None);
        }
    }
}