#[cfg(test)]
mod tests {
use ferrix::{DotProduct, Matrix, RowVector, Vector};
#[test]
fn test_vector_dot() {
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = Vector::<f64, 3>::from([4.0, 5.0, 6.0]);
assert!((v1.dot(v2) - 32.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view = v2.view::<3>(0).unwrap();
assert!((v1.dot(view) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view_mut = v2.view_mut::<3>(0).unwrap();
assert!((v1.dot(view_mut) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
assert!((v1.dot(m) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 4, 1>::from([[1.0], [2.0], [3.0], [4.0]]);
let view = m.view::<3, 1>((0, 0)).unwrap();
assert!((v1.dot(view) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut m = Matrix::<f64, 4, 1>::from([[1.0], [2.0], [3.0], [4.0]]);
let view_mut = m.view_mut::<3, 1>((0, 0)).unwrap();
assert!((v1.dot(view_mut) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
assert!((v1.dot(m.t()) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
assert!((v1.dot(m.t_mut()) - 14.0).abs() < f64::EPSILON);
}
#[test]
fn test_vector_view_dot() {
let v = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let v1 = v.view::<3>(0).unwrap();
let v2 = Vector::<f64, 3>::from([4.0, 5.0, 6.0]);
assert!((v1.dot(v2) - 32.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let v2 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view1 = v1.view::<3>(0).unwrap();
let view2 = v2.view::<3>(1).unwrap();
assert!((view1.dot(view2) - 20.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let mut v2 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view1 = v1.view::<3>(0).unwrap();
let view_mut = v2.view_mut::<3>(1).unwrap();
assert!((view1.dot(view_mut) - 20.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
let view = v1.view::<3>(0).unwrap();
assert!((view.dot(m) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 4, 1>::from([[1.0], [2.0], [3.0], [4.0]]);
let view = v1.view::<3>(0).unwrap();
let view2 = m.view::<3, 1>((0, 0)).unwrap();
assert!((view.dot(view2) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let mut m = Matrix::<f64, 4, 1>::from([[1.0], [2.0], [3.0], [4.0]]);
let view = v1.view::<3>(0).unwrap();
let view_mut = m.view_mut::<3, 1>((0, 0)).unwrap();
assert!((view.dot(view_mut) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
let view = v1.view::<3>(0).unwrap();
assert!((view.dot(m.t()) - 14.0).abs() < f64::EPSILON);
let v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let mut m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
let view = v1.view::<3>(0).unwrap();
assert!((view.dot(m.t_mut()) - 14.0).abs() < f64::EPSILON);
}
#[test]
fn test_vector_view_mut_dot() {
let mut v = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let v1 = v.view_mut::<3>(0).unwrap();
let v2 = Vector::<f64, 3>::from([4.0, 5.0, 6.0]);
assert!((v1.dot(v2) - 32.0).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let v2 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view1 = v1.view_mut::<3>(0).unwrap();
let view2 = v2.view::<3>(1).unwrap();
assert!((view1.dot(view2) - 20.0).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let mut v2 = Vector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view1 = v1.view_mut::<3>(0).unwrap();
let view2 = v2.view_mut::<3>(1).unwrap();
assert!((view1.dot(view2) - 20.0).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
let view = v1.view_mut::<3>(0).unwrap();
assert!((view.dot(m) - 14.0).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 4, 1>::from([[1.0], [2.0], [3.0], [4.0]]);
let view = v1.view_mut::<3>(0).unwrap();
let view2 = m.view::<3, 1>((0, 0)).unwrap();
assert!((view.dot(view2) - 14.0).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let mut m = Matrix::<f64, 4, 1>::from([[1.0], [2.0], [3.0], [4.0]]);
let view = v1.view_mut::<3>(0).unwrap();
let view2 = m.view_mut::<3, 1>((0, 0)).unwrap();
assert!((view.dot(view2) - 14.0).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
let view = v1.view_mut::<3>(0).unwrap();
assert!((view.dot(m.t()) - 14.0).abs() < f64::EPSILON);
let mut v1 = Vector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let mut m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
let view = v1.view_mut::<3>(0).unwrap();
assert!((view.dot(m.t_mut()) - 14.0).abs() < f64::EPSILON);
}
#[test]
fn test_row_vector_dot() {
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = RowVector::<f64, 3>::from([4.0, 5.0, 6.0]);
assert!((v1.dot(v2) - 32.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let v2 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view = v2.view::<3>(0).unwrap();
assert!((v1.dot(view) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut v2 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view_mut = v2.view_mut::<3>(0).unwrap();
assert!((v1.dot(view_mut) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
assert!((v1.dot(m) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 1, 4>::from([[1.0, 2.0, 3.0, 4.0]]);
let view = m.view::<1, 3>((0, 0)).unwrap();
assert!((v1.dot(view) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut m = Matrix::<f64, 1, 4>::from([[1.0, 2.0, 3.0, 4.0]]);
let view = m.view_mut::<1, 3>((0, 0)).unwrap();
assert!((v1.dot(view) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
assert!((v1.dot(m.t()) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 3>::from([1.0, 2.0, 3.0]);
let mut m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
assert!((v1.dot(m.t_mut()) - 14.0).abs() < f64::EPSILON);
}
#[test]
fn test_row_vector_view_dot() {
let v = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let v1 = v.view::<3>(0).unwrap();
let v2 = RowVector::<f64, 3>::from([4.0, 5.0, 6.0]);
assert!((v1.dot(v2) - 32.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let v2 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view1 = v1.view::<3>(0).unwrap();
let view2 = v2.view::<3>(1).unwrap();
assert!((view1.dot(view2) - 20.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let mut v2 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view1 = v1.view::<3>(0).unwrap();
let view2 = v2.view_mut::<3>(1).unwrap();
assert!((view1.dot(view2) - 20.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
let view = v1.view::<3>(0).unwrap();
assert!((view.dot(m) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 1, 4>::from([[1.0, 2.0, 3.0, 4.0]]);
let view = v1.view::<3>(0).unwrap();
let view2 = m.view::<1, 3>((0, 0)).unwrap();
assert!((view.dot(view2) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let mut m = Matrix::<f64, 1, 4>::from([[1.0, 2.0, 3.0, 4.0]]);
let view = v1.view::<3>(0).unwrap();
let view2 = m.view_mut::<1, 3>((0, 0)).unwrap();
assert!((view.dot(view2) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
let view = v1.view::<3>(0).unwrap();
assert!((view.dot(m.t()) - 14.0).abs() < f64::EPSILON);
let v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let mut m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
let view = v1.view::<3>(0).unwrap();
assert!((view.dot(m.t_mut()) - 14.0).abs() < f64::EPSILON);
}
#[test]
fn test_row_vector_view_mut_dot() {
let mut v = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let v1 = v.view_mut::<3>(0).unwrap();
let v2 = RowVector::<f64, 3>::from([4.0, 5.0, 6.0]);
assert!((v1.dot(v2) - 32.0).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let v2 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view1 = v1.view_mut::<3>(0).unwrap();
let view2 = v2.view::<3>(1).unwrap();
assert!((view1.dot(view2) - 20.0).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let mut v2 = RowVector::<f64, 5>::from([1.0, 2.0, 3.0, 4.0, 5.0]);
let view1 = v1.view_mut::<3>(0).unwrap();
let view2 = v2.view_mut::<3>(1).unwrap();
assert!((view1.dot(view2) - 20.0).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 1, 3>::from([[1.0, 2.0, 3.0]]);
let view = v1.view_mut::<3>(0).unwrap();
assert!((view.dot(m) - 14.0).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 1, 4>::from([[1.0, 2.0, 3.0, 4.0]]);
let view = v1.view_mut::<3>(0).unwrap();
let view2 = m.view::<1, 3>((0, 0)).unwrap();
assert!((view.dot(view2) - 14.0).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let mut m = Matrix::<f64, 1, 4>::from([[1.0, 2.0, 3.0, 4.0]]);
let view = v1.view_mut::<3>(0).unwrap();
let view2 = m.view_mut::<1, 3>((0, 0)).unwrap();
assert!((view.dot(view2) - 14.0).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
let view = v1.view_mut::<3>(0).unwrap();
assert!((view.dot(m.t()) - 14.0).abs() < f64::EPSILON);
let mut v1 = RowVector::<f64, 4>::from([1.0, 2.0, 3.0, 4.0]);
let mut m = Matrix::<f64, 3, 1>::from([[1.0], [2.0], [3.0]]);
let view = v1.view_mut::<3>(0).unwrap();
assert!((view.dot(m.t_mut()) - 14.0).abs() < f64::EPSILON);
}
}