summaryrefslogtreecommitdiff
path: root/src/tests/matrix_test_ops.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/matrix_test_ops.rs')
-rw-r--r--src/tests/matrix_test_ops.rs56
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);