mirror of
https://github.com/guezoloic/t3dsr.git
synced 2026-01-25 10:34:23 +00:00
128 lines
2.9 KiB
C
128 lines
2.9 KiB
C
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
|
|
#include "math/vector4.h"
|
|
#include "test_vec.h"
|
|
|
|
#include "unity/unity.h"
|
|
|
|
// --- Tests Vec4 ---
|
|
|
|
void addVector4_test() {
|
|
Vec4 a = {1, 2, 3, 4};
|
|
Vec4 b = {4, 5, 6, 7};
|
|
Vec4 r = vec4Add(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(5, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(7, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(9, r.z);
|
|
TEST_ASSERT_EQUAL_FLOAT(11, r.w);
|
|
}
|
|
|
|
void subVector4_test() {
|
|
Vec4 a = {5, 6, 7, 8};
|
|
Vec4 b = {1, 2, 3, 4};
|
|
Vec4 r = vec4Sub(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.z);
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.w);
|
|
}
|
|
|
|
void scaleVector4_test() {
|
|
Vec4 a = {1, 2, 3, 4};
|
|
Vec4 r = vec4Scale(a, 2);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(2, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(6, r.z);
|
|
TEST_ASSERT_EQUAL_FLOAT(8, r.w);
|
|
}
|
|
|
|
void dotVector4_test() {
|
|
Vec4 a = {1, 2, 3, 4};
|
|
Vec4 b = {4, 5, 6, 7};
|
|
float result = vec4Dot(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT((1*4 + 2*5 + 3*6 + 4*7), result);
|
|
}
|
|
|
|
void lenVector4_test() {
|
|
Vec4 a = {1, 2, 2, 1};
|
|
float result = vec4Len(a);
|
|
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(result - sqrtf(10)));
|
|
}
|
|
|
|
void normVector4_test() {
|
|
Vec4 a = {3, 4, 0, 0};
|
|
Vec4 r = vec4Norm(a);
|
|
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(r.x - (3.0f / 5.0f)));
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(r.y - (4.0f / 5.0f)));
|
|
}
|
|
|
|
void lerpVector4_test() {
|
|
Vec4 a = {0, 0, 0, 0};
|
|
Vec4 b = {10, 10, 10, 10};
|
|
Vec4 r = vec4Lerp(a, b, 0.5f);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(5, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(5, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(5, r.z);
|
|
TEST_ASSERT_EQUAL_FLOAT(5, r.w);
|
|
}
|
|
|
|
void distVector4_test() {
|
|
Vec4 a = {1, 2, 3, 4};
|
|
Vec4 b = {4, 5, 6, 7};
|
|
float result = vec4Dist(a, b);
|
|
|
|
TEST_ASSERT_FLOAT_WITHIN(0.0001f, 6, result);
|
|
}
|
|
|
|
void anglVector4_test() {
|
|
Vec4 a = {1, 0, 0, 0};
|
|
Vec4 b = {0, 1, 0, 0};
|
|
float result = vec4Angle(a, b);
|
|
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(result - (M_PI / 2)));
|
|
}
|
|
|
|
void projVector4_test() {
|
|
Vec4 a = {3, 4, 0, 0};
|
|
Vec4 b = {1, 0, 0, 0};
|
|
Vec4 r = vec4Proj(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(3, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.z);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.w);
|
|
}
|
|
|
|
void reflVector4_test() {
|
|
Vec4 v = {1, -1, 0, 0};
|
|
Vec4 normal = {0, 1, 0, 0};
|
|
Vec4 r = vec4Refl(v, normal);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(1, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(1, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.z);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.w);
|
|
}
|
|
|
|
void runVector4_test() {
|
|
RUN_TEST(addVector4_test);
|
|
RUN_TEST(subVector4_test);
|
|
RUN_TEST(scaleVector4_test);
|
|
RUN_TEST(dotVector4_test);
|
|
RUN_TEST(lenVector4_test);
|
|
RUN_TEST(normVector4_test);
|
|
RUN_TEST(lerpVector4_test);
|
|
RUN_TEST(anglVector4_test);
|
|
RUN_TEST(projVector4_test);
|
|
RUN_TEST(reflVector4_test);
|
|
RUN_TEST(distVector4_test);
|
|
} |