mirror of
https://github.com/recp/cglm.git
synced 2025-10-03 08:41:55 +00:00
tests: add a few test for mat4
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -71,3 +71,4 @@ win/Debug
|
||||
cglm-test-ios*
|
||||
/cglm.pc
|
||||
test-driver
|
||||
Default-568h@2x.png
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user