Custom Built-in Unit Test Suite (#105)

* tests: new built-in test runner

* tests: update tests for new builtin test api

* tests: print test suite logs

* tests: remove cmocka from build files

* tests: colorize test suite log and remove redundant prints
This commit is contained in:
Recep Aslantas
2019-09-12 06:56:44 +03:00
committed by GitHub
parent 27cc9c3351
commit 9ab9e95ce5
23 changed files with 561 additions and 415 deletions

View File

@@ -16,8 +16,7 @@ test_quat_mul_raw(versor p, versor q, versor dest) {
dest[3] = p[3] * q[3] - p[0] * q[0] - p[1] * q[1] - p[2] * q[2];
}
void
test_quat(void **state) {
TEST_IMPL(quat) {
mat4 inRot, outRot, view1, view2, rot1, rot2;
versor inQuat, outQuat, q3, q4, q5;
vec3 eye, axis, imag, v1, v2;
@@ -25,9 +24,10 @@ test_quat(void **state) {
/* 0. test identiy quat */
glm_quat_identity(q4);
assert_true(glm_eq(glm_quat_real(q4), cosf(glm_rad(0.0f) * 0.5f)));
ASSERT(glm_eq(glm_quat_real(q4), cosf(glm_rad(0.0f) * 0.5f)))
glm_quat_mat4(q4, rot1);
test_assert_mat4_eq2(rot1, GLM_MAT4_IDENTITY, 0.000009);
ASSERT(test_assert_mat4_eq2(rot1, GLM_MAT4_IDENTITY, 0.000009).status == 1)
/* 1. test quat to mat and mat to quat */
for (i = 0; i < 1000; i++) {
@@ -38,16 +38,17 @@ test_quat(void **state) {
glmc_quat_mat4(outQuat, outRot);
/* 2. test first quat and generated one equality */
test_assert_quat_eq_abs(inQuat, outQuat);
ASSERT(test_assert_quat_eq_abs(inQuat, outQuat).status == 1);
/* 3. test first rot and second rotation */
test_assert_mat4_eq2(inRot, outRot, 0.000009); /* almost equal */
/* almost equal */
ASSERT(test_assert_mat4_eq2(inRot, outRot, 0.000009).status == 1);
/* 4. test SSE mul and raw mul */
#if defined( __SSE__ ) || defined( __SSE2__ )
test_quat_mul_raw(inQuat, outQuat, q3);
glm_quat_mul_sse2(inQuat, outQuat, q4);
test_assert_quat_eq(q3, q4);
ASSERT(test_assert_quat_eq(q3, q4).status == 1);
#endif
}
@@ -61,7 +62,7 @@ test_quat(void **state) {
/* create view matrix with quaternion */
glm_quat_look(eye, q3, view2);
test_assert_mat4_eq2(view1, view2, 0.000009);
ASSERT(test_assert_mat4_eq2(view1, view2, 0.000009).status == 1);
/* 6. test quaternion rotation matrix result */
test_rand_quat(q3);
@@ -71,7 +72,7 @@ test_quat(void **state) {
glm_quat_axis(q3, axis);
glm_rotate_make(rot2, glm_quat_angle(q3), axis);
test_assert_mat4_eq2(rot1, rot2, 0.000009);
ASSERT(test_assert_mat4_eq2(rot1, rot2, 0.000009).status == 1);
/* 7. test quaternion multiplication (hamilton product),
final rotation = first rotation + second = quat1 * quat2
@@ -91,7 +92,7 @@ test_quat(void **state) {
glm_quat_mat4(q5, rot2);
/* result must be same (almost) */
test_assert_mat4_eq2(rot1, rot2, 0.000009);
ASSERT(test_assert_mat4_eq2(rot1, rot2, 0.000009).status == 1)
/* 8. test quaternion for look rotation */
@@ -101,26 +102,26 @@ test_quat(void **state) {
/* result must be identity */
glm_quat_identity(q4);
test_assert_quat_eq(q3, q4);
ASSERT(test_assert_quat_eq(q3, q4).status == 1)
/* look at from 0, 0, 1 to zero, direction = 0, 0, -1 */
glm_quat_forp(GLM_ZUP, GLM_VEC3_ZERO, (vec3){0, 0, -1}, GLM_YUP, q3);
/* result must be identity */
glm_quat_identity(q4);
test_assert_quat_eq(q3, q4);
ASSERT(test_assert_quat_eq(q3, q4).status == 1)
/* 8.2 perpendicular */
glm_quat_for(GLM_XUP, (vec3){0, 0, -1}, GLM_YUP, q3);
/* result must be -90 */
glm_quatv(q4, glm_rad(-90.0f), GLM_YUP);
test_assert_quat_eq(q3, q4);
ASSERT(test_assert_quat_eq(q3, q4).status == 1)
/* 9. test imag, real */
/* 9.1 real */
assert_true(glm_eq(glm_quat_real(q4), cosf(glm_rad(-90.0f) * 0.5f)));
ASSERT(glm_eq(glm_quat_real(q4), cosf(glm_rad(-90.0f) * 0.5f)))
/* 9.1 imag */
glm_quat_imag(q4, imag);
@@ -130,7 +131,7 @@ test_quat(void **state) {
axis[1] = sinf(glm_rad(-90.0f) * 0.5f) * 1.0f;
axis[2] = 0.0f;
assert_true(glm_vec3_eqv_eps(imag, axis));
ASSERT(glm_vec3_eqv_eps(imag, axis));
/* 9.2 axis */
glm_quat_axis(q4, axis);
@@ -138,7 +139,7 @@ test_quat(void **state) {
imag[1] = -1.0f;
imag[2] = 0.0f;
test_assert_vec3_eq(imag, axis);
ASSERT(test_assert_vec3_eq(imag, axis).status == 1);
/* 10. test rotate vector using quat */
/* (0,0,-1) around (1,0,0) must give (0,1,0) */
@@ -152,11 +153,11 @@ test_quat(void **state) {
glm_quat_rotatev(q3, v2, v2);
/* result must be : (0,1,0) */
assert_true(fabsf(v1[0]) <= 0.00009f
&& fabsf(v1[1] - 1.0f) <= 0.00009f
&& fabsf(v1[2]) <= 0.00009f);
ASSERT(fabsf(v1[0]) <= 0.00009f
&& fabsf(v1[1] - 1.0f) <= 0.00009f
&& fabsf(v1[2]) <= 0.00009f)
test_assert_vec3_eq(v1, v2);
ASSERT(test_assert_vec3_eq(v1, v2).status == 1)
/* 11. test rotate transform */
glm_translate_make(rot1, (vec3){-10.0, 45.0f, 8.0f});
@@ -167,7 +168,7 @@ test_quat(void **state) {
glm_quat_rotate(rot2, q3, rot2);
/* result must be same (almost) */
test_assert_mat4_eq2(rot1, rot2, 0.000009);
ASSERT(test_assert_mat4_eq2(rot1, rot2, 0.000009).status == 1)
glm_rotate_make(rot1, glm_rad(-90), GLM_ZUP);
glm_translate(rot1, (vec3){-10.0, 45.0f, 8.0f});
@@ -178,7 +179,7 @@ test_quat(void **state) {
glm_translate(rot2, (vec3){-10.0, 45.0f, 8.0f});
/* result must be same (almost) */
test_assert_mat4_eq2(rot1, rot2, 0.000009);
ASSERT(test_assert_mat4_eq2(rot1, rot2, 0.000009).status == 1)
/* reverse */
glm_rotate_make(rot1, glm_rad(-90), GLM_ZUP);
@@ -186,7 +187,7 @@ test_quat(void **state) {
glm_quat_rotate(rot1, q3, rot1);
/* result must be identity */
test_assert_mat4_eq2(rot1, GLM_MAT4_IDENTITY, 0.000009);
ASSERT(test_assert_mat4_eq2(rot1, GLM_MAT4_IDENTITY, 0.000009).status == 1)
test_rand_quat(q3);
@@ -195,7 +196,9 @@ test_quat(void **state) {
glm_quat_mul(q3, q4, q5);
glm_quat_identity(q3);
test_assert_quat_eq(q3, q5);
ASSERT(test_assert_quat_eq(q3, q5).status == 1)
/* TODO: add tests for slerp, lerp */
TEST_SUCCESS
}