mirror of
https://github.com/recp/cglm.git
synced 2025-10-04 17:09:40 +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-test-ios*
|
||||||
/cglm.pc
|
/cglm.pc
|
||||||
test-driver
|
test-driver
|
||||||
|
Default-568h@2x.png
|
||||||
|
@@ -446,6 +446,9 @@ glm_mat4_quat(mat4 m, versor dest) {
|
|||||||
/*!
|
/*!
|
||||||
* @brief multiply vector with mat4
|
* @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] m mat4(affine transform)
|
||||||
* @param[in] v vec3
|
* @param[in] v vec3
|
||||||
* @param[in] last 4th item to make it vec4
|
* @param[in] last 4th item to make it vec4
|
||||||
|
@@ -7,9 +7,6 @@
|
|||||||
|
|
||||||
#include "test_common.h"
|
#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_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 A_MATRIX3 {{1,2,3},{5,6,7},{9,10,11}}
|
||||||
|
|
||||||
@@ -141,9 +138,9 @@ TEST_IMPL(glm_mat4_mul) {
|
|||||||
test_rand_mat4(m2);
|
test_rand_mat4(m2);
|
||||||
|
|
||||||
glm_mat4_mul(m1, m2, m3);
|
glm_mat4_mul(m1, m2, m3);
|
||||||
for (i = 0; i < m; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
for (j = 0; j < n; j++) {
|
for (j = 0; j < 4; j++) {
|
||||||
for (k = 0; k < m; k++)
|
for (k = 0; k < 4; k++)
|
||||||
/* column-major */
|
/* column-major */
|
||||||
m4[i][j] += m1[k][j] * m2[i][k];
|
m4[i][j] += m1[k][j] * m2[i][k];
|
||||||
}
|
}
|
||||||
@@ -159,22 +156,85 @@ TEST_IMPL(glm_mat4_mul) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_IMPL(glm_mat4_mulN) {
|
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_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_IMPL(glm_mat4_mulv) {
|
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_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_IMPL(glm_mat4_mulv3) {
|
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_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_IMPL(glm_mat4_trace) {
|
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_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_IMPL(glm_mat4_trace3) {
|
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_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user