use crate::matrix::Matrix;
use crate::vector::Vector;
#[test]
fn inverse_matrix() {
fn round(a: f64) -> f64 {
(a*100000.0).round()/100000.0
}
let m = Matrix::diagonal(Vector::from(vec![1.0,2.0,3.0]));
let inv = m.inv();
let inv_target = [
[1.0, 0.0, 0.0],
[0.0, 0.5, 0.0],
[0.0, 0.0, 1.0/3.0],
];
for i in 0..3 {
for j in 0..3 {
assert_eq!(round(inv[i][j]), round(inv_target[i][j]));
}
}
let m = Matrix::from(vec![
vec![4.0, 3.0, 7.0],
vec![3.0, 1.0, 4.0],
vec![1.0, -2.0, 3.0],
]);
let inv = m.inv().inv();
for i in 0..3 {
for j in 0..3 {
assert_eq!(round(m[i][j]), round(inv[i][j]));
}
}
let inv = m.inv();
let inv_target = [
[-0.55, 1.15, -0.25],
[ 0.25, -0.25, -0.25],
[ 0.35, -0.55, 0.25],
];
for i in 0..3 {
for j in 0..3 {
assert_eq!(round(inv[i][j]), round(inv_target[i][j]));
}
}
}