mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
test: add some tests for affine transforms
This commit is contained in:
@@ -112,7 +112,8 @@ test_tests_SOURCES=\
|
|||||||
test/src/test_quat.c \
|
test/src/test_quat.c \
|
||||||
test/src/test_vec4.c \
|
test/src/test_vec4.c \
|
||||||
test/src/test_vec3.c \
|
test/src/test_vec3.c \
|
||||||
test/src/test_mat3.c
|
test/src/test_mat3.c \
|
||||||
|
test/src/test_affine.c
|
||||||
|
|
||||||
all-local:
|
all-local:
|
||||||
sh ./post-build.sh
|
sh ./post-build.sh
|
||||||
|
|||||||
104
test/src/test_affine.c
Normal file
104
test/src/test_affine.c
Normal file
@@ -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);
|
||||||
|
}
|
||||||
@@ -35,7 +35,10 @@ main(int argc, const char * argv[]) {
|
|||||||
cmocka_unit_test(test_vec4),
|
cmocka_unit_test(test_vec4),
|
||||||
|
|
||||||
/* vec3 */
|
/* 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);
|
return cmocka_run_group_tests(tests, NULL, NULL);
|
||||||
|
|||||||
@@ -37,4 +37,7 @@ test_vec4(void **state);
|
|||||||
void
|
void
|
||||||
test_vec3(void **state);
|
test_vec3(void **state);
|
||||||
|
|
||||||
|
void
|
||||||
|
test_affine(void **state);
|
||||||
|
|
||||||
#endif /* test_tests_h */
|
#endif /* test_tests_h */
|
||||||
|
|||||||
Reference in New Issue
Block a user