tests: add a few test for mat4

This commit is contained in:
Recep Aslantas
2019-09-15 19:33:41 +03:00
parent f4f9d85caa
commit 39dc61af54
3 changed files with 70 additions and 6 deletions

1
.gitignore vendored
View File

@@ -71,3 +71,4 @@ win/Debug
cglm-test-ios*
/cglm.pc
test-driver
Default-568h@2x.png

View File

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

View File

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