extended_matrix/tests/matrix/traits/
test_try_into_symmetric_compacted_matrix_trait.rs

1#![allow(unused_imports)]
2
3use crate::{SquareMatrix, TryIntoSymmetricCompactedMatrixTrait, Position};
4
5
6#[test]
7fn test_try_into_symmetric_compacted_matrix()
8{
9    let sm_1 = SquareMatrix::create(4, &[
10            5.0, -4.0, 1.0, 0.0,
11            -4.000001, 6.0, -4.0, 1.0,
12            1.0, -4.0, 6.0, -4.0,
13            0.0, 1.0, -4.0, 5.0,
14        ]);
15    let sm_2 = SquareMatrix::create(5, &[
16        2.0, -2.0, 0.0, 0.0, -1.0,
17        -2.0, 3.0, -2.0, 0.0, 0.0,
18        0.0, -2.0, 5.0, -3.0, 0.0,
19        0.0, 0.0, -3.0, 10.0, 4.0,
20        -1.0, 0.0, 0.0, 4.0, 10.0,
21    ]);
22    let sm_3 = SquareMatrix::create(4, &[
23        5.0, -4.0, 1.0, 0.0,
24        -4.000001, 6.0, -4.0, 1.0,
25        1.0, -4.0, 6.0, -4.0,
26        0.0, 1.0, -4.0, 0.0,
27    ]);
28    let sm_4 = SquareMatrix::create(4, &[
29        5.0, -4.0, 1.0, 0.0,
30        -4.25, 6.0, -4.0, 1.0,
31        1.0, -4.0, 6.0, -4.0,
32        0.0, 1.0, -4.0, 0.0,
33    ]);
34
35    let expected_a_1 = vec![5.0, 6.0, -4.0, 6.0, -4.0, 1.0, 5.0, -4.0, 1.0];
36    let expected_maxa_1 = vec![0i64, 1, 3, 6, 9];
37    let expected_a_2 = vec![2.0, 3.0, -2.0, 5.0, -2.0, 10.0, -3.0, 10.0, 4.0, 0.0, 0.0, -1.0];
38    let expected_maxa_2 = vec![0, 1, 3, 5, 7, 12];
39    
40    assert_eq!(sm_1.try_into_symmetric_compacted_matrix(1e-6), Ok((expected_a_1, expected_maxa_1)));
41    assert_eq!(sm_2.try_into_symmetric_compacted_matrix(1e-6), Ok((expected_a_2, expected_maxa_2)));
42    assert_eq!(sm_3.try_into_symmetric_compacted_matrix(1e-6), 
43        Err("Diagonal element [3, 3] equals to zero!".to_string()));
44    assert_eq!(sm_4.try_into_symmetric_compacted_matrix(1e-6), 
45        Err("Element [0, 1] does not match with [1, 0]!".to_string()));
46}
47
48
49#[test]
50fn test_forced_into_symmetric_compacted_matrix()
51{
52    let mut warnings_1 = Vec::new();
53    let sm_1 = SquareMatrix::create(4, &[
54        5.0, -4.0, 1.0, 0.0,
55        -4.000001, 6.0, -4.0, 1.0,
56        1.0, -4.0, 6.0, -4.0,
57        0.0, 1.0, -4.0, 5.0,
58    ]);
59    let mut warnings_2 = Vec::new();
60    let sm_2 = SquareMatrix::create(5, &[
61        2.0, -2.0, 0.0, 0.0, -1.0,
62        -2.0, 3.0, -2.0, 0.0, 0.0,
63        0.0, -2.0, 5.0, -3.0, 0.0,
64        0.0, 0.0, -3.0, 10.0, 4.0,
65        -1.0, 0.0, 0.0, 4.0, 10.0,
66    ]);
67    let mut warnings_3 = Vec::new();
68    let sm_3 = SquareMatrix::create(4, &[
69        5.0, -4.0, 1.0, 0.0,
70        -4.25, 6.0, -4.0, 1.0,
71        1.0, -4.0, 6.0, -4.0,
72        0.0, 1.0, -4.0, 0.0,
73    ]);
74
75    let expected_warnings_1: Vec<Vec<(Position, f64)>> = Vec::new();
76    let expected_a_1 = vec![5.0, 6.0, -4.0, 6.0, -4.0, 1.0, 5.0, -4.0, 1.0];
77    let expected_maxa_1 = vec![0i64, 1, 3, 6, 9];
78    let expected_warnings_2: Vec<Vec<(Position, f64)>> = Vec::new();
79    let expected_a_2 = vec![2.0, 3.0, -2.0, 5.0, -2.0, 10.0, -3.0, 10.0, 4.0, 0.0, 0.0, -1.0];
80    let expected_maxa_2 = vec![0, 1, 3, 5, 7, 12];
81    let expected_warnings_3: Vec<Vec<(Position, f64)>> = vec![
82        vec![(Position(0, 1), -4.0), (Position(1, 0), -4.25)],
83        vec![(Position(3, 3), 0.0)],
84    ];
85    let expected_a_3 = vec![5.0, 6.0, -4.0, 6.0, -4.0, 1.0, 0.0, -4.0, 1.0];
86    let expected_maxa_3 = vec![0i64, 1, 3, 6, 9];
87    
88    assert_eq!(sm_1.forced_into_symmetric_compacted_matrix(1e-6, &mut warnings_1), 
89        (expected_a_1, expected_maxa_1));
90    assert_eq!(warnings_1, expected_warnings_1);
91    assert_eq!(sm_2.forced_into_symmetric_compacted_matrix(1e-6, &mut warnings_2), 
92        (expected_a_2, expected_maxa_2));
93    assert_eq!(warnings_2, expected_warnings_2);
94    assert_eq!(sm_3.forced_into_symmetric_compacted_matrix(1e-6, &mut warnings_3), 
95        (expected_a_3, expected_maxa_3));
96    assert_eq!(warnings_3, expected_warnings_3);
97}