#[cfg(test)]
mod tests {
use ferrix::{Matrix, RowVector, Vector};
#[test]
fn test_vector_sub_assign() {
let mut v = Vector::<i32, 3>::from([5, 6, 7]);
v -= 2;
assert_eq!(v, Vector::<i32, 3>::from([3, 4, 5]));
let mut v1 = Vector::<i32, 3>::from([1, 2, 3]);
let v2 = Vector::<i32, 3>::from([0, 1, 2]);
v1 -= v2;
assert_eq!(v1, Vector::<i32, 3>::from([1, 1, 1]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let v2 = Vector::<i32, 3>::from([1, 2, 3]);
v1 -= v2;
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let v2 = Vector::<i32, 3>::from([1, 2, 3]);
v1 -= v2.view::<3>(0).unwrap();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let v2 = RowVector::<i32, 3>::from([1, 2, 3]);
v1 -= v2.t();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let mut v2 = Vector::<i32, 3>::from([1, 2, 3]);
v1 -= v2.view_mut::<3>(0).unwrap();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let mut v2 = RowVector::<i32, 3>::from([1, 2, 3]);
v1 -= v2.t_mut();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let v2 = Matrix::<i32, 3, 1>::from([[1], [2], [3]]);
v1 -= v2;
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let m2 = Matrix::<i32, 3, 2>::from([[1, 0], [2, 0], [3, 0]]);
v1 -= m2.view::<3, 1>((0, 0)).unwrap();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let mut m2 = Matrix::<i32, 3, 2>::from([[1, 0], [2, 0], [3, 0]]);
v1 -= m2.view_mut::<3, 1>((0, 0)).unwrap();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let m2 = Matrix::<i32, 1, 3>::from([[1, 2, 3]]);
v1 -= m2.t();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let mut m2 = Matrix::<i32, 1, 3>::from([[1, 2, 3]]);
v1 -= m2.t_mut();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
}
#[test]
fn test_vector_view_mut_sub_assign() {
let mut v = Vector::<i32, 3>::from([1, 2, 3]);
let mut view = v.view_mut::<3>(0).unwrap();
view -= 2;
assert_eq!(v, Vector::<i32, 3>::from([-1, 0, 1]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let v2 = Vector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2;
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let v2 = Vector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2.view::<3>(0).unwrap();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let v2 = RowVector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2.t();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let mut v2 = Vector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2.view_mut::<3>(0).unwrap();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let mut v2 = RowVector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2.t_mut();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let v2 = Matrix::<i32, 3, 1>::from([[1], [2], [3]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2;
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let m2 = Matrix::<i32, 3, 2>::from([[1, 0], [2, 0], [3, 0]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= m2.view::<3, 1>((0, 0)).unwrap();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let mut m2 = Matrix::<i32, 3, 2>::from([[1, 0], [2, 0], [3, 0]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= m2.view_mut::<3, 1>((0, 0)).unwrap();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let m2 = Matrix::<i32, 1, 3>::from([[1, 2, 3]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= m2.t();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
let mut v1 = Vector::<i32, 3>::from([4, 5, 6]);
let mut m2 = Matrix::<i32, 1, 3>::from([[1, 2, 3]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= m2.t_mut();
assert_eq!(v1, Vector::<i32, 3>::from([3, 3, 3]));
}
#[test]
fn test_row_vector_sub_assign() {
let mut v = RowVector::<i32, 3>::from([1, 2, 3]);
v -= 2;
assert_eq!(v, RowVector::<i32, 3>::from([-1, 0, 1]));
let mut v1 = RowVector::<i32, 3>::from([1, 2, 3]);
let v2 = RowVector::<i32, 3>::from([0, 1, 2]);
v1 -= v2;
assert_eq!(v1, RowVector::<i32, 3>::from([1, 1, 1]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let v2 = RowVector::<i32, 3>::from([1, 2, 3]);
v1 -= v2;
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let v2 = RowVector::<i32, 3>::from([1, 2, 3]);
v1 -= v2.view::<3>(0).unwrap();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let v2 = Vector::<i32, 3>::from([1, 2, 3]);
v1 -= v2.t();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let mut v2 = RowVector::<i32, 3>::from([1, 2, 3]);
v1 -= v2.view_mut::<3>(0).unwrap();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let mut v2 = Vector::<i32, 3>::from([1, 2, 3]);
v1 -= v2.t_mut();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let v2 = Matrix::<i32, 1, 3>::from([[1, 2, 3]]);
v1 -= v2;
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let m2 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [0, 0, 0]]);
v1 -= m2.view::<1, 3>((0, 0)).unwrap();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let mut m2 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [0, 0, 0]]);
v1 -= m2.view_mut::<1, 3>((0, 0)).unwrap();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let m2 = Matrix::<i32, 3, 1>::from([[1], [2], [3]]);
v1 -= m2.t();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let mut m2 = Matrix::<i32, 3, 1>::from([[1], [2], [3]]);
v1 -= m2.t_mut();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
}
#[test]
fn test_row_vector_view_mut_sub_assign() {
let mut v = RowVector::<i32, 3>::from([1, 2, 3]);
let mut view = v.view_mut::<3>(0).unwrap();
view -= 2;
assert_eq!(v, RowVector::<i32, 3>::from([-1, 0, 1]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let v2 = RowVector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2;
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let v2 = RowVector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2.view::<3>(0).unwrap();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let v2 = Vector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2.t();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let mut v2 = RowVector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2.view_mut::<3>(0).unwrap();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let mut v2 = Vector::<i32, 3>::from([1, 2, 3]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2.t_mut();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let v2 = Matrix::<i32, 1, 3>::from([[1, 2, 3]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= v2;
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let m2 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [0, 0, 0]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= m2.view::<1, 3>((0, 0)).unwrap();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let mut m2 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [0, 0, 0]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= m2.view_mut::<1, 3>((0, 0)).unwrap();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let m2 = Matrix::<i32, 3, 1>::from([[1], [2], [3]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= m2.t();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
let mut v1 = RowVector::<i32, 3>::from([4, 5, 6]);
let mut m2 = Matrix::<i32, 3, 1>::from([[1], [2], [3]]);
let mut view = v1.view_mut::<3>(0).unwrap();
view -= m2.t_mut();
assert_eq!(v1, RowVector::<i32, 3>::from([3, 3, 3]));
}
#[test]
fn test_matrix_sub_assign() {
let mut m = Matrix::<i32, 2, 2>::from([[6, 7], [8, 9]]);
m -= 5;
assert_eq!(m, Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]));
let mut m1 = Matrix::<i32, 2, 2>::from([[6, 8], [10, 12]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
m1 -= m2;
assert_eq!(m1, Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]));
let mut m1 = Matrix::<i32, 2, 2>::from([[6, 8], [10, 12]]);
let m2 = Matrix::<i32, 3, 3>::from([[5, 6, 0], [7, 8, 0], [0, 0, 0]]);
m1 -= m2.view::<2, 2>((0, 0)).unwrap();
assert_eq!(m1, Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]));
let mut m1 = Matrix::<i32, 2, 2>::from([[6, 8], [10, 12]]);
let mut m2 = Matrix::<i32, 3, 3>::from([[5, 6, 0], [7, 8, 0], [0, 0, 0]]);
m1 -= m2.view_mut::<2, 2>((0, 0)).unwrap();
assert_eq!(m1, Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[6, 8], [10, 12], [14, 16]]);
let m2 = Matrix::<i32, 2, 3>::from([[5, 7, 9], [6, 8, 10]]);
m1 -= m2.t();
assert_eq!(m1, Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[6, 8], [10, 12], [14, 16]]);
let mut m2 = Matrix::<i32, 2, 3>::from([[5, 7, 9], [6, 8, 10]]);
m1 -= m2.t_mut();
assert_eq!(m1, Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]));
let mut m = Matrix::<i32, 3, 1>::from([[5], [7], [9]]);
let v = Vector::<i32, 3>::from([4, 5, 6]);
m -= v;
assert_eq!(m, Matrix::<i32, 3, 1>::from([[1], [2], [3]]));
let mut m = Matrix::<i32, 3, 1>::from([[5], [7], [9]]);
let v = Vector::<i32, 3>::from([4, 5, 6]);
m -= v.view::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 3, 1>::from([[1], [2], [3]]));
let mut m = Matrix::<i32, 3, 1>::from([[5], [7], [9]]);
let mut v = Vector::<i32, 3>::from([4, 5, 6]);
m -= v.view_mut::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 3, 1>::from([[1], [2], [3]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let v = RowVector::<i32, 3>::from([4, 5, 6]);
m -= v;
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let v = RowVector::<i32, 3>::from([4, 5, 6]);
m -= v.view::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let mut v = RowVector::<i32, 3>::from([4, 5, 6]);
m -= v.view_mut::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
}
#[test]
fn test_matrix_view_mut_sub_assign() {
let mut m = Matrix::<i32, 2, 2>::from([[6, 7], [8, 9]]);
let mut view = m.view_mut::<2, 2>((0, 0)).unwrap();
view -= 5;
assert_eq!(m, Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]));
let mut m1 = Matrix::<i32, 3, 3>::from([[6, 8, 0], [10, 12, 0], [0, 0, 0]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
let mut view = m1.view_mut::<2, 2>((0, 0)).unwrap();
view -= m2;
assert_eq!(m1, Matrix::from([[1, 2, 0], [3, 4, 0], [0, 0, 0]]));
let mut m1 = Matrix::<i32, 3, 3>::from([[6, 8, 0], [10, 12, 0], [0, 0, 0]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
let mut view = m1.view_mut::<2, 2>((0, 0)).unwrap();
view -= m2.view::<2, 2>((0, 0)).unwrap();
assert_eq!(m1, Matrix::from([[1, 2, 0], [3, 4, 0], [0, 0, 0]]));
let mut m1 = Matrix::<i32, 3, 3>::from([[6, 8, 0], [10, 12, 0], [0, 0, 0]]);
let mut m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
let mut view = m1.view_mut::<2, 2>((0, 0)).unwrap();
view -= m2.view_mut::<2, 2>((0, 0)).unwrap();
assert_eq!(m1, Matrix::from([[1, 2, 0], [3, 4, 0], [0, 0, 0]]));
let mut m1 = Matrix::<i32, 3, 3>::from([[6, 8, 0], [10, 12, 0], [0, 0, 0]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let mut view = m1.view_mut::<2, 2>((0, 0)).unwrap();
view -= m2.t();
assert_eq!(m1, Matrix::from([[1, 2, 0], [3, 4, 0], [0, 0, 0]]));
let mut m1 = Matrix::<i32, 3, 3>::from([[6, 8, 0], [10, 12, 0], [0, 0, 0]]);
let mut m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let mut view = m1.view_mut::<2, 2>((0, 0)).unwrap();
view -= m2.t_mut();
assert_eq!(m1, Matrix::from([[1, 2, 0], [3, 4, 0], [0, 0, 0]]));
let mut m = Matrix::<i32, 3, 2>::from([[5, 0], [7, 0], [9, 0]]);
let v = Vector::<i32, 3>::from([4, 5, 6]);
let mut view = m.view_mut::<3, 1>((0, 0)).unwrap();
view -= v;
assert_eq!(m, Matrix::<i32, 3, 2>::from([[1, 0], [2, 0], [3, 0]]));
let mut m = Matrix::<i32, 3, 2>::from([[5, 0], [7, 0], [9, 0]]);
let v = Vector::<i32, 3>::from([4, 5, 6]);
let mut view = m.view_mut::<3, 1>((0, 0)).unwrap();
view -= v.view::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 3, 2>::from([[1, 0], [2, 0], [3, 0]]));
let mut m = Matrix::<i32, 3, 2>::from([[5, 0], [7, 0], [9, 0]]);
let mut v = Vector::<i32, 3>::from([4, 5, 6]);
let mut view = m.view_mut::<3, 1>((0, 0)).unwrap();
view -= v.view_mut::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 3, 2>::from([[1, 0], [2, 0], [3, 0]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let v = RowVector::<i32, 3>::from([4, 5, 6]);
let mut view = m.view_mut::<1, 3>((0, 0)).unwrap();
view -= v;
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let v = RowVector::<i32, 3>::from([4, 5, 6]);
let mut view = m.view_mut::<1, 3>((0, 0)).unwrap();
view -= v.view::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let mut v = RowVector::<i32, 3>::from([4, 5, 6]);
let mut view = m.view_mut::<1, 3>((0, 0)).unwrap();
view -= v.view_mut::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
}
#[test]
fn test_matrix_transpose_view_mut_sub_assign() {
let mut m = Matrix::<i32, 2, 2>::from([[6, 8], [7, 9]]);
let mut view = m.t_mut();
view -= 5;
assert_eq!(m, Matrix::<i32, 2, 2>::from([[1, 3], [2, 4]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[6, 9], [8, 12], [10, 15]]);
let m2 = Matrix::<i32, 2, 3>::from([[5, 6, 7], [9, 8, 10]]);
let mut view = m1.t_mut();
view -= m2;
assert_eq!(m1, Matrix::<i32, 3, 2>::from([[1, 0], [2, 4], [3, 5]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[6, 9], [8, 12], [10, 15]]);
let m2 = Matrix::<i32, 2, 3>::from([[5, 6, 7], [9, 8, 10]]);
let mut view = m1.t_mut();
view -= m2.view::<2, 3>((0, 0)).unwrap();
assert_eq!(m1, Matrix::<i32, 3, 2>::from([[1, 0], [2, 4], [3, 5]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[6, 9], [8, 12], [10, 15]]);
let mut m2 = Matrix::<i32, 2, 3>::from([[5, 6, 7], [9, 8, 10]]);
let mut view = m1.t_mut();
view -= m2.view_mut::<2, 3>((0, 0)).unwrap();
assert_eq!(m1, Matrix::<i32, 3, 2>::from([[1, 0], [2, 4], [3, 5]]));
let mut m1 = Matrix::<i32, 2, 2>::from([[6, 9], [8, 12]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 7], [8, 8]]);
let mut view = m1.t_mut();
view -= m2.t();
assert_eq!(m1, Matrix::<i32, 2, 2>::from([[1, 2], [0, 4]]));
let mut m1 = Matrix::<i32, 2, 2>::from([[6, 9], [8, 12]]);
let mut m2 = Matrix::<i32, 2, 2>::from([[5, 7], [8, 8]]);
let mut view = m1.t_mut();
view -= m2.t_mut();
assert_eq!(m1, Matrix::<i32, 2, 2>::from([[1, 2], [0, 4]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let v = Vector::<i32, 3>::from([4, 5, 6]);
let mut view = m.t_mut();
view -= v;
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let v = Vector::<i32, 3>::from([4, 5, 6]);
let mut view = m.t_mut();
view -= v.view::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
let mut m = Matrix::<i32, 1, 3>::from([[5, 7, 9]]);
let mut v = Vector::<i32, 3>::from([4, 5, 6]);
let mut view = m.t_mut();
view -= v.view_mut::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 1, 3>::from([[1, 2, 3]]));
let mut m = Matrix::<i32, 3, 1>::from([[5], [7], [9]]);
let v = RowVector::<i32, 3>::from([4, 5, 6]);
let mut view = m.t_mut();
view -= v;
assert_eq!(m, Matrix::<i32, 3, 1>::from([[1], [2], [3]]));
let mut m = Matrix::<i32, 3, 1>::from([[5], [7], [9]]);
let v = RowVector::<i32, 3>::from([4, 5, 6]);
let mut view = m.t_mut();
view -= v.view::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 3, 1>::from([[1], [2], [3]]));
let mut m = Matrix::<i32, 3, 1>::from([[5], [7], [9]]);
let mut v = RowVector::<i32, 3>::from([4, 5, 6]);
let mut view = m.t_mut();
view -= v.view_mut::<3>(0).unwrap();
assert_eq!(m, Matrix::<i32, 3, 1>::from([[1], [2], [3]]));
}
}