2024-08-28 20:36:17 +00:00
|
|
|
use fixed_wide_traits::wide::WideMul;
|
|
|
|
use fixed_wide_traits::wide::WideDot;
|
|
|
|
|
|
|
|
use crate::Vector3;
|
|
|
|
|
|
|
|
type Planar64=fixed_wide::types::I32F32;
|
2024-08-30 19:52:54 +00:00
|
|
|
type Planar64Wide1=fixed_wide::types::I64F64;
|
2024-08-28 20:36:17 +00:00
|
|
|
//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));
|
|
|
|
}
|
2024-08-30 19:52:54 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn wide_matrix_dot_vs_vec_of_vec_dot(){
|
|
|
|
let vv=Vector3::<crate::Vector2<_>>::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::<Vector3<_>>::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))));
|
|
|
|
}
|