Skip to content

Commit c6e5a14

Browse files
committed
test: AoSoA SIMD test for Matrix*::transform_vector()
1 parent 4110c35 commit c6e5a14

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

.github/workflows/nalgebra-ci-build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ jobs:
6464
override: true
6565
- uses: actions/checkout@v4
6666
- name: check
67-
run: cargo check --features arbitrary,rand,serde-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests,rkyv-safe-deser,rayon;
67+
run: cargo check --features arbitrary,rand,serde-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests,wide-tests,rkyv-safe-deser,rayon;
6868
test-nalgebra:
6969
runs-on: ubuntu-latest
7070
# env:
@@ -81,7 +81,7 @@ jobs:
8181
override: true
8282
- uses: actions/checkout@v4
8383
- name: test
84-
run: cargo test --features arbitrary,rand,serde-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests,rkyv-safe-deser,rayon;
84+
run: cargo test --features arbitrary,rand,serde-serialize,sparse,debug,io,compare,libm,proptest-support,slow-tests,wide-tests,rkyv-safe-deser,rayon;
8585
test-nalgebra-glm:
8686
runs-on: ubuntu-latest
8787
steps:

tests/core/cg.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
use na::{Matrix3, Matrix4, Orthographic3, Perspective3, Point2, Point3, Vector2, Vector3};
22

3+
#[cfg(feature = "wide-tests")]
4+
use na::{Rotation3, SimdValue, Translation3};
5+
#[cfg(feature = "wide-tests")]
6+
use simba::simd::WideF32x4;
7+
38
/// See Example 3.4 of "Graphics and Visualization: Principles & Algorithms"
49
/// by Theoharis, Papaioannou, Platis, Patrikalakis.
510
#[test]
@@ -113,3 +118,49 @@ fn test_orthographic_transform_point3() {
113118
assert_relative_eq!(transformed, orthographic.project_point(&point));
114119
assert_relative_eq!(transformed.coords.push(1.0), multiplied);
115120
}
121+
122+
#[cfg(feature = "wide-tests")]
123+
#[test]
124+
fn test_transform_vector_x4wide() {
125+
let v1 = Vector3::new(0.0, 1.0, 2.0);
126+
let v2 = Vector3::new(3.0, 4.0, 5.0);
127+
let v3 = Vector3::new(6.0, 7.0, 8.0);
128+
let v4 = Vector3::new(9.0, 10.0, 11.0);
129+
130+
let wide_v = Vector3::new(
131+
WideF32x4::from_arr([v1.x, v2.x, v3.x, v4.x]),
132+
WideF32x4::from_arr([v1.y, v2.y, v3.y, v4.y]),
133+
WideF32x4::from_arr([v1.z, v2.z, v3.z, v4.z]),
134+
);
135+
136+
let m1 = Perspective3::new(2.0, 45.0, 1.0, 1000.0).to_homogeneous();
137+
let m2 = Orthographic3::from_fov(2.0, 45.0, 1.0, 1000.0).to_homogeneous();
138+
let m3 = Rotation3::from_axis_angle(&Vector3::y_axis(), 2.5).to_homogeneous();
139+
let m4 = Translation3::new(1.0, 2.0, 3.0).to_homogeneous();
140+
141+
let wide_m = Matrix4::new(
142+
WideF32x4::from_arr([m1.m11, m2.m11, m3.m11, m4.m11]),
143+
WideF32x4::from_arr([m1.m12, m2.m12, m3.m12, m4.m12]),
144+
WideF32x4::from_arr([m1.m13, m2.m13, m3.m13, m4.m13]),
145+
WideF32x4::from_arr([m1.m14, m2.m14, m3.m14, m4.m14]),
146+
WideF32x4::from_arr([m1.m21, m2.m21, m3.m21, m4.m21]),
147+
WideF32x4::from_arr([m1.m22, m2.m22, m3.m22, m4.m22]),
148+
WideF32x4::from_arr([m1.m23, m2.m23, m3.m23, m4.m23]),
149+
WideF32x4::from_arr([m1.m24, m2.m24, m3.m24, m4.m24]),
150+
WideF32x4::from_arr([m1.m31, m2.m31, m3.m31, m4.m31]),
151+
WideF32x4::from_arr([m1.m32, m2.m32, m3.m32, m4.m32]),
152+
WideF32x4::from_arr([m1.m33, m2.m33, m3.m33, m4.m33]),
153+
WideF32x4::from_arr([m1.m34, m2.m34, m3.m34, m4.m34]),
154+
WideF32x4::from_arr([m1.m41, m2.m41, m3.m41, m4.m41]),
155+
WideF32x4::from_arr([m1.m42, m2.m42, m3.m42, m4.m42]),
156+
WideF32x4::from_arr([m1.m43, m2.m43, m3.m43, m4.m43]),
157+
WideF32x4::from_arr([m1.m44, m2.m44, m3.m44, m4.m44]),
158+
);
159+
160+
let wide_v = wide_m.transform_vector(&wide_v);
161+
162+
assert_eq!(wide_v.extract(0), m1.transform_vector(&v1));
163+
assert_eq!(wide_v.extract(1), m2.transform_vector(&v2));
164+
assert_eq!(wide_v.extract(2), m3.transform_vector(&v3));
165+
assert_eq!(wide_v.extract(3), m4.transform_vector(&v4));
166+
}

0 commit comments

Comments
 (0)