use fixed_wide_traits::wide::WideMul; use fixed_wide_traits::wide::WideDot; use crate::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_int64() { let a=Planar64::from(2); let b=Planar64::from(3); let w1=a.wide_mul(b); let w2=w1.wide_mul(w1); let w3=w2.wide_mul(w2); assert_eq!(w3,Planar64Wide3::from((3i128*2).pow(4))); } #[test] fn wide_vec3(){ let v=Vector3::from_value(Planar64::from(3)); let v1=v.wide_mul(v); let v2=v1.wide_mul(v1); let v3=v2.wide_mul(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(v); let v2=v1.wide_mul(v1); let v3=v2.wide_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.wide_mul(v); let v2=v1.wide_mul(v1); let v3=v2.wide_length_squared(); assert_eq!(v3,Planar64Wide3::from(3i128.pow(8)*3)); } #[test] fn wide_matrix_dot_vs_vec_of_vec_dot(){ let vv=Vector3::>::from_value_2d(Planar64::from(3)); // do the dot product of the inner vectors multiplied component wise // this lowers the rank of the data structure and is kind of a weird operation lol let vv_dot=vv.wide_dot(vv); assert_eq!(vv_dot,crate::Vector2::from_value(Planar64Wide1::from(3i128.pow(3)))); //let m=Matrix3::>::from_value_2d(Planar64::from(3)); //normal matrix product //let m_dot=m.wide_dot(m); //assert_eq!(m_dot,Vector3::from_value(Planar64Wide1::from(3i128.pow(3)))); }