tests: update test design to test both call and inline versions

This commit is contained in:
Recep Aslantas
2019-09-18 17:07:40 +03:00
parent 0377b99f80
commit a1283282ef
4 changed files with 528 additions and 424 deletions

View File

@@ -54,10 +54,18 @@ typedef struct test_entry_t {
#define TEST_OK 1
#define TEST_SUCCESS return (test_status_t){NULL, TEST_OK};
#define TEST_IMPL(FUN) \
#define TEST_IMPL_ARG1(FUN) \
test_status_t test_ ## FUN (void); \
test_status_t test_ ## FUN()
#define TEST_IMPL_ARG2(PREFIX, FUN) TEST_IMPL_ARG1(PREFIX ## FUN)
#define TEST_IMPL_ARG3(arg1, arg2, arg3, ...) arg3
#define TEST_IMPL_CHOOSER(...) \
TEST_IMPL_ARG3(__VA_ARGS__, TEST_IMPL_ARG2, TEST_IMPL_ARG1)
#define TEST_IMPL(...) TEST_IMPL_CHOOSER(__VA_ARGS__)(__VA_ARGS__)
#define ASSERT_EXT(expr, msg) \
if (!(expr)) { \
fprintf(stderr, \

View File

@@ -5,433 +5,22 @@
* Full license can be found in the LICENSE file
*/
#include "test_common.h"
/* test inline mat4 */
#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}}
#define GLM_PREFIX glm_
#define GLM(X) (glm_ ## X)
TEST_IMPL(glm_mat4_ucopy) {
mat4 m1 = A_MATRIX;
mat4 m2 = GLM_MAT4_IDENTITY_INIT;
#include "test_mat4.h"
glm_mat4_ucopy(m1, m2);
#undef GLM
#undef GLM_PREFIX
ASSERTIFY(test_assert_mat4_eq(m1, m2))
/* test pre-compiled mat4 */
TEST_SUCCESS
}
#define GLM_PREFIX glmc_
#define GLM(X) (glmc_ ## X)
TEST_IMPL(glm_mat4_copy) {
mat4 m1 = A_MATRIX;
mat4 m2 = GLM_MAT4_IDENTITY_INIT;
#include "test_mat4.h"
glm_mat4_copy(m1, m2);
test_assert_mat4_eq(m1, m2);
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_identity) {
mat4 m1 = GLM_MAT4_IDENTITY_INIT;
mat4 m2 = GLM_MAT4_IDENTITY_INIT;
mat4 m3;
glm_mat4_identity(m3);
ASSERTIFY(test_assert_mat4_eq_identity(m1))
ASSERTIFY(test_assert_mat4_eq_identity(m2))
ASSERTIFY(test_assert_mat4_eq_identity(m3))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_identity_array) {
int i, count;
mat4 matrices[4] = {
A_MATRIX,
A_MATRIX,
A_MATRIX,
A_MATRIX
};
count = 4;
glm_mat4_identity_array(matrices, count);
for (i = 0; i < count; i++) {
ASSERTIFY(test_assert_mat4_eq_identity(matrices[i]))
}
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_zero) {
mat4 m1 = GLM_MAT4_ZERO_INIT;
mat4 m2 = GLM_MAT4_ZERO_INIT;
mat4 m3;
glm_mat4_zero(m3);
ASSERTIFY(test_assert_mat4_eq_zero(m1))
ASSERTIFY(test_assert_mat4_eq_zero(m2))
ASSERTIFY(test_assert_mat4_eq_zero(m3))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_pick3) {
mat4 m1 = A_MATRIX;
mat3 m2 = GLM_MAT3_ZERO_INIT;
mat3 m3 = A_MATRIX3;
glm_mat4_pick3(m1, m2);
ASSERTIFY(test_assert_mat3_eq(m2, m3))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_pick3t) {
mat4 m1 = A_MATRIX;
mat3 m2 = GLM_MAT3_ZERO_INIT;
mat3 m3 = A_MATRIX3;
glm_mat4_pick3t(m1, m2);
ASSERTIFY(test_assert_mat3_eqt(m2, m3))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_ins3) {
mat4 m1 = GLM_MAT4_IDENTITY_INIT;
mat3 m2 = A_MATRIX3;
int i, j;
glm_mat4_ins3(m2, m1);
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
ASSERT(m1[i][j] == m2[i][j])
}
}
ASSERT(glm_eq(m1[3][0], 0.0f))
ASSERT(glm_eq(m1[3][1], 0.0f))
ASSERT(glm_eq(m1[3][2], 0.0f))
ASSERT(glm_eq(m1[3][3], 1.0f))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_mul) {
mat4 m1 = GLM_MAT4_IDENTITY_INIT;
mat4 m2 = GLM_MAT4_IDENTITY_INIT;
mat4 m3;
mat4 m4 = GLM_MAT4_ZERO_INIT;
int i, j, k;
/* test random matrices */
/* random matrices */
test_rand_mat4(m1);
test_rand_mat4(m2);
glm_mat4_mul(m1, m2, m3);
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];
}
}
ASSERTIFY(test_assert_mat4_eq(m3, m4))
/* test pre compiled */
glm_mat4_mul(m1, m2, m3);
ASSERTIFY(test_assert_mat4_eq(m3, m4))
TEST_SUCCESS
}
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
}
TEST_IMPL(glm_mat4_quat) {
mat4 m1, m2;
versor q1, q2, q3;
vec3 axis1;
vec3 axis2 = {1.9f, 2.3f, 4.5f};
glm_quat(q1, GLM_PI_4, 1.9f, 2.3f, 4.5f);
glm_quat_mat4(q1, m1);
glm_mat4_quat(m1, q2);
glm_rotate_make(m2, GLM_PI_4, axis2);
glm_mat4_quat(m1, q3);
glm_quat_axis(q3, axis1);
glm_vec3_normalize(axis1);
glm_vec3_normalize(axis2);
ASSERT(glm_eq(glm_quat_angle(q3), GLM_PI_4))
ASSERTIFY(test_assert_vec3_eq(axis1, axis2))
ASSERTIFY(test_assert_vec4_eq(q1, q2))
ASSERTIFY(test_assert_mat4_eq(m1, m2))
ASSERTIFY(test_assert_vec4_eq(q1, q3))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_transpose_to) {
mat4 mat = A_MATRIX;
mat4 m1;
glm_mat4_transpose_to(mat, m1);
ASSERTIFY(test_assert_mat4_eqt(mat, m1))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_transpose) {
mat4 mat = A_MATRIX;
mat4 m1;
glm_mat4_copy(mat, m1);
glm_mat4_transpose(m1);
ASSERTIFY(test_assert_mat4_eqt(mat, m1))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_scale_p) {
mat4 m1 = A_MATRIX;
mat4 m2 = A_MATRIX;
int i, j, k, scale;
scale = rand() % 100;
glm_mat4_scale_p(m1, scale);
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 4; k++)
ASSERT(glm_eq(m1[i][j], m2[i][j] * scale))
}
}
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_scale) {
mat4 m1 = A_MATRIX;
mat4 m2 = A_MATRIX;
int i, j, k, scale;
scale = rand() % 100;
glm_mat4_scale(m1, scale);
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 4; k++)
ASSERT(glm_eq(m1[i][j], m2[i][j] * scale))
}
}
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_det) {
mat4 m1 = GLM_MAT4_IDENTITY_INIT;
test_rand_mat4(m1);
/* test determinant */
ASSERT(glm_mat4_det(m1) == glmc_mat4_det(m1))
#if defined( __SSE2__ )
ASSERT(glmc_mat4_det(m1) == glm_mat4_det_sse2(m1))
#endif
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_inv) {
mat4 m1, m2, m3;
int i;
for (i = 0; i < 100000; i++) {
test_rand_mat4(m1);
test_rand_mat4(m2);
/* test inverse precise */
glm_mat4_inv(m1, m2);
glm_mat4_inv(m2, m3);
ASSERTIFY(test_assert_mat4_eq(m1, m3))
}
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_inv_precise) {
mat4 m1, m2, m3;
int i;
for (i = 0; i < 100000; i++) {
test_rand_mat4(m1);
test_rand_mat4(m2);
glm_mat4_inv_precise(m1, m2);
glm_mat4_inv_precise(m2, m3);
ASSERTIFY(test_assert_mat4_eq(m1, m3))
}
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_inv_fast) {
mat4 m1, m2, m3;
int i;
for (i = 0; i < 100000; i++) {
test_rand_mat4(m1);
test_rand_mat4(m2);
/* test inverse precise */
glm_mat4_inv_fast(m1, m2);
glm_mat4_inv_fast(m2, m3);
ASSERTIFY(test_assert_mat4_eq2(m1, m3, 0.0009f))
}
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_swap_col) {
mat4 m1 = A_MATRIX;
mat4 m2 = A_MATRIX;
glm_mat4_swap_col(m1, 0, 1);
glm_mat4_swap_col(m1, 2, 3);
ASSERTIFY(test_assert_vec4_eq(m1[0], m2[1]))
ASSERTIFY(test_assert_vec4_eq(m1[1], m2[0]))
ASSERTIFY(test_assert_vec4_eq(m1[2], m2[3]))
ASSERTIFY(test_assert_vec4_eq(m1[3], m2[2]))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_swap_row) {
mat4 m1 = A_MATRIX;
mat4 m2 = A_MATRIX;
glm_mat4_swap_row(m1, 0, 1);
glm_mat4_swap_row(m1, 2, 3);
ASSERT(glm_eq(m1[0][0], m2[0][1]))
ASSERT(glm_eq(m1[0][1], m2[0][0]))
ASSERT(glm_eq(m1[0][2], m2[0][3]))
ASSERT(glm_eq(m1[0][3], m2[0][2]))
ASSERT(glm_eq(m1[1][0], m2[1][1]))
ASSERT(glm_eq(m1[1][1], m2[1][0]))
ASSERT(glm_eq(m1[1][2], m2[1][3]))
ASSERT(glm_eq(m1[1][3], m2[1][2]))
ASSERT(glm_eq(m1[2][0], m2[2][1]))
ASSERT(glm_eq(m1[2][1], m2[2][0]))
ASSERT(glm_eq(m1[2][2], m2[2][3]))
ASSERT(glm_eq(m1[2][3], m2[2][2]))
ASSERT(glm_eq(m1[3][0], m2[3][1]))
ASSERT(glm_eq(m1[3][1], m2[3][0]))
ASSERT(glm_eq(m1[3][2], m2[3][3]))
ASSERT(glm_eq(m1[3][3], m2[3][2]))
TEST_SUCCESS
}
TEST_IMPL(glm_mat4_rmc) {
TEST_SUCCESS
}
#undef GLM
#undef GLM_PREFIX

456
test/src/test_mat4.h Normal file
View File

@@ -0,0 +1,456 @@
/*
* 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"
#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}}
TEST_IMPL(GLM_PREFIX, mat4_ucopy) {
mat4 m1 = A_MATRIX;
mat4 m2 = GLM_MAT4_IDENTITY_INIT;
GLM(mat4_ucopy)(m1, m2);
ASSERTIFY(test_assert_mat4_eq(m1, m2))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_copy) {
mat4 m1 = A_MATRIX;
mat4 m2 = GLM_MAT4_IDENTITY_INIT;
GLM(mat4_copy)(m1, m2);
test_assert_mat4_eq(m1, m2);
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_identity) {
mat4 m1 = GLM_MAT4_IDENTITY_INIT;
mat4 m2 = GLM_MAT4_IDENTITY_INIT;
mat4 m3;
GLM(mat4_identity)(m3);
ASSERTIFY(test_assert_mat4_eq_identity(m1))
ASSERTIFY(test_assert_mat4_eq_identity(m2))
ASSERTIFY(test_assert_mat4_eq_identity(m3))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_identity_array) {
int i, count;
mat4 matrices[4] = {
A_MATRIX,
A_MATRIX,
A_MATRIX,
A_MATRIX
};
count = 4;
GLM(mat4_identity_array)(matrices, count);
for (i = 0; i < count; i++) {
ASSERTIFY(test_assert_mat4_eq_identity(matrices[i]))
}
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_zero) {
mat4 m1 = GLM_MAT4_ZERO_INIT;
mat4 m2 = GLM_MAT4_ZERO_INIT;
mat4 m3;
GLM(mat4_zero)(m3);
ASSERTIFY(test_assert_mat4_eq_zero(m1))
ASSERTIFY(test_assert_mat4_eq_zero(m2))
ASSERTIFY(test_assert_mat4_eq_zero(m3))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_pick3) {
mat4 m1 = A_MATRIX;
mat3 m2 = GLM_MAT3_ZERO_INIT;
mat3 m3 = A_MATRIX3;
GLM(mat4_pick3)(m1, m2);
ASSERTIFY(test_assert_mat3_eq(m2, m3))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_pick3t) {
mat4 m1 = A_MATRIX;
mat3 m2 = GLM_MAT3_ZERO_INIT;
mat3 m3 = A_MATRIX3;
GLM(mat4_pick3t)(m1, m2);
ASSERTIFY(test_assert_mat3_eqt(m2, m3))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_ins3) {
mat4 m1 = GLM_MAT4_IDENTITY_INIT;
mat3 m2 = A_MATRIX3;
int i, j;
GLM(mat4_ins3)(m2, m1);
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
ASSERT(m1[i][j] == m2[i][j])
}
}
ASSERT(glm_eq(m1[3][0], 0.0f))
ASSERT(glm_eq(m1[3][1], 0.0f))
ASSERT(glm_eq(m1[3][2], 0.0f))
ASSERT(glm_eq(m1[3][3], 1.0f))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_mul) {
mat4 m1 = GLM_MAT4_IDENTITY_INIT;
mat4 m2 = GLM_MAT4_IDENTITY_INIT;
mat4 m3;
mat4 m4 = GLM_MAT4_ZERO_INIT;
int i, j, k;
/* test random matrices */
/* random matrices */
test_rand_mat4(m1);
test_rand_mat4(m2);
GLM(mat4_mul)(m1, m2, m3);
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];
}
}
ASSERTIFY(test_assert_mat4_eq(m3, m4))
/* test pre compiled */
GLM(mat4_mul)(m1, m2, m3);
ASSERTIFY(test_assert_mat4_eq(m3, m4))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, 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_PREFIX, 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_PREFIX, 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_PREFIX, 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_PREFIX, 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
}
TEST_IMPL(GLM_PREFIX, mat4_quat) {
mat4 m1, m2;
versor q1, q2, q3;
vec3 axis1;
vec3 axis2 = {1.9f, 2.3f, 4.5f};
GLM(quat)(q1, GLM_PI_4, 1.9f, 2.3f, 4.5f);
GLM(quat_mat4)(q1, m1);
GLM(mat4_quat)(m1, q2);
GLM(rotate_make)(m2, GLM_PI_4, axis2);
GLM(mat4_quat)(m1, q3);
GLM(quat_axis)(q3, axis1);
GLM(vec3_normalize)(axis1);
GLM(vec3_normalize)(axis2);
ASSERT(glm_eq(glm_quat_angle(q3), GLM_PI_4))
ASSERTIFY(test_assert_vec3_eq(axis1, axis2))
ASSERTIFY(test_assert_vec4_eq(q1, q2))
ASSERTIFY(test_assert_mat4_eq(m1, m2))
ASSERTIFY(test_assert_vec4_eq(q1, q3))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_transpose_to) {
mat4 mat = A_MATRIX;
mat4 m1;
GLM(mat4_transpose_to)(mat, m1);
ASSERTIFY(test_assert_mat4_eqt(mat, m1))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_transpose) {
mat4 mat = A_MATRIX;
mat4 m1;
GLM(mat4_copy)(mat, m1);
GLM(mat4_transpose)(m1);
ASSERTIFY(test_assert_mat4_eqt(mat, m1))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_scale_p) {
mat4 m1 = A_MATRIX;
mat4 m2 = A_MATRIX;
int i, j, k, scale;
scale = rand() % 100;
GLM(mat4_scale_p)(m1, scale);
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 4; k++)
ASSERT(glm_eq(m1[i][j], m2[i][j] * scale))
}
}
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_scale) {
mat4 m1 = A_MATRIX;
mat4 m2 = A_MATRIX;
int i, j, k, scale;
scale = rand() % 100;
GLM(mat4_scale)(m1, scale);
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 4; k++)
ASSERT(glm_eq(m1[i][j], m2[i][j] * scale))
}
}
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_det) {
mat4 m1 = GLM_MAT4_IDENTITY_INIT;
test_rand_mat4(m1);
/* test determinant */
ASSERT(glm_mat4_det(m1) == glmc_mat4_det(m1))
#if defined( __SSE2__ )
ASSERT(glmc_mat4_det(m1) == glm_mat4_det_sse2(m1))
#endif
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_inv) {
mat4 m1, m2, m3;
int i;
for (i = 0; i < 100000; i++) {
test_rand_mat4(m1);
test_rand_mat4(m2);
/* test inverse precise */
GLM(mat4_inv)(m1, m2);
GLM(mat4_inv)(m2, m3);
ASSERTIFY(test_assert_mat4_eq(m1, m3))
}
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_inv_precise) {
mat4 m1, m2, m3;
int i;
for (i = 0; i < 100000; i++) {
test_rand_mat4(m1);
test_rand_mat4(m2);
glm_mat4_inv_precise(m1, m2);
glm_mat4_inv_precise(m2, m3);
ASSERTIFY(test_assert_mat4_eq(m1, m3))
}
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_inv_fast) {
mat4 m1, m2, m3;
int i;
for (i = 0; i < 100000; i++) {
test_rand_mat4(m1);
test_rand_mat4(m2);
/* test inverse precise */
GLM(mat4_inv_fast)(m1, m2);
GLM(mat4_inv_fast)(m2, m3);
ASSERTIFY(test_assert_mat4_eq2(m1, m3, 0.0009f))
}
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_swap_col) {
mat4 m1 = A_MATRIX;
mat4 m2 = A_MATRIX;
GLM(mat4_swap_col)(m1, 0, 1);
GLM(mat4_swap_col)(m1, 2, 3);
ASSERTIFY(test_assert_vec4_eq(m1[0], m2[1]))
ASSERTIFY(test_assert_vec4_eq(m1[1], m2[0]))
ASSERTIFY(test_assert_vec4_eq(m1[2], m2[3]))
ASSERTIFY(test_assert_vec4_eq(m1[3], m2[2]))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_swap_row) {
mat4 m1 = A_MATRIX;
mat4 m2 = A_MATRIX;
GLM(mat4_swap_row)(m1, 0, 1);
GLM(mat4_swap_row)(m1, 2, 3);
ASSERT(glm_eq(m1[0][0], m2[0][1]))
ASSERT(glm_eq(m1[0][1], m2[0][0]))
ASSERT(glm_eq(m1[0][2], m2[0][3]))
ASSERT(glm_eq(m1[0][3], m2[0][2]))
ASSERT(glm_eq(m1[1][0], m2[1][1]))
ASSERT(glm_eq(m1[1][1], m2[1][0]))
ASSERT(glm_eq(m1[1][2], m2[1][3]))
ASSERT(glm_eq(m1[1][3], m2[1][2]))
ASSERT(glm_eq(m1[2][0], m2[2][1]))
ASSERT(glm_eq(m1[2][1], m2[2][0]))
ASSERT(glm_eq(m1[2][2], m2[2][3]))
ASSERT(glm_eq(m1[2][3], m2[2][2]))
ASSERT(glm_eq(m1[3][0], m2[3][1]))
ASSERT(glm_eq(m1[3][1], m2[3][0]))
ASSERT(glm_eq(m1[3][2], m2[3][3]))
ASSERT(glm_eq(m1[3][3], m2[3][2]))
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, mat4_rmc) {
mat4 mat = A_MATRIX;
vec4 v = {1.0f, 2.0f, 3.0f, 4.0f};
vec4 v1;
float r1, r2;
int i;
r1 = GLM(mat4_rmc)(v, mat, v);
for (i = 0; i < 4; i++) {
v1[i] = v[0] * mat[i][0]
+ v[1] * mat[i][1]
+ v[2] * mat[i][2]
+ v[3] * mat[i][3];
}
r2 = v[0] * v1[0] + v[1] * v1[1] + v[2] * v1[2] + v[3] * v1[3];
ASSERT(glm_eq(r1, r2))
TEST_SUCCESS
}

View File

@@ -44,6 +44,31 @@ TEST_DECLARE(glm_mat4_swap_col)
TEST_DECLARE(glm_mat4_swap_row)
TEST_DECLARE(glm_mat4_rmc)
TEST_DECLARE(glmc_mat4_ucopy)
TEST_DECLARE(glmc_mat4_copy)
TEST_DECLARE(glmc_mat4_identity)
TEST_DECLARE(glmc_mat4_identity_array)
TEST_DECLARE(glmc_mat4_zero)
TEST_DECLARE(glmc_mat4_pick3)
TEST_DECLARE(glmc_mat4_pick3t)
TEST_DECLARE(glmc_mat4_ins3)
TEST_DECLARE(glmc_mat4_mul)
TEST_DECLARE(glmc_mat4_mulN)
TEST_DECLARE(glmc_mat4_mulv)
TEST_DECLARE(glmc_mat4_mulv3)
TEST_DECLARE(glmc_mat4_trace)
TEST_DECLARE(glmc_mat4_trace3)
TEST_DECLARE(glmc_mat4_quat)
TEST_DECLARE(glmc_mat4_transpose_to)
TEST_DECLARE(glmc_mat4_transpose)
TEST_DECLARE(glmc_mat4_scale_p)
TEST_DECLARE(glmc_mat4_scale)
TEST_DECLARE(glmc_mat4_det)
TEST_DECLARE(glmc_mat4_inv)
TEST_DECLARE(glmc_mat4_inv_fast)
TEST_DECLARE(glmc_mat4_swap_col)
TEST_DECLARE(glmc_mat4_swap_row)
TEST_DECLARE(glmc_mat4_rmc)
TEST_DECLARE(affine)
@@ -108,6 +133,32 @@ TEST_LIST {
TEST_ENTRY(glm_mat4_swap_row)
TEST_ENTRY(glm_mat4_rmc)
TEST_ENTRY(glmc_mat4_ucopy)
TEST_ENTRY(glmc_mat4_copy)
TEST_ENTRY(glmc_mat4_identity)
TEST_ENTRY(glmc_mat4_identity_array)
TEST_ENTRY(glmc_mat4_zero)
TEST_ENTRY(glmc_mat4_pick3)
TEST_ENTRY(glmc_mat4_pick3t)
TEST_ENTRY(glmc_mat4_ins3)
TEST_ENTRY(glmc_mat4_mul)
TEST_ENTRY(glmc_mat4_mulN)
TEST_ENTRY(glmc_mat4_mulv)
TEST_ENTRY(glmc_mat4_mulv3)
TEST_ENTRY(glmc_mat4_trace)
TEST_ENTRY(glmc_mat4_trace3)
TEST_ENTRY(glmc_mat4_quat)
TEST_ENTRY(glmc_mat4_transpose_to)
TEST_ENTRY(glmc_mat4_transpose)
TEST_ENTRY(glmc_mat4_scale_p)
TEST_ENTRY(glmc_mat4_scale)
TEST_ENTRY(glmc_mat4_det)
TEST_ENTRY(glmc_mat4_inv)
TEST_ENTRY(glmc_mat4_inv_fast)
TEST_ENTRY(glmc_mat4_swap_col)
TEST_ENTRY(glmc_mat4_swap_row)
TEST_ENTRY(glmc_mat4_rmc)
TEST_ENTRY(affine)
/* mat3 */