From 39dc61af5427c2df5be27e1f421a3755ac1adc29 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 15 Sep 2019 19:33:41 +0300 Subject: [PATCH] tests: add a few test for mat4 --- .gitignore | 1 + include/cglm/mat4.h | 3 ++ test/src/test_mat4.c | 72 ++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 90ccabb..8f9fd0c 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,4 @@ win/Debug cglm-test-ios* /cglm.pc test-driver +Default-568h@2x.png diff --git a/include/cglm/mat4.h b/include/cglm/mat4.h index e6b916b..7a72f97 100644 --- a/include/cglm/mat4.h +++ b/include/cglm/mat4.h @@ -446,6 +446,9 @@ glm_mat4_quat(mat4 m, versor dest) { /*! * @brief multiply vector with mat4 * + * actually the result is vec4, after multiplication the last component + * is trimmed. if you need it don't use this func. + * * @param[in] m mat4(affine transform) * @param[in] v vec3 * @param[in] last 4th item to make it vec4 diff --git a/test/src/test_mat4.c b/test/src/test_mat4.c index 713aa7f..2a9568b 100644 --- a/test/src/test_mat4.c +++ b/test/src/test_mat4.c @@ -7,9 +7,6 @@ #include "test_common.h" -#define m 4 -#define n 4 - #define A_MATRIX {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}} #define A_MATRIX3 {{1,2,3},{5,6,7},{9,10,11}} @@ -141,9 +138,9 @@ TEST_IMPL(glm_mat4_mul) { test_rand_mat4(m2); glm_mat4_mul(m1, m2, m3); - for (i = 0; i < m; i++) { - for (j = 0; j < n; j++) { - for (k = 0; k < m; k++) + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + for (k = 0; k < 4; k++) /* column-major */ m4[i][j] += m1[k][j] * m2[i][k]; } @@ -159,22 +156,85 @@ TEST_IMPL(glm_mat4_mul) { } TEST_IMPL(glm_mat4_mulN) { + mat4 res1, res2; + mat4 m1 = A_MATRIX; + mat4 m2 = A_MATRIX; + mat4 m3 = A_MATRIX; + + mat4 *matrices[] = { + &m1, &m2, &m3 + }; + + glm_mat4_mulN(matrices, sizeof(matrices) / sizeof(matrices[0]), res1); + + glm_mat4_mul(*matrices[0], *matrices[1], res2); + glm_mat4_mul(res2, *matrices[2], res2); + + ASSERTIFY(test_assert_mat4_eq(res1, res1)) + TEST_SUCCESS } TEST_IMPL(glm_mat4_mulv) { + vec4 res; + mat4 mat = A_MATRIX; + vec4 v = {1.0f, 2.0f, 3.0f, 4.0f}; + int i; + + glm_mat4_mulv(mat, v, res); + + for (i = 0; i < 4; i++) { + ASSERT(glm_eq(res[i], + v[0] * mat[0][i] + + v[1] * mat[1][i] + + v[2] * mat[2][i] + + v[3] * mat[3][i])) + } + TEST_SUCCESS } TEST_IMPL(glm_mat4_mulv3) { + vec4 res; + mat4 mat = A_MATRIX; + vec3 v = {1.0f, 2.0f, 3.0f}; + float last; + int i; + + last = 1.0f; + + glm_mat4_mulv3(mat, v, last, res); + + for (i = 0; i < 3; i++) { + ASSERT(glm_eq(res[i], + v[0] * mat[0][i] + + v[1] * mat[1][i] + + v[2] * mat[2][i] + + last * mat[3][i])) + } + TEST_SUCCESS } TEST_IMPL(glm_mat4_trace) { + mat4 mat = A_MATRIX; + float trace; + + trace = glm_mat4_trace(mat); + + ASSERT(glm_eq(trace, mat[0][0] + mat[1][1] + mat[2][2] + mat[3][3])) + TEST_SUCCESS } TEST_IMPL(glm_mat4_trace3) { + mat4 mat = A_MATRIX; + float trace; + + trace = glm_mat4_trace3(mat); + + ASSERT(glm_eq(trace, mat[0][0] + mat[1][1] + mat[2][2])) + TEST_SUCCESS }