test: add tests for euler XYZ

This commit is contained in:
Recep Aslantas
2018-03-27 12:14:46 +03:00
parent 4298211795
commit d1f3feeb6e
6 changed files with 63 additions and 2 deletions

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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 */

44
test/src/test_euler.c Normal file
View File

@@ -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);
}

View File

@@ -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);

View File

@@ -19,4 +19,7 @@ test_camera_decomp(void **state);
void
test_clamp(void **state);
void
test_euler(void **state);
#endif /* test_tests_h */