From 4c79fee5d354ca12e18f2c31c6c2afaca20c7cb8 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Tue, 10 Apr 2018 17:16:31 +0300 Subject: [PATCH] quat: additional tests for angle, axis, mul (hamilton product) --- test/src/test_quat.c | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/test/src/test_quat.c b/test/src/test_quat.c index b5db10f..8f3909c 100644 --- a/test/src/test_quat.c +++ b/test/src/test_quat.c @@ -18,11 +18,12 @@ test_quat_mul_raw(versor p, versor q, versor dest) { void test_quat(void **state) { - mat4 inRot, outRot, view1, view2; - versor inQuat, outQuat, q3, q4; - vec3 eye; + mat4 inRot, outRot, view1, view2, rot1, rot2; + versor inQuat, outQuat, q3, q4, q5; + vec3 eye, axis; int i; + /* 1. test quat to mat and mat to quat */ for (i = 0; i < 1000; i++) { test_rand_quat(inQuat); glmc_quat_mat4(inQuat, inRot); @@ -37,7 +38,7 @@ test_quat(void **state) { test_assert_quat_eq(q3, q4); } - /* test lookat */ + /* 2. test lookat */ test_rand_vec3(eye); glm_quatv(q3, glm_rad(-90.0f), GLM_YUP); @@ -48,4 +49,32 @@ test_quat(void **state) { glm_quat_look(eye, q3, view2); test_assert_mat4_eq2(view1, view2, 0.000009); + + /* 5. test quaternion rotation matrix result */ + test_rand_quat(q3); + glm_quat_mat4(q3, rot1); + + /* 5.1 test axis and angle of quat */ + glm_quat_axis(q3, axis); + glm_rotate_make(rot2, glm_quat_angle(q3), axis); + + test_assert_mat4_eq2(rot1, rot2, 0.000009); + + /* 6. test quaternion multiplication, first rotation + second = final */ + test_rand_quat(q3); + test_rand_quat(q4); + + glm_quat_mul(q3, q4, q5); + + glm_quat_axis(q3, axis); + glm_rotate_make(rot1, glm_quat_angle(q3), axis); + + glm_quat_axis(q4, axis); + glm_rotate(rot1, glm_quat_angle(q4), axis); + + /* rot2 is combine of two rotation now test with quaternion result */ + glm_quat_mat4(q5, rot2); + + /* result must be same (almost) */ + test_assert_mat4_eq2(rot1, rot2, 0.000009); }