diff --git a/test/src/test_quat.h b/test/src/test_quat.h index d1a9dea..2c14163 100644 --- a/test/src/test_quat.h +++ b/test/src/test_quat.h @@ -707,3 +707,35 @@ TEST_IMPL(GLM_PREFIX, quat_lerpc) { TEST_SUCCESS } + +TEST_IMPL(GLM_PREFIX, quat_slerp) { + versor q1, q2, q3, q4; + vec3 v1 = {10.0f, 0.0f, 0.0f}, v2; + + glm_quatv(q1, glm_rad(30.0f), v1); + glm_quatv(q2, glm_rad(90.0f), v1); + + q1[0] = 10.0f; + GLM(quat_slerp)(q1, q2, 1.0f, q3); + ASSERTIFY(test_assert_quat_eq(q1, q3)); + + glm_quatv(q1, glm_rad(30.001), v1); + glm_quatv(q2, glm_rad(30.002), v1); + GLM(quat_slerp)(q1, q2, 0.7f, q3); + glm_quat_lerp(q1, q2, 0.7f, q4); + ASSERTIFY(test_assert_quat_eq(q3, q4)); + + glm_quatv(q1, glm_rad(30.0f), v1); + glm_quatv(q2, glm_rad(90.0f), v1); + GLM(quat_slerp)(q1, q2, 0.5f, q3); + + glm_quat_axis(q3, v2); + glm_vec3_normalize(v1); + glm_vec3_normalize(v2); + + ASSERT(glm_quat_angle(q3) > glm_rad(30.0f)); + ASSERT(glm_quat_angle(q3) < glm_rad(90.0f)); + ASSERTIFY(test_assert_vec3_eq(v1, v2)) + + TEST_SUCCESS +} diff --git a/test/tests.h b/test/tests.h index 570e6a6..1d152f4 100644 --- a/test/tests.h +++ b/test/tests.h @@ -158,6 +158,7 @@ TEST_DECLARE(glm_quat_mat3) TEST_DECLARE(glm_quat_mat3t) TEST_DECLARE(glm_quat_lerp) TEST_DECLARE(glm_quat_lerpc) +TEST_DECLARE(glm_quat_slerp) TEST_DECLARE(glmc_quat_identity) TEST_DECLARE(glmc_quat_identity_array) @@ -186,6 +187,7 @@ TEST_DECLARE(glmc_quat_mat3) TEST_DECLARE(glmc_quat_mat3t) TEST_DECLARE(glmc_quat_lerp) TEST_DECLARE(glmc_quat_lerpc) +TEST_DECLARE(glmc_quat_slerp) /* bezier */ TEST_DECLARE(bezier) @@ -645,6 +647,7 @@ TEST_LIST { TEST_ENTRY(glm_quat_mat3t) TEST_ENTRY(glm_quat_lerp) TEST_ENTRY(glm_quat_lerpc) + TEST_ENTRY(glm_quat_slerp) TEST_ENTRY(glmc_quat_identity) TEST_ENTRY(glmc_quat_identity_array) @@ -673,6 +676,7 @@ TEST_LIST { TEST_ENTRY(glmc_quat_mat3t) TEST_ENTRY(glmc_quat_lerp) TEST_ENTRY(glmc_quat_lerpc) + TEST_ENTRY(glmc_quat_slerp) /* bezier */ TEST_ENTRY(bezier)