#[cfg(test)]
mod tests {
use ferrix::{Matrix, RowVector, Vector};
#[test]
fn test_vector_sub() {
let v = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let result = v - 0.5;
assert!((result[0] - 0.5).abs() < f64::EPSILON);
assert!((result[1] - 1.5).abs() < f64::EPSILON);
assert!((result[2] - 2.5).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2;
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2.view::<3>(0).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2.t();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2.view_mut::<3>(0).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2.t_mut();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 3, 1>::from([[0.1], [0.2], [0.3]]);
let result = v - m;
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 4, 2>::from([[0.1, 0.5], [0.2, 0.6], [0.3, 0.7], [0.4, 0.8]]);
let result = v - m.view::<3, 1>((0, 0)).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut m = Matrix::<f64, 4, 2>::from([[0.1, 0.5], [0.2, 0.6], [0.3, 0.7], [0.4, 0.8]]);
let result = v - m.view_mut::<3, 1>((0, 0)).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 1, 3>::from([[0.1, 0.2, 0.3]]);
let result = v - m.t();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut m = Matrix::<f64, 1, 3>::from([[0.1, 0.2, 0.3]]);
let result = v - m.t_mut();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
}
#[test]
fn test_vector_view_sub() {
let v1 = Vector::<i32, 5>::from([1, 2, 3, 4, 5]);
let view1 = v1.view::<3>(1).unwrap();
let result = view1 - 1;
assert_eq!(result, Vector::<i32, 3>::from([1, 2, 3]));
let v1 = Vector::<i32, 5>::from([1, 2, 3, 4, 5]);
let v2 = Vector::<i32, 5>::from([5, 4, 3, 2, 1]);
let view1 = v1.view::<3>(1).unwrap();
let view2 = v2.view::<3>(1).unwrap();
let result = view1 - view2;
assert_eq!(result, Vector::<i32, 3>::from([-2, 0, 2]));
let v1 = Vector::<i32, 5>::from([1, 2, 3, 4, 5]);
let v2 = Vector::<i32, 5>::from([5, 4, 3, 2, 1]);
let view1 = v1.view::<3>(1).unwrap();
let view2 = v2.view::<3>(1).unwrap();
let result = view1 - view2;
assert_eq!(result, Vector::<i32, 3>::from([-2, 0, 2]));
let v1 = Vector::<i32, 5>::from([1, 2, 3, 4, 5]);
let v2 = RowVector::<i32, 3>::from([5, 4, 3]);
let view1 = v1.view::<3>(1).unwrap();
let result = view1 - v2.t();
assert_eq!(result, Vector::<i32, 3>::from([-3, -1, 1]));
let v1 = Vector::<i32, 5>::from([1, 2, 3, 4, 5]);
let mut v2 = Vector::<i32, 5>::from([5, 4, 3, 2, 1]);
let view1 = v1.view::<3>(1).unwrap();
let view2 = v2.view_mut::<3>(1).unwrap();
let result = view1 - view2;
assert_eq!(result, Vector::<i32, 3>::from([-2, 0, 2]));
let v1 = Vector::<i32, 5>::from([1, 2, 3, 4, 5]);
let mut v2 = RowVector::<i32, 3>::from([5, 4, 3]);
let view1 = v1.view::<3>(1).unwrap();
let result = view1 - v2.t_mut();
assert_eq!(result, Vector::<i32, 3>::from([-3, -1, 1]));
let v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view = v.view::<3>(1).unwrap();
let m = Matrix::<f64, 3, 1>::from([[0.2], [0.3], [0.4]]);
let result = view - m;
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
let v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view = v.view::<3>(1).unwrap();
let m = Matrix::<f64, 4, 2>::from([[0.1, 0.5], [0.2, 0.6], [0.3, 0.7], [0.4, 0.8]]);
let result = view - m.view::<3, 1>((1, 0)).unwrap();
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
let v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view = v.view::<3>(1).unwrap();
let mut m = Matrix::<f64, 4, 2>::from([[0.1, 0.5], [0.2, 0.6], [0.3, 0.7], [0.4, 0.8]]);
let result = view - m.view_mut::<3, 1>((1, 0)).unwrap();
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
let v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view = v.view::<3>(1).unwrap();
let m = Matrix::<f64, 1, 3>::from([[0.2, 0.3, 0.4]]);
let result = view - m.t();
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
let v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view = v.view::<3>(1).unwrap();
let mut m = Matrix::<f64, 1, 3>::from([[0.2, 0.3, 0.4]]);
let result = view - m.t_mut();
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
}
#[test]
fn test_vector_view_mut_sub() {
let mut v = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let result = v.view_mut::<3>(0).unwrap() - 0.5;
assert!((result[0] - 0.5).abs() < f64::EPSILON);
assert!((result[1] - 1.5).abs() < f64::EPSILON);
assert!((result[2] - 2.5).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2;
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2.view::<3>(0).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2.t();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2.view_mut::<3>(0).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2.t_mut();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view_mut = v.view_mut::<3>(1).unwrap();
let m = Matrix::<f64, 3, 1>::from([[0.2], [0.3], [0.4]]);
let result = view_mut - m;
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
let mut v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view_mut = v.view_mut::<3>(1).unwrap();
let m = Matrix::<f64, 4, 2>::from([[0.1, 0.5], [0.2, 0.6], [0.3, 0.7], [0.4, 0.8]]);
let result = view_mut - m.view::<3, 1>((1, 0)).unwrap();
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
let mut v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view_mut = v.view_mut::<3>(1).unwrap();
let mut m = Matrix::<f64, 4, 2>::from([[0.1, 0.5], [0.2, 0.6], [0.3, 0.7], [0.4, 0.8]]);
let result = view_mut - m.view_mut::<3, 1>((1, 0)).unwrap();
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
let mut v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view_mut = v.view_mut::<3>(1).unwrap();
let m = Matrix::<f64, 1, 3>::from([[0.2, 0.3, 0.4]]);
let result = view_mut - m.t();
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
let mut v = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let view_mut = v.view_mut::<3>(1).unwrap();
let mut m = Matrix::<f64, 1, 3>::from([[0.2, 0.3, 0.4]]);
let result = view_mut - m.t_mut();
assert!((result[0] - 1.8).abs() < f64::EPSILON);
assert!((result[1] - 2.7).abs() < f64::EPSILON);
assert!((result[2] - 3.6).abs() < f64::EPSILON);
}
#[test]
fn test_row_vector_sub() {
let v = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let result = v - 0.5;
assert!((result[0] - 0.5).abs() < f64::EPSILON);
assert!((result[1] - 1.5).abs() < f64::EPSILON);
assert!((result[2] - 2.5).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2;
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2.view::<3>(0).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2.t();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2.view_mut::<3>(0).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1 - v2.t_mut();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 1, 3>::from([[0.1, 0.2, 0.3]]);
let result = rv - m;
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 2, 4>::from([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8]]);
let result = rv - m.view::<1, 3>((0, 0)).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut m = Matrix::<f64, 2, 4>::from([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8]]);
let result = rv - m.view_mut::<1, 3>((0, 0)).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 3, 1>::from([[0.1], [0.2], [0.3]]);
let result = rv - m.t();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut m = Matrix::<f64, 3, 1>::from([[0.1], [0.2], [0.3]]);
let result = rv - m.t_mut();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
}
#[test]
fn test_row_vector_view_sub() {
let v1 = RowVector::<i32, 3>::from([1, 2, 3]);
let view1 = v1.view::<3>(0).unwrap();
let result = view1 - 1;
assert_eq!(result, RowVector::<i32, 3>::from([0, 1, 2]));
let v1 = RowVector::<i32, 3>::from([1, 2, 3]);
let v2 = RowVector::<i32, 3>::from([4, 5, 6]);
let view1 = v1.view::<3>(0).unwrap();
let view2 = v2.view::<3>(0).unwrap();
let result = view1 - view2;
assert_eq!(result, RowVector::<i32, 3>::from([-3, -3, -3]));
let v1 = RowVector::<i32, 3>::from([1, 2, 3]);
let v2 = RowVector::<i32, 3>::from([4, 5, 6]);
let view1 = v1.view::<3>(0).unwrap();
let view2 = v2.view::<3>(0).unwrap();
let result = view1 - view2;
assert_eq!(result, RowVector::<i32, 3>::from([-3, -3, -3]));
let v1 = RowVector::<i32, 3>::from([1, 2, 3]);
let v2 = Vector::<i32, 3>::from([4, 5, 6]);
let view1 = v1.view::<3>(0).unwrap();
let result = view1 - v2.t();
assert_eq!(result, RowVector::<i32, 3>::from([-3, -3, -3]));
let v1 = RowVector::<i32, 3>::from([1, 2, 3]);
let mut v2 = RowVector::<i32, 3>::from([4, 5, 6]);
let view1 = v1.view::<3>(0).unwrap();
let view2 = v2.view_mut::<3>(0).unwrap();
let result = view1 - view2;
assert_eq!(result, RowVector::<i32, 3>::from([-3, -3, -3]));
let v1 = RowVector::<i32, 3>::from([1, 2, 3]);
let mut v2 = Vector::<i32, 3>::from([4, 5, 6]);
let view1 = v1.view::<3>(0).unwrap();
let result = view1 - v2.t_mut();
assert_eq!(result, RowVector::<i32, 3>::from([-3, -3, -3]));
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view = rv.view::<3>(0).unwrap();
let m = Matrix::<f64, 1, 3>::from([[0.1, 0.2, 0.3]]);
let result = view - m;
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view = rv.view::<3>(0).unwrap();
let m = Matrix::<f64, 2, 4>::from([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8]]);
let result = view - m.view::<1, 3>((0, 0)).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view = rv.view::<3>(0).unwrap();
let mut m = Matrix::<f64, 2, 4>::from([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8]]);
let result = view - m.view_mut::<1, 3>((0, 0)).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view = rv.view::<3>(0).unwrap();
let m = Matrix::<f64, 3, 1>::from([[0.1], [0.2], [0.3]]);
let result = view - m.t();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view = rv.view::<3>(0).unwrap();
let mut m = Matrix::<f64, 3, 1>::from([[0.1], [0.2], [0.3]]);
let result = view - m.t_mut();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
}
#[test]
fn test_row_vector_view_mut_sub() {
let mut v = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let result = v.view_mut::<3>(0).unwrap() - 0.5;
assert!((result[0] - 0.5).abs() < f64::EPSILON);
assert!((result[1] - 1.5).abs() < f64::EPSILON);
assert!((result[2] - 2.5).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2;
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2.view::<3>(0).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2.t();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = RowVector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2.view_mut::<3>(0).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = Vector::<f64, 3>::from([0.1, 0.2, 0.3]);
let result = v1.view_mut::<3>(0).unwrap() - v2.t_mut();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view_mut = rv.view_mut::<3>(0).unwrap();
let m = Matrix::<f64, 1, 3>::from([[0.1, 0.2, 0.3]]);
let result = view_mut - m;
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view_mut = rv.view_mut::<3>(0).unwrap();
let m = Matrix::<f64, 2, 4>::from([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8]]);
let result = view_mut - m.view::<1, 3>((0, 0)).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view_mut = rv.view_mut::<3>(0).unwrap();
let mut m = Matrix::<f64, 2, 4>::from([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8]]);
let result = view_mut - m.view_mut::<1, 3>((0, 0)).unwrap();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view_mut = rv.view_mut::<3>(0).unwrap();
let m = Matrix::<f64, 3, 1>::from([[0.1], [0.2], [0.3]]);
let result = view_mut - m.t();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
let mut rv = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let view_mut = rv.view_mut::<3>(0).unwrap();
let mut m = Matrix::<f64, 3, 1>::from([[0.1], [0.2], [0.3]]);
let result = view_mut - m.t_mut();
assert!((result[0] - 0.9).abs() < f64::EPSILON);
assert!((result[1] - 1.8).abs() < f64::EPSILON);
assert!((result[2] - 2.7).abs() < f64::EPSILON);
}
#[test]
fn test_matrix_sub() {
let m1 = Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]);
let result = m1 - 5;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -3], [-2, -1]]));
let m1 = Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
let result = m1 - m2;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let m1 = Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]);
let m2 = Matrix::<i32, 3, 3>::from([[5, 6, 7], [8, 9, 10], [11, 12, 13]]);
let result = m1 - m2.view::<2, 2>((0, 0)).unwrap();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-5, -5]]));
let m1 = Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]);
let mut m2 = Matrix::<i32, 3, 3>::from([[5, 6, 7], [8, 9, 10], [11, 12, 13]]);
let result = m1 - m2.view_mut::<2, 2>((0, 0)).unwrap();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-5, -5]]));
let m1 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [4, 5, 6]]);
let m2 = Matrix::<i32, 3, 2>::from([[5, 6], [7, 8], [9, 10]]);
let result = m1 - m2.t();
assert_eq!(result, Matrix::from([[-4, -5, -6], [-2, -3, -4]]));
let m1 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [4, 5, 6]]);
let mut m2 = Matrix::<i32, 3, 2>::from([[5, 6], [7, 8], [9, 10]]);
let result = m1 - m2.t_mut();
assert_eq!(result, Matrix::from([[-4, -5, -6], [-2, -3, -4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1 - v1;
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1 - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let mut v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1 - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1 - v1;
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1 - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let mut v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1 - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
}
#[test]
fn test_matrix_view_sub() {
let m1 = Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]);
let view = m1.view::<2, 2>((0, 0)).unwrap();
let result = view - 5;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -3], [-2, -1]]));
let m1 = Matrix::<i32, 3, 4>::from([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
let view = m1.view::<2, 2>((0, 1)).unwrap();
let result = view - m2;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-3, -3], [-1, -1]]));
let m1 = Matrix::<i32, 4, 4>::from([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16],
]);
let m2 = Matrix::<i32, 3, 3>::from([[5, 6, 7], [8, 9, 10], [11, 12, 13]]);
let view1 = m1.view::<2, 2>((1, 1)).unwrap();
let view2 = m2.view::<2, 2>((0, 1)).unwrap();
let result = view1 - view2;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[0, 0], [1, 1]]));
let m1 = Matrix::<i32, 3, 4>::from([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]);
let mut m2 = Matrix::<i32, 4, 3>::from([[5, 6, 7], [8, 9, 10], [11, 12, 13], [14, 15, 16]]);
let view = m1.view::<2, 2>((0, 1)).unwrap();
let view_mut = m2.view_mut::<2, 2>((1, 1)).unwrap();
let result = view - view_mut;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-7, -7], [-6, -6]]));
let m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let view = m1.view::<2, 2>((0, 0)).unwrap();
let result = view - m2.t();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let mut m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let view = m1.view::<2, 2>((0, 0)).unwrap();
let result = view - m2.t_mut();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let view = m1.view::<2, 1>((0, 0)).unwrap();
let result = view - v1;
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let view = m1.view::<2, 1>((0, 0)).unwrap();
let result = view - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let mut v1 = Vector::<i32, 2>::from([5, 6]);
let view = m1.view::<2, 1>((0, 0)).unwrap();
let result = view - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let view = m1.view::<1, 2>((0, 0)).unwrap();
let result = view - v1;
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let view = m1.view::<1, 2>((0, 0)).unwrap();
let result = view - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let mut v1 = RowVector::<i32, 2>::from([5, 6]);
let view = m1.view::<1, 2>((0, 0)).unwrap();
let result = view - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
}
#[test]
fn test_matrix_view_mut_sub() {
let mut m1 = Matrix::<i32, 2, 2>::from([[1, 2], [3, 4]]);
let view_mut = m1.view_mut::<2, 2>((0, 0)).unwrap();
let result = view_mut - 5;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -3], [-2, -1]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
let view_mut = m1.view_mut::<2, 2>((0, 0)).unwrap();
let result = view_mut - m2;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
let view_mut = m1.view_mut::<2, 2>((0, 0)).unwrap();
let view = m2.view::<2, 2>((0, 0)).unwrap();
let result = view_mut - view;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let mut m2 = Matrix::<i32, 2, 2>::from([[5, 6], [7, 8]]);
let view_mut1 = m1.view_mut::<2, 2>((0, 0)).unwrap();
let view_mut2 = m2.view_mut::<2, 2>((0, 0)).unwrap();
let result = view_mut1 - view_mut2;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let view_mut = m1.view_mut::<2, 2>((0, 0)).unwrap();
let result = view_mut - m2.t();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let mut m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let view_mut = m1.view_mut::<2, 2>((0, 0)).unwrap();
let result = view_mut - m2.t_mut();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let mut m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let view_mut = m1.view_mut::<2, 1>((0, 0)).unwrap();
let result = view_mut - v1;
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let mut m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let view_mut = m1.view_mut::<2, 1>((0, 0)).unwrap();
let result = view_mut - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let mut m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let mut v1 = Vector::<i32, 2>::from([5, 6]);
let view_mut = m1.view_mut::<2, 1>((0, 0)).unwrap();
let result = view_mut - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let mut m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let view_mut = m1.view_mut::<1, 2>((0, 0)).unwrap();
let result = view_mut - v1;
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let mut m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let view_mut = m1.view_mut::<1, 2>((0, 0)).unwrap();
let result = view_mut - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let mut m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let mut v1 = RowVector::<i32, 2>::from([5, 6]);
let view_mut = m1.view_mut::<1, 2>((0, 0)).unwrap();
let result = view_mut - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
}
#[test]
fn test_matrix_transpose_view_sub() {
let m1 = Matrix::<i32, 2, 2>::from([[1, 3], [2, 4]]);
let result = m1.t() - 5;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -3], [-2, -1]]));
let m1 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [4, 5, 6]]);
let m2 = Matrix::<i32, 3, 2>::from([[5, 6], [7, 8], [9, 10]]);
let result = m1.t() - m2;
assert_eq!(result, Matrix::from([[-4, -2], [-5, -3], [-6, -4]]));
let m1 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [4, 5, 6]]);
let m2 = Matrix::<i32, 3, 2>::from([[5, 6], [7, 8], [9, 10]]);
let result = m1.t() - m2.view::<3, 2>((0, 0)).unwrap();
assert_eq!(result, Matrix::from([[-4, -2], [-5, -3], [-6, -4]]));
let m1 = Matrix::<i32, 2, 3>::from([[1, 2, 3], [4, 5, 6]]);
let mut m2 = Matrix::<i32, 3, 2>::from([[5, 6], [7, 8], [9, 10]]);
let result = m1.t() - m2.view_mut::<3, 2>((0, 0)).unwrap();
assert_eq!(result, Matrix::from([[-4, -2], [-5, -3], [-6, -4]]));
let m1 = Matrix::<i32, 2, 2>::from([[1, 3], [2, 4]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let result = m1.t() - m2.t();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let m1 = Matrix::<i32, 2, 2>::from([[1, 3], [2, 4]]);
let mut m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let result = m1.t() - m2.t_mut();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1.t() - v1;
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1.t() - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let mut v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1.t() - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1.t() - v1;
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1.t() - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let mut v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1.t() - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
}
#[test]
fn test_matrix_transpose_view_mut_sub() {
let mut m1 = Matrix::<i32, 2, 2>::from([[1, 3], [2, 4]]);
let result = m1.t_mut() - 5;
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -3], [-2, -1]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let m2 = Matrix::<i32, 2, 3>::from([[5, 6, 7], [8, 9, 10]]);
let result = m1.t_mut() - m2;
assert_eq!(result, Matrix::from([[-4, -3, -2], [-6, -5, -4]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let m2 = Matrix::<i32, 2, 3>::from([[5, 6, 7], [8, 9, 10]]);
let result = m1.t_mut() - m2.view::<2, 3>((0, 0)).unwrap();
assert_eq!(result, Matrix::from([[-4, -3, -2], [-6, -5, -4]]));
let mut m1 = Matrix::<i32, 3, 2>::from([[1, 2], [3, 4], [5, 6]]);
let mut m2 = Matrix::<i32, 2, 3>::from([[5, 6, 7], [8, 9, 10]]);
let result = m1.t_mut() - m2.view_mut::<2, 3>((0, 0)).unwrap();
assert_eq!(result, Matrix::from([[-4, -3, -2], [-6, -5, -4]]));
let mut m1 = Matrix::<i32, 2, 2>::from([[1, 3], [2, 4]]);
let m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let result = m1.t_mut() - m2.t();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let mut m1 = Matrix::<i32, 2, 2>::from([[1, 3], [2, 4]]);
let mut m2 = Matrix::<i32, 2, 2>::from([[5, 7], [6, 8]]);
let result = m1.t_mut() - m2.t_mut();
assert_eq!(result, Matrix::<i32, 2, 2>::from([[-4, -4], [-4, -4]]));
let mut m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1.t_mut() - v1;
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let mut m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1.t_mut() - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let mut m1 = Matrix::<i32, 1, 2>::from([[1, 2]]);
let mut v1 = Vector::<i32, 2>::from([5, 6]);
let result = m1.t_mut() - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 2, 1>::from([[-4], [-4]]));
let mut m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1.t_mut() - v1;
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let mut m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1.t_mut() - v1.view::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
let mut m1 = Matrix::<i32, 2, 1>::from([[1], [2]]);
let mut v1 = RowVector::<i32, 2>::from([5, 6]);
let result = m1.t_mut() - v1.view_mut::<2>(0).unwrap();
assert_eq!(result, Matrix::<i32, 1, 2>::from([[-4, -4]]));
}
}