mathhook_core/algebra/
matrix_correctness_tests.rs1#[cfg(test)]
7mod mathematical_correctness_tests {
8 use crate::core::expression::Expression;
9 use crate::matrices::operations::MatrixOperations;
10
11 #[test]
13 fn test_matrix_addition_properties() {
14 let a = Expression::matrix(vec![
15 vec![Expression::integer(1), Expression::integer(2)],
16 vec![Expression::integer(3), Expression::integer(4)],
17 ]);
18 let b = Expression::matrix(vec![
19 vec![Expression::integer(5), Expression::integer(6)],
20 vec![Expression::integer(7), Expression::integer(8)],
21 ]);
22 let c = Expression::matrix(vec![
23 vec![Expression::integer(9), Expression::integer(10)],
24 vec![Expression::integer(11), Expression::integer(12)],
25 ]);
26
27 let ab = a.matrix_add(&b);
29 let ba = b.matrix_add(&a);
30 assert_eq!(ab, ba);
31
32 let ab_c = ab.matrix_add(&c);
34 let bc = b.matrix_add(&c);
35 let a_bc = a.matrix_add(&bc);
36 assert_eq!(ab_c, a_bc);
37
38 let zero = Expression::zero_matrix(2, 2);
40 let a_plus_zero = a.matrix_add(&zero);
41 assert_eq!(a, a_plus_zero);
42 }
43
44 #[test]
45 fn test_matrix_multiplication_properties() {
46 let a = Expression::matrix(vec![
47 vec![Expression::integer(1), Expression::integer(2)],
48 vec![Expression::integer(3), Expression::integer(4)],
49 ]);
50 let b = Expression::matrix(vec![
51 vec![Expression::integer(5), Expression::integer(6)],
52 vec![Expression::integer(7), Expression::integer(8)],
53 ]);
54 let c = Expression::matrix(vec![
55 vec![Expression::integer(1), Expression::integer(0)],
56 vec![Expression::integer(0), Expression::integer(1)],
57 ]);
58
59 let identity = Expression::identity_matrix(2);
61 let ai = a.matrix_multiply(&identity);
62 let ia = identity.matrix_multiply(&a);
63 assert_eq!(a, ai);
64 assert_eq!(a, ia);
65
66 let zero = Expression::zero_matrix(2, 2);
68 let a_zero = a.matrix_multiply(&zero);
69 let zero_a = zero.matrix_multiply(&a);
70 assert!(a_zero.is_zero_matrix());
71 assert!(zero_a.is_zero_matrix());
72
73 let ab = a.matrix_multiply(&b);
75 let ab_c = ab.matrix_multiply(&c);
76 let bc = b.matrix_multiply(&c);
77 let a_bc = a.matrix_multiply(&bc);
78 assert_eq!(ab_c, a_bc);
79 }
80}