forked from M-Labs/nalgebra
55 lines
1.8 KiB
Rust
55 lines
1.8 KiB
Rust
|
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||
|
|
||
|
|
||
|
use na::io;
|
||
|
use na::DMatrix;
|
||
|
|
||
|
#[test]
|
||
|
fn cs_matrix_market() {
|
||
|
let file_str = r#"
|
||
|
%%MatrixMarket matrix coordinate real general
|
||
|
%=================================================================================
|
||
|
%
|
||
|
% This ASCII file represents a sparse MxN matrix with L
|
||
|
% nonzeros in the following Matrix Market format:
|
||
|
%
|
||
|
% +----------------------------------------------+
|
||
|
% |%%MatrixMarket matrix coordinate real general | <--- header line
|
||
|
% |% | <--+
|
||
|
% |% comments | |-- 0 or more comment lines
|
||
|
% |% | <--+
|
||
|
% | M N L | <--- rows, columns, entries
|
||
|
% | I1 J1 A(I1, J1) | <--+
|
||
|
% | I2 J2 A(I2, J2) | |
|
||
|
% | I3 J3 A(I3, J3) | |-- L lines
|
||
|
% | . . . | |
|
||
|
% | IL JL A(IL, JL) | <--+
|
||
|
% +----------------------------------------------+
|
||
|
%
|
||
|
% Indices are 1-based, i.e. A(1,1) is the first element.
|
||
|
%
|
||
|
%=================================================================================
|
||
|
5 5 8
|
||
|
1 1 1.000e+00
|
||
|
2 2 1.050e+01
|
||
|
3 3 1.500e-02
|
||
|
1 4 6.000e+00
|
||
|
4 2 2.505e+02
|
||
|
4 4 -2.800e+02
|
||
|
4 5 3.332e+01
|
||
|
5 5 1.200e+01
|
||
|
"#;
|
||
|
|
||
|
let cs_mat = io::cs_matrix_from_matrix_market_str(file_str).unwrap();
|
||
|
let mat: DMatrix<_> = cs_mat.into();
|
||
|
let expected = DMatrix::from_row_slice(5, 5, &[
|
||
|
1.0, 0.0, 0.0, 6.0, 0.0,
|
||
|
0.0, 10.5, 0.0, 0.0, 0.0,
|
||
|
0.0, 0.0, 0.015, 0.0, 0.0,
|
||
|
0.0, 250.5, 0.0, -280.0, 33.32,
|
||
|
0.0, 0.0, 0.0, 0.0, 12.0,
|
||
|
]);
|
||
|
|
||
|
assert_eq!(mat, expected);
|
||
|
}
|