tests: test for ray, reflect, refract and faceforward

This commit is contained in:
Recep Aslantas
2024-03-22 23:44:43 +03:00
parent da57558078
commit ceaa54aef8
5 changed files with 304 additions and 1 deletions

View File

@@ -32,3 +32,43 @@ TEST_IMPL(GLM_PREFIX, ray_triangle) {
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, ray_sphere) {
vec4 sphere = {5.0f, 0.0f, 0.0f, 1.0f}; /* Sphere: center at (5, 0, 0) with radius 1 */
float t1, t2;
bool hit;
/* Case 1: Ray misses the sphere */
hit = GLM(ray_sphere)((vec3){10.0f, 3.0f, 0.0f}, (vec3){1.0f, 0.0f, 0.0f}, sphere, &t1, &t2);
ASSERT(!hit); /* Expect no intersection */
/* Case 2: Ray starts inside the sphere */
hit = GLM(ray_sphere)((vec3){5.0f, 0.5f, 0.0f}, (vec3){1.0f, 0.0f, 0.0f}, sphere, &t1, &t2);
ASSERT(hit); /* Expect an intersection */
ASSERT(t1 < 0 && t2 > 0); /* Ray exits at t2 */
/* Case 3: Ray intersects the sphere from outside */
hit = GLM(ray_sphere)((vec3){0.0f, 0.0f, 0.0f}, (vec3){1.0f, 0.0f, 0.0f}, sphere, &t1, &t2);
ASSERT(hit); /* Expect an intersection */
ASSERT(t1 > 0 && t2 > 0); /* Intersections at t1 and t2 */
TEST_SUCCESS
}
TEST_IMPL(GLM_PREFIX, ray_at) {
vec3 origin = {0.0f, 0.0f, 0.0f};
vec3 direction = {1.0f, 1.0f, 1.0f}; /* Diagonal direction */
float distance = sqrtf(3.0f); /* Distance along the ray; sqrt(3) for unit length due to direction normalization */
vec3 result;
/* Normalize the direction to ensure accurate distance measurement */
glm_vec3_normalize(direction);
GLM(ray_at)(origin, direction, distance, result);
ASSERT(fabsf(result[0] - 1.0f) <= 0.0000009); /* Expecting to be 1 unit along the x-axis */
ASSERT(fabsf(result[1] - 1.0f) <= 0.0000009); /* Expecting to be 1 unit along the y-axis */
ASSERT(fabsf(result[2] - 1.0f) <= 0.0000009); /* Expecting to be 1 unit along the z-axis */
TEST_SUCCESS
}