use crate::{Vector2,Vector3,Vector4,Matrix3,Matrix4}; 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.wide_mul_1_1(v); let v2=v1.wide_mul_2_2(v1); let v3=v2.wide_mul_4_4(v2); assert_eq!(v3,Vector3::from_value(Planar64Wide3::from(3i128.pow(8)))); } #[test] fn wide_vec3_dot(){ let v=Vector3::from_value(Planar64::from(3)); let v1=v.wide_mul_1_1(v); let v2=v1.wide_mul_2_2(v1); let v3=v2.wide_dot_4_4(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.wide_mul_1_1(v); let v2=v1.wide_mul_2_2(v1); let v3=v2.wide_length_squared(); assert_eq!(v3,Planar64Wide3::from(3i128.pow(8)*3)); } #[test] fn wide_matrix_dot(){ let lhs=Matrix3::from([ Vector4::from([Planar64::from(1),Planar64::from(2),Planar64::from(3),Planar64::from(4)]), Vector4::from([Planar64::from(5),Planar64::from(6),Planar64::from(7),Planar64::from(8)]), Vector4::from([Planar64::from(9),Planar64::from(10),Planar64::from(11),Planar64::from(12)]), ]); let rhs=Matrix4::from([ Vector2::from([Planar64::from(1),Planar64::from(2)]), Vector2::from([Planar64::from(3),Planar64::from(4)]), Vector2::from([Planar64::from(5),Planar64::from(6)]), Vector2::from([Planar64::from(7),Planar64::from(8)]), ]); // Mat3.dot(Mat4) -> Mat3 let m_dot=lhs.wide_dot_3x4_4x2_1_1(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, Matrix3::from([ Vector2::from([Planar64Wide1::from(50),Planar64Wide1::from(60)]), Vector2::from([Planar64Wide1::from(114),Planar64Wide1::from(140)]), Vector2::from([Planar64Wide1::from(178),Planar64Wide1::from(220)]), ]) ); }