diff --git a/makefile.am b/makefile.am index 1a27132..a0c06a9 100644 --- a/makefile.am +++ b/makefile.am @@ -112,7 +112,8 @@ test_tests_SOURCES=\ test/src/test_quat.c \ test/src/test_vec4.c \ test/src/test_vec3.c \ - test/src/test_mat3.c + test/src/test_mat3.c \ + test/src/test_affine.c all-local: sh ./post-build.sh diff --git a/test/src/test_affine.c b/test/src/test_affine.c new file mode 100644 index 0000000..4ce4a42 --- /dev/null +++ b/test/src/test_affine.c @@ -0,0 +1,104 @@ +/* + * 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_affine(void **state) { + mat4 t1, t2, t3, t4, t5; + + /* test translate is postmultiplied */ + glmc_rotate_make(t1, M_PI_4, GLM_YUP); + glm_translate_make(t2, (vec3){34, 57, 36}); + + glmc_mat4_mul(t1, t2, t3); /* R * T */ + + glm_translate(t1, (vec3){34, 57, 36}); + test_assert_mat4_eq(t1, t3); + + /* test rotate is postmultiplied */ + glmc_rotate_make(t1, M_PI_4, GLM_YUP); + glm_translate_make(t2, (vec3){34, 57, 36}); + + glmc_mat4_mul(t2, t1, t3); /* T * R */ + + glm_rotate(t2, M_PI_4, GLM_YUP); + test_assert_mat4_eq(t2, t3); + + /* test scale is postmultiplied */ + glmc_rotate_make(t1, M_PI_4, GLM_YUP); + glm_translate_make(t2, (vec3){34, 57, 36}); + glm_scale_make(t4, (vec3){3, 5, 6}); + + glmc_mat4_mul(t2, t1, t3); /* T * R */ + glmc_mat4_mul(t3, t4, t5); /* T * R * S */ + + glm_scale(t3, (vec3){3, 5, 6}); + test_assert_mat4_eq(t3, t5); + + /* test translate_x */ + glmc_rotate_make(t1, M_PI_4, GLM_YUP); + glm_translate_make(t2, (vec3){34, 0, 0}); + + glmc_mat4_mul(t1, t2, t3); /* R * T */ + glm_translate_x(t1, 34); + test_assert_mat4_eq(t1, t3); + + /* test translate_y */ + glmc_rotate_make(t1, M_PI_4, GLM_YUP); + glm_translate_make(t2, (vec3){0, 57, 0}); + + glmc_mat4_mul(t1, t2, t3); /* R * T */ + glm_translate_y(t1, 57); + test_assert_mat4_eq(t1, t3); + + /* test translate_z */ + glmc_rotate_make(t1, M_PI_4, GLM_YUP); + glm_translate_make(t2, (vec3){0, 0, 36}); + + glmc_mat4_mul(t1, t2, t3); /* R * T */ + glm_translate_z(t1, 36); + test_assert_mat4_eq(t1, t3); + + /* test rotate_x */ + glmc_rotate_make(t1, M_PI_4, (vec3){1, 0, 0}); + glm_translate_make(t2, (vec3){34, 57, 36}); + + glmc_mat4_mul(t2, t1, t3); /* T * R */ + + glm_rotate_x(t2, M_PI_4, t2); + test_assert_mat4_eq(t2, t3); + + /* test rotate_y */ + glmc_rotate_make(t1, M_PI_4, (vec3){0, 1, 0}); + glm_translate_make(t2, (vec3){34, 57, 36}); + + glmc_mat4_mul(t2, t1, t3); /* T * R */ + + glm_rotate_y(t2, M_PI_4, t2); + test_assert_mat4_eq(t2, t3); + + /* test rotate_z */ + glmc_rotate_make(t1, M_PI_4, (vec3){0, 0, 1}); + glm_translate_make(t2, (vec3){34, 57, 36}); + + glmc_mat4_mul(t2, t1, t3); /* T * R */ + + glm_rotate_z(t2, M_PI_4, t2); + test_assert_mat4_eq(t2, t3); + + /* test scale_uni */ + glmc_rotate_make(t1, M_PI_4, GLM_YUP); + glm_translate_make(t2, (vec3){34, 57, 36}); + glm_scale_make(t4, (vec3){3, 3, 3}); + + glmc_mat4_mul(t2, t1, t3); /* T * R */ + glmc_mat4_mul(t3, t4, t5); /* T * R * S */ + + glm_scale_uni(t3, 3); + test_assert_mat4_eq(t3, t5); +} diff --git a/test/src/test_main.c b/test/src/test_main.c index 9e4f5aa..ff77b02 100644 --- a/test/src/test_main.c +++ b/test/src/test_main.c @@ -35,7 +35,10 @@ main(int argc, const char * argv[]) { cmocka_unit_test(test_vec4), /* vec3 */ - cmocka_unit_test(test_vec3) + cmocka_unit_test(test_vec3), + + /* affine */ + cmocka_unit_test(test_affine) }; return cmocka_run_group_tests(tests, NULL, NULL); diff --git a/test/src/test_tests.h b/test/src/test_tests.h index dea8860..7b9cf0a 100644 --- a/test/src/test_tests.h +++ b/test/src/test_tests.h @@ -37,4 +37,7 @@ test_vec4(void **state); void test_vec3(void **state); +void +test_affine(void **state); + #endif /* test_tests_h */