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}