Test CsrMatrix::row_iter(_mut) and CscMatrix::col_iter(_mut)
This commit is contained in:
parent
1ebb612d46
commit
66b9185ec1
|
@ -392,7 +392,140 @@ fn csc_matrix_get_index_entry() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn csc_matrix_col_iter() {
|
fn csc_matrix_col_iter() {
|
||||||
// TODO
|
// Note: this is the transpose of the matrix used for the similar csr_matrix_row_iter test
|
||||||
|
// (this way the actual tests are almost identical, due to the transposed relationship
|
||||||
|
// between CSR and CSC)
|
||||||
|
#[rustfmt::skip]
|
||||||
|
let dense = DMatrix::from_row_slice(4, 3, &[
|
||||||
|
0, 3, 0,
|
||||||
|
1, 0, 4,
|
||||||
|
2, 0, 0,
|
||||||
|
0, 0, 5,
|
||||||
|
]);
|
||||||
|
let csc = CscMatrix::from(&dense);
|
||||||
|
|
||||||
|
// Immutable iterator
|
||||||
|
{
|
||||||
|
let mut col_iter = csc.col_iter();
|
||||||
|
|
||||||
|
{
|
||||||
|
let col = col_iter.next().unwrap();
|
||||||
|
assert_eq!(col.nrows(), 4);
|
||||||
|
assert_eq!(col.nnz(), 2);
|
||||||
|
assert_eq!(col.row_indices(), &[1, 2]);
|
||||||
|
assert_eq!(col.values(), &[1, 2]);
|
||||||
|
assert_eq!(col.get_entry(0), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(1), Some(SparseEntry::NonZero(&1)));
|
||||||
|
assert_eq!(col.get_entry(2), Some(SparseEntry::NonZero(&2)));
|
||||||
|
assert_eq!(col.get_entry(3), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let col = col_iter.next().unwrap();
|
||||||
|
assert_eq!(col.nrows(), 4);
|
||||||
|
assert_eq!(col.nnz(), 1);
|
||||||
|
assert_eq!(col.row_indices(), &[0]);
|
||||||
|
assert_eq!(col.values(), &[3]);
|
||||||
|
assert_eq!(col.get_entry(0), Some(SparseEntry::NonZero(&3)));
|
||||||
|
assert_eq!(col.get_entry(1), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(2), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(3), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let col = col_iter.next().unwrap();
|
||||||
|
assert_eq!(col.nrows(), 4);
|
||||||
|
assert_eq!(col.nnz(), 2);
|
||||||
|
assert_eq!(col.row_indices(), &[1, 3]);
|
||||||
|
assert_eq!(col.values(), &[4, 5]);
|
||||||
|
assert_eq!(col.get_entry(0), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(1), Some(SparseEntry::NonZero(&4)));
|
||||||
|
assert_eq!(col.get_entry(2), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(3), Some(SparseEntry::NonZero(&5)));
|
||||||
|
assert_eq!(col.get_entry(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert!(col_iter.next().is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutable iterator
|
||||||
|
{
|
||||||
|
let mut csc = csc;
|
||||||
|
let mut col_iter = csc.col_iter_mut();
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut col = col_iter.next().unwrap();
|
||||||
|
assert_eq!(col.nrows(), 4);
|
||||||
|
assert_eq!(col.nnz(), 2);
|
||||||
|
assert_eq!(col.row_indices(), &[1, 2]);
|
||||||
|
assert_eq!(col.values(), &[1, 2]);
|
||||||
|
assert_eq!(col.get_entry(0), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(1), Some(SparseEntry::NonZero(&1)));
|
||||||
|
assert_eq!(col.get_entry(2), Some(SparseEntry::NonZero(&2)));
|
||||||
|
assert_eq!(col.get_entry(3), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(4), None);
|
||||||
|
|
||||||
|
assert_eq!(col.values_mut(), &mut [1, 2]);
|
||||||
|
assert_eq!(
|
||||||
|
col.rows_and_values_mut(),
|
||||||
|
([1, 2].as_ref(), [1, 2].as_mut())
|
||||||
|
);
|
||||||
|
assert_eq!(col.get_entry_mut(0), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(col.get_entry_mut(1), Some(SparseEntryMut::NonZero(&mut 1)));
|
||||||
|
assert_eq!(col.get_entry_mut(2), Some(SparseEntryMut::NonZero(&mut 2)));
|
||||||
|
assert_eq!(col.get_entry_mut(3), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(col.get_entry_mut(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut col = col_iter.next().unwrap();
|
||||||
|
assert_eq!(col.nrows(), 4);
|
||||||
|
assert_eq!(col.nnz(), 1);
|
||||||
|
assert_eq!(col.row_indices(), &[0]);
|
||||||
|
assert_eq!(col.values(), &[3]);
|
||||||
|
assert_eq!(col.get_entry(0), Some(SparseEntry::NonZero(&3)));
|
||||||
|
assert_eq!(col.get_entry(1), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(2), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(3), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(4), None);
|
||||||
|
|
||||||
|
assert_eq!(col.values_mut(), &mut [3]);
|
||||||
|
assert_eq!(col.rows_and_values_mut(), ([0].as_ref(), [3].as_mut()));
|
||||||
|
assert_eq!(col.get_entry_mut(0), Some(SparseEntryMut::NonZero(&mut 3)));
|
||||||
|
assert_eq!(col.get_entry_mut(1), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(col.get_entry_mut(2), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(col.get_entry_mut(3), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(col.get_entry_mut(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut col = col_iter.next().unwrap();
|
||||||
|
assert_eq!(col.nrows(), 4);
|
||||||
|
assert_eq!(col.nnz(), 2);
|
||||||
|
assert_eq!(col.row_indices(), &[1, 3]);
|
||||||
|
assert_eq!(col.values(), &[4, 5]);
|
||||||
|
assert_eq!(col.get_entry(0), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(1), Some(SparseEntry::NonZero(&4)));
|
||||||
|
assert_eq!(col.get_entry(2), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(col.get_entry(3), Some(SparseEntry::NonZero(&5)));
|
||||||
|
assert_eq!(col.get_entry(4), None);
|
||||||
|
|
||||||
|
assert_eq!(col.values_mut(), &mut [4, 5]);
|
||||||
|
assert_eq!(
|
||||||
|
col.rows_and_values_mut(),
|
||||||
|
([1, 3].as_ref(), [4, 5].as_mut())
|
||||||
|
);
|
||||||
|
assert_eq!(col.get_entry_mut(0), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(col.get_entry_mut(1), Some(SparseEntryMut::NonZero(&mut 4)));
|
||||||
|
assert_eq!(col.get_entry_mut(2), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(col.get_entry_mut(3), Some(SparseEntryMut::NonZero(&mut 5)));
|
||||||
|
assert_eq!(col.get_entry_mut(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert!(col_iter.next().is_none());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
proptest! {
|
proptest! {
|
||||||
|
|
|
@ -392,7 +392,136 @@ fn csr_matrix_get_index_entry() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn csr_matrix_row_iter() {
|
fn csr_matrix_row_iter() {
|
||||||
// TODO
|
#[rustfmt::skip]
|
||||||
|
let dense = DMatrix::from_row_slice(3, 4, &[
|
||||||
|
0, 1, 2, 0,
|
||||||
|
3, 0, 0, 0,
|
||||||
|
0, 4, 0, 5
|
||||||
|
]);
|
||||||
|
let csr = CsrMatrix::from(&dense);
|
||||||
|
|
||||||
|
// Immutable iterator
|
||||||
|
{
|
||||||
|
let mut row_iter = csr.row_iter();
|
||||||
|
|
||||||
|
{
|
||||||
|
let row = row_iter.next().unwrap();
|
||||||
|
assert_eq!(row.ncols(), 4);
|
||||||
|
assert_eq!(row.nnz(), 2);
|
||||||
|
assert_eq!(row.col_indices(), &[1, 2]);
|
||||||
|
assert_eq!(row.values(), &[1, 2]);
|
||||||
|
assert_eq!(row.get_entry(0), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(1), Some(SparseEntry::NonZero(&1)));
|
||||||
|
assert_eq!(row.get_entry(2), Some(SparseEntry::NonZero(&2)));
|
||||||
|
assert_eq!(row.get_entry(3), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let row = row_iter.next().unwrap();
|
||||||
|
assert_eq!(row.ncols(), 4);
|
||||||
|
assert_eq!(row.nnz(), 1);
|
||||||
|
assert_eq!(row.col_indices(), &[0]);
|
||||||
|
assert_eq!(row.values(), &[3]);
|
||||||
|
assert_eq!(row.get_entry(0), Some(SparseEntry::NonZero(&3)));
|
||||||
|
assert_eq!(row.get_entry(1), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(2), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(3), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let row = row_iter.next().unwrap();
|
||||||
|
assert_eq!(row.ncols(), 4);
|
||||||
|
assert_eq!(row.nnz(), 2);
|
||||||
|
assert_eq!(row.col_indices(), &[1, 3]);
|
||||||
|
assert_eq!(row.values(), &[4, 5]);
|
||||||
|
assert_eq!(row.get_entry(0), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(1), Some(SparseEntry::NonZero(&4)));
|
||||||
|
assert_eq!(row.get_entry(2), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(3), Some(SparseEntry::NonZero(&5)));
|
||||||
|
assert_eq!(row.get_entry(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert!(row_iter.next().is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutable iterator
|
||||||
|
{
|
||||||
|
let mut csr = csr;
|
||||||
|
let mut row_iter = csr.row_iter_mut();
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut row = row_iter.next().unwrap();
|
||||||
|
assert_eq!(row.ncols(), 4);
|
||||||
|
assert_eq!(row.nnz(), 2);
|
||||||
|
assert_eq!(row.col_indices(), &[1, 2]);
|
||||||
|
assert_eq!(row.values(), &[1, 2]);
|
||||||
|
assert_eq!(row.get_entry(0), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(1), Some(SparseEntry::NonZero(&1)));
|
||||||
|
assert_eq!(row.get_entry(2), Some(SparseEntry::NonZero(&2)));
|
||||||
|
assert_eq!(row.get_entry(3), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(4), None);
|
||||||
|
|
||||||
|
assert_eq!(row.values_mut(), &mut [1, 2]);
|
||||||
|
assert_eq!(
|
||||||
|
row.cols_and_values_mut(),
|
||||||
|
([1, 2].as_ref(), [1, 2].as_mut())
|
||||||
|
);
|
||||||
|
assert_eq!(row.get_entry_mut(0), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(row.get_entry_mut(1), Some(SparseEntryMut::NonZero(&mut 1)));
|
||||||
|
assert_eq!(row.get_entry_mut(2), Some(SparseEntryMut::NonZero(&mut 2)));
|
||||||
|
assert_eq!(row.get_entry_mut(3), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(row.get_entry_mut(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut row = row_iter.next().unwrap();
|
||||||
|
assert_eq!(row.ncols(), 4);
|
||||||
|
assert_eq!(row.nnz(), 1);
|
||||||
|
assert_eq!(row.col_indices(), &[0]);
|
||||||
|
assert_eq!(row.values(), &[3]);
|
||||||
|
assert_eq!(row.get_entry(0), Some(SparseEntry::NonZero(&3)));
|
||||||
|
assert_eq!(row.get_entry(1), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(2), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(3), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(4), None);
|
||||||
|
|
||||||
|
assert_eq!(row.values_mut(), &mut [3]);
|
||||||
|
assert_eq!(row.cols_and_values_mut(), ([0].as_ref(), [3].as_mut()));
|
||||||
|
assert_eq!(row.get_entry_mut(0), Some(SparseEntryMut::NonZero(&mut 3)));
|
||||||
|
assert_eq!(row.get_entry_mut(1), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(row.get_entry_mut(2), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(row.get_entry_mut(3), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(row.get_entry_mut(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut row = row_iter.next().unwrap();
|
||||||
|
assert_eq!(row.ncols(), 4);
|
||||||
|
assert_eq!(row.nnz(), 2);
|
||||||
|
assert_eq!(row.col_indices(), &[1, 3]);
|
||||||
|
assert_eq!(row.values(), &[4, 5]);
|
||||||
|
assert_eq!(row.get_entry(0), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(1), Some(SparseEntry::NonZero(&4)));
|
||||||
|
assert_eq!(row.get_entry(2), Some(SparseEntry::Zero));
|
||||||
|
assert_eq!(row.get_entry(3), Some(SparseEntry::NonZero(&5)));
|
||||||
|
assert_eq!(row.get_entry(4), None);
|
||||||
|
|
||||||
|
assert_eq!(row.values_mut(), &mut [4, 5]);
|
||||||
|
assert_eq!(
|
||||||
|
row.cols_and_values_mut(),
|
||||||
|
([1, 3].as_ref(), [4, 5].as_mut())
|
||||||
|
);
|
||||||
|
assert_eq!(row.get_entry_mut(0), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(row.get_entry_mut(1), Some(SparseEntryMut::NonZero(&mut 4)));
|
||||||
|
assert_eq!(row.get_entry_mut(2), Some(SparseEntryMut::Zero));
|
||||||
|
assert_eq!(row.get_entry_mut(3), Some(SparseEntryMut::NonZero(&mut 5)));
|
||||||
|
assert_eq!(row.get_entry_mut(4), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert!(row_iter.next().is_none());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
proptest! {
|
proptest! {
|
||||||
|
|
Loading…
Reference in New Issue