use crate::types::{Matrix3,Matrix3x2,Matrix3x4,Matrix4x2,Vector3}; type Planar64=fixed_wide::types::I32F32; type Planar64Wide1=fixed_wide::types::I64F64; //type Planar64Wide2=fixed_wide::types::I128F128; type Planar64Wide3=fixed_wide::types::I256F256; #[test] fn wide_vec3(){ let v=Vector3::from_value(Planar64::from(3)); let v1=v*v.x; let v2=v1*v1.y; let v3=v2*v2.z; assert_eq!(v3.array,Vector3::from_value(Planar64Wide3::from(3i128.pow(8))).array); } #[test] fn wide_vec3_dot(){ let v=Vector3::from_value(Planar64::from(3)); let v1=v*v.x; let v2=v1*v1.y; let v3=v2.dot(v2); assert_eq!(v3,Planar64Wide3::from(3i128.pow(8)*3)); } #[test] fn wide_vec3_length_squared(){ let v=Vector3::from_value(Planar64::from(3)); let v1=v*v.x; let v2=v1*v1.y; let v3=v2.length_squared(); assert_eq!(v3,Planar64Wide3::from(3i128.pow(8)*3)); } #[test] fn wide_matrix_dot(){ let lhs=Matrix3x4::new([ [Planar64::from(1),Planar64::from(2),Planar64::from(3),Planar64::from(4)], [Planar64::from(5),Planar64::from(6),Planar64::from(7),Planar64::from(8)], [Planar64::from(9),Planar64::from(10),Planar64::from(11),Planar64::from(12)], ]).transpose(); let rhs=Matrix4x2::new([ [Planar64::from(1),Planar64::from(2)], [Planar64::from(3),Planar64::from(4)], [Planar64::from(5),Planar64::from(6)], [Planar64::from(7),Planar64::from(8)], ]).transpose(); // Mat3.dot(Mat4) -> Mat3 let m_dot=lhs*rhs; //In[1]:= {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}} . {{1, 2}, {3, 4}, {5, 6}, {7, 8}} //Out[1]= {{50, 60}, {114, 140}, {178, 220}} assert_eq!( m_dot.array, Matrix3x2::new([ [Planar64Wide1::from(50),Planar64Wide1::from(60)], [Planar64Wide1::from(114),Planar64Wide1::from(140)], [Planar64Wide1::from(178),Planar64Wide1::from(220)], ]).transpose().array ); } #[test] #[cfg(feature="named-fields")] fn wide_matrix_det(){ let m=Matrix3::new([ [Planar64::from(1),Planar64::from(2),Planar64::from(3)], [Planar64::from(4),Planar64::from(5),Planar64::from(7)], [Planar64::from(6),Planar64::from(8),Planar64::from(9)], ]); // In[2]:= Det[{{1, 2, 3}, {4, 5, 7}, {6, 8, 9}}] // Out[2]= 7 assert_eq!(m.det(),fixed_wide::fixed::Fixed::<3,96>::from(7)); } #[test] #[cfg(feature="named-fields")] fn wide_matrix_adjugate(){ let m=Matrix3::new([ [Planar64::from(1),Planar64::from(2),Planar64::from(3)], [Planar64::from(4),Planar64::from(5),Planar64::from(7)], [Planar64::from(6),Planar64::from(8),Planar64::from(9)], ]); // In[6]:= Adjugate[{{1, 2, 3}, {4, 5, 7}, {6, 8, 9}}] // Out[6]= {{-11, 6, -1}, {6, -9, 5}, {2, 4, -3}} assert_eq!( m.adjugate().array, Matrix3::new([ [Planar64Wide1::from(-11),Planar64Wide1::from(6),Planar64Wide1::from(-1)], [Planar64Wide1::from(6),Planar64Wide1::from(-9),Planar64Wide1::from(5)], [Planar64Wide1::from(2),Planar64Wide1::from(4),Planar64Wide1::from(-3)], ]).array ); }