diff --git a/makefile.am b/makefile.am index 0767008..a81bdd5 100644 --- a/makefile.am +++ b/makefile.am @@ -105,7 +105,8 @@ test_tests_SOURCES=\ test/src/test_main.c \ test/src/test_mat4.c \ test/src/test_cam.c \ - test/src/test_clamp.c + test/src/test_clamp.c \ + test/src/test_euler.c all-local: sh ./post-build.sh diff --git a/test/src/test_common.c b/test/src/test_common.c index e6f36ab..23f2b50 100644 --- a/test/src/test_common.c +++ b/test/src/test_common.c @@ -50,3 +50,10 @@ test_assert_mat4_eq2(mat4 m1, mat4 m2, float eps) { } } } + +void +test_assert_vec3_eq(vec3 v1, vec3 v2) { + assert_true(fabsf(v1[0] - v2[0]) <= 0.0000009); + assert_true(fabsf(v1[1] - v2[1]) <= 0.0000009); + assert_true(fabsf(v1[2] - v2[2]) <= 0.0000009); +} diff --git a/test/src/test_common.h b/test/src/test_common.h index 5fff3d7..aeea4d6 100644 --- a/test/src/test_common.h +++ b/test/src/test_common.h @@ -31,4 +31,7 @@ test_assert_mat4_eq(mat4 m1, mat4 m2); void test_assert_mat4_eq2(mat4 m1, mat4 m2, float eps); +void +test_assert_vec3_eq(vec3 v1, vec3 v2); + #endif /* test_common_h */ diff --git a/test/src/test_euler.c b/test/src/test_euler.c new file mode 100644 index 0000000..b71c4cb --- /dev/null +++ b/test/src/test_euler.c @@ -0,0 +1,44 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#include "test_common.h" + +void +test_euler(void **state) { + mat4 rot1, rot2; + vec3 inAngles, outAngles; + + inAngles[0] = glm_rad(-45.0f); /* X angle */ + inAngles[1] = glm_rad(88.0f); /* Y angle */ + inAngles[2] = glm_rad(18.0f); /* Z angle */ + + glm_euler_xyz(inAngles, rot1); + + /* extract angles */ + glmc_euler_angles(rot1, outAngles); + + /* angles must be equal in that range */ + test_assert_vec3_eq(inAngles, outAngles); + + /* matrices must be equal */ + glmc_euler_xyz(outAngles, rot2); + test_assert_mat4_eq(rot1, rot2); + + /* change range */ + inAngles[0] = glm_rad(-145.0f); /* X angle */ + inAngles[1] = glm_rad(818.0f); /* Y angle */ + inAngles[2] = glm_rad(181.0f); /* Z angle */ + + glm_euler_xyz(inAngles, rot1); + glmc_euler_angles(rot1, outAngles); + + /* angles may not be equal but matrices MUST! */ + + /* matrices must be equal */ + glmc_euler_xyz(outAngles, rot2); + test_assert_mat4_eq(rot1, rot2); +} diff --git a/test/src/test_main.c b/test/src/test_main.c index 4de5184..38eb4c2 100644 --- a/test/src/test_main.c +++ b/test/src/test_main.c @@ -17,7 +17,10 @@ main(int argc, const char * argv[]) { cmocka_unit_test(test_camera_decomp), /* vector */ - cmocka_unit_test(test_clamp) + cmocka_unit_test(test_clamp), + + /* euler */ + cmocka_unit_test(test_euler) }; return cmocka_run_group_tests(tests, NULL, NULL); diff --git a/test/src/test_tests.h b/test/src/test_tests.h index fb9771e..b1288f7 100644 --- a/test/src/test_tests.h +++ b/test/src/test_tests.h @@ -19,4 +19,7 @@ test_camera_decomp(void **state); void test_clamp(void **state); +void +test_euler(void **state); + #endif /* test_tests_h */