2024-09-05 20:36:38 +00:00
|
|
|
use crate::types::{Vector2,Vector3,Vector4,Matrix3,Matrix4};
|
2024-08-28 20:36:17 +00:00
|
|
|
|
|
|
|
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_vec3(){
|
|
|
|
let v=Vector3::from_value(Planar64::from(3));
|
2024-09-03 00:41:54 +00:00
|
|
|
let v1=v.wide_mul_1_1(v);
|
|
|
|
let v2=v1.wide_mul_2_2(v1);
|
|
|
|
let v3=v2.wide_mul_4_4(v2);
|
2024-08-28 20:36:17 +00:00
|
|
|
|
|
|
|
assert_eq!(v3,Vector3::from_value(Planar64Wide3::from(3i128.pow(8))));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn wide_vec3_dot(){
|
|
|
|
let v=Vector3::from_value(Planar64::from(3));
|
2024-09-03 00:41:54 +00:00
|
|
|
let v1=v.wide_mul_1_1(v);
|
|
|
|
let v2=v1.wide_mul_2_2(v1);
|
|
|
|
let v3=v2.wide_dot_4_4(v2);
|
2024-08-28 20:36:17 +00:00
|
|
|
|
|
|
|
assert_eq!(v3,Planar64Wide3::from(3i128.pow(8)*3));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn wide_vec3_length_squared(){
|
|
|
|
let v=Vector3::from_value(Planar64::from(3));
|
2024-09-03 00:41:54 +00:00
|
|
|
let v1=v.wide_mul_1_1(v);
|
|
|
|
let v2=v1.wide_mul_2_2(v1);
|
2024-08-28 20:36:17 +00:00
|
|
|
let v3=v2.wide_length_squared();
|
|
|
|
|
|
|
|
assert_eq!(v3,Planar64Wide3::from(3i128.pow(8)*3));
|
|
|
|
}
|
2024-08-30 19:52:54 +00:00
|
|
|
|
2024-08-30 20:07:56 +00:00
|
|
|
#[test]
|
|
|
|
fn wide_matrix_dot(){
|
2024-09-03 17:43:07 +00:00
|
|
|
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<Vec4>.dot(Mat4<Vec2>) -> Mat3<Vec2>
|
|
|
|
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)]),
|
|
|
|
])
|
|
|
|
);
|
2024-08-30 19:52:54 +00:00
|
|
|
}
|
2024-09-04 20:55:11 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn wide_matrix_det(){
|
|
|
|
let m=Matrix3::from([
|
|
|
|
Vector3::from([Planar64::from(1),Planar64::from(2),Planar64::from(3)]),
|
|
|
|
Vector3::from([Planar64::from(4),Planar64::from(5),Planar64::from(7)]),
|
|
|
|
Vector3::from([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.wide_det_3x3_1(),fixed_wide::fixed::Fixed::<3,96>::from(7));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn wide_matrix_adjugate(){
|
|
|
|
let m=Matrix3::from([
|
|
|
|
Vector3::from([Planar64::from(1),Planar64::from(2),Planar64::from(3)]),
|
|
|
|
Vector3::from([Planar64::from(4),Planar64::from(5),Planar64::from(7)]),
|
|
|
|
Vector3::from([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.wide_adjugate_3x3_1(),
|
|
|
|
Matrix3::from([
|
|
|
|
Vector3::from([Planar64Wide1::from(-11),Planar64Wide1::from(6),Planar64Wide1::from(-1)]),
|
|
|
|
Vector3::from([Planar64Wide1::from(6),Planar64Wide1::from(-9),Planar64Wide1::from(5)]),
|
|
|
|
Vector3::from([Planar64Wide1::from(2),Planar64Wide1::from(4),Planar64Wide1::from(-3)]),
|
|
|
|
])
|
|
|
|
);
|
|
|
|
}
|