diff --git a/test/src/test_vec3.h b/test/src/test_vec3.h index 0d446f6..469a6b0 100644 --- a/test/src/test_vec3.h +++ b/test/src/test_vec3.h @@ -569,3 +569,83 @@ TEST_IMPL(GLM_PREFIX, vec3_negate) { TEST_SUCCESS } +TEST_IMPL(GLM_PREFIX, vec3_normalize) { + vec3 v1 = {2.0f, -3.0f, 4.0f}, v2 = {2.0f, -3.0f, 4.0f}; + float s = 1.0f; + float norm; + + GLM(vec3_normalize)(v2); + + norm = sqrtf(v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2]); + if (norm == 0.0f) { + ASSERT(glm_eq(v1[0], 0.0f)) + ASSERT(glm_eq(v1[1], 0.0f)) + ASSERT(glm_eq(v1[2], 0.0f)) + + TEST_SUCCESS + } + + norm = s / norm; + + ASSERT(glm_eq(v1[0] * norm, v2[0])) + ASSERT(glm_eq(v1[1] * norm, v2[1])) + ASSERT(glm_eq(v1[2] * norm, v2[2])) + + TEST_SUCCESS +} + +TEST_IMPL(GLM_PREFIX, vec3_normalize_to) { + vec3 v1 = {2.0f, -3.0f, 4.0f}, v2; + float s = 1.0f; + float norm; + + GLM(vec3_normalize_to)(v1, v2); + + norm = sqrtf(v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2]); + if (norm == 0.0f) { + ASSERT(glm_eq(v1[0], 0.0f)) + ASSERT(glm_eq(v1[1], 0.0f)) + ASSERT(glm_eq(v1[2], 0.0f)) + + TEST_SUCCESS + } + + norm = s / norm; + + ASSERT(glm_eq(v1[0] * norm, v2[0])) + ASSERT(glm_eq(v1[1] * norm, v2[1])) + ASSERT(glm_eq(v1[2] * norm, v2[2])) + + TEST_SUCCESS +} + +TEST_IMPL(GLM_PREFIX, vec3_cross) { + /* (u2.v3 - u3.v2, u3.v1 - u1.v3, u1.v2 - u2.v1) */ + vec3 v1 = {2.0f, -3.0f, 4.0f}, v2 = {12.0f, -31.0f, 43.0f}, v3, v4; + + GLM(vec3_cross)(v1, v2, v3); + + v4[0] = v1[1] * v2[2] - v1[2] * v2[1]; + v4[1] = v1[2] * v2[0] - v1[0] * v2[2]; + v4[2] = v1[0] * v2[1] - v1[1] * v2[0]; + + ASSERTIFY(test_assert_vec3_eq(v3, v4)) + + TEST_SUCCESS +} + +TEST_IMPL(GLM_PREFIX, vec3_crossn) { + /* (u2.v3 - u3.v2, u3.v1 - u1.v3, u1.v2 - u2.v1) */ + vec3 v1 = {2.0f, -3.0f, 4.0f}, v2 = {12.0f, -31.0f, 43.0f}, v3, v4; + + GLM(vec3_cross)(v1, v2, v3); + + v4[0] = v1[1] * v2[2] - v1[2] * v2[1]; + v4[1] = v1[2] * v2[0] - v1[0] * v2[2]; + v4[2] = v1[0] * v2[1] - v1[1] * v2[0]; + + ASSERTIFY(test_assert_vec3_eq(v3, v4)) + + TEST_SUCCESS +} + diff --git a/test/tests.h b/test/tests.h index 1cded8e..ae815ac 100644 --- a/test/tests.h +++ b/test/tests.h @@ -173,6 +173,10 @@ TEST_DECLARE(glm_vec3_maxadd) TEST_DECLARE(glm_vec3_minadd) TEST_DECLARE(glm_vec3_negate_to) TEST_DECLARE(glm_vec3_negate) +TEST_DECLARE(glm_vec3_normalize) +TEST_DECLARE(glm_vec3_normalize_to) +TEST_DECLARE(glm_vec3_cross) +TEST_DECLARE(glm_vec3_crossn) TEST_DECLARE(glmc_vec3) TEST_DECLARE(glmc_vec3_copy) @@ -200,6 +204,10 @@ TEST_DECLARE(glmc_vec3_maxadd) TEST_DECLARE(glmc_vec3_minadd) TEST_DECLARE(glmc_vec3_negate_to) TEST_DECLARE(glmc_vec3_negate) +TEST_DECLARE(glmc_vec3_normalize) +TEST_DECLARE(glmc_vec3_normalize_to) +TEST_DECLARE(glmc_vec3_cross) +TEST_DECLARE(glmc_vec3_crossn) /* vec4 */ TEST_DECLARE(vec4) @@ -367,6 +375,10 @@ TEST_LIST { TEST_ENTRY(glm_vec3_minadd) TEST_ENTRY(glm_vec3_negate_to) TEST_ENTRY(glm_vec3_negate) + TEST_ENTRY(glm_vec3_normalize) + TEST_ENTRY(glm_vec3_normalize_to) + TEST_ENTRY(glm_vec3_cross) + TEST_ENTRY(glm_vec3_crossn) TEST_ENTRY(glmc_vec3) @@ -395,7 +407,11 @@ TEST_LIST { TEST_ENTRY(glmc_vec3_minadd) TEST_ENTRY(glmc_vec3_negate_to) TEST_ENTRY(glmc_vec3_negate) - + TEST_ENTRY(glmc_vec3_normalize) + TEST_ENTRY(glmc_vec3_normalize_to) + TEST_ENTRY(glmc_vec3_cross) + TEST_ENTRY(glmc_vec3_crossn) + /* vec4 */ TEST_ENTRY(vec4) };