diff options
Diffstat (limited to 'src/tests/matrix_test_ops.rs')
-rw-r--r-- | src/tests/matrix_test_ops.rs | 56 |
1 files changed, 50 insertions, 6 deletions
diff --git a/src/tests/matrix_test_ops.rs b/src/tests/matrix_test_ops.rs index e207c3e..2737ac4 100644 --- a/src/tests/matrix_test_ops.rs +++ b/src/tests/matrix_test_ops.rs @@ -2,23 +2,67 @@ use std::str::FromStr; use crate::{error::ParseMatrixError, matrix::Matrix, MatrixMath}; +enum TestCaseType { + Add, + Mul, + Inv, + CmpErr, +} + +struct TestCase { + test_type: TestCaseType, + test_data: Vec<Matrix>, +} +fn build_add_test_cases() -> Vec<TestCase> { + let mut v = vec![]; + let from_strs = vec![ + "1,2,3\n4,5,6\n7,8,9", + "1,1,1\n1,1,1\n1,1,1", + "2,3,4\n5,6,7\n8,9,10", + + + "1,1,1\n1,1,1\n1,1,1", + "0,0,0\n0,0,0\n0,0,0", + "1,1,1\n1,1,1\n1,1,1", + ]; + let mut i = 0; + while i < from_strs.len() { + let m1 = Matrix::from_str(from_strs[i]).unwrap(); + let m2 = Matrix::from_str(from_strs[i+1]).unwrap(); + let mr = Matrix::from_str(from_strs[i+2]).unwrap(); + v.push(TestCase { + test_type: TestCaseType::Add, + test_data: vec![m1, m2, mr], + }); + i += 3; + } + v +} #[test] pub fn test_matrix_add() -> Result<(), ParseMatrixError> { - let m1 = Matrix::from_str("1,2,3\n4,5,6\n7,8,9")?; - let m2 = Matrix::from_str("1,1,1\n1,1,1\n1,1,1")?; - let t = Matrix::from_str("2,3,4\n5,6,7\n8,9,10")?; - assert_eq!(&m1 + &m2, t); + let cases = build_add_test_cases(); + for case in cases { + assert_eq!(&case.test_data[0] + &case.test_data[1], case.test_data[2]); + } Ok(()) } #[test] pub fn test_matrix_determinate() -> Result<(), ParseMatrixError> { let m = Matrix::from_str("3,4\n5,6")?; - let det = 3 * 6 - 4 * 5; + let det = 3.0 * 6.0 - 4.0 * 5.0; assert_eq!(m.determinant(), det); Ok(()) } #[test] -pub fn test_matrix_transposition() -> Result<(), ParseMatrixError> { +pub fn test_matrix_inverse_on_singular() -> Result<(), ()> { + let m = Matrix::new(vec![vec![1.0,2.0,3.0], vec![4.0,5.0,6.0], vec![7.0,8.0,9.0]]); + match m.inverse() { + Some(_inverse) => Err(()), + None => Ok(()), + } +} +#[test] +pub fn test_matrix_transpose() -> Result<(), ParseMatrixError> { let m = Matrix::from_str("1,2,3\n4,5,6\n7,8,9")?; let t = Matrix::from_str("1,4,7\n2,5,8\n3,6,9")?; assert_eq!(m.transpose(), t); |