mirror of
https://github.com/guezoloic/t3dsr.git
synced 2026-01-25 13:34:24 +00:00
146 lines
3.3 KiB
C
146 lines
3.3 KiB
C
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
|
|
#include "math/vector3.h"
|
|
#include "test_vec.h"
|
|
|
|
#include "unity/unity.h"
|
|
|
|
// --- Tests Vec3 ---
|
|
void addVector3_test() {
|
|
Vec3 a = {1, 2, 3};
|
|
Vec3 b = {4, 5, 6};
|
|
Vec3 r = vec3Add(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(5, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(7, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(9, r.z);
|
|
}
|
|
|
|
void subVector3_test() {
|
|
Vec3 a = {5, 6, 7};
|
|
Vec3 b = {1, 2, 3};
|
|
Vec3 r = vec3Sub(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.z);
|
|
}
|
|
|
|
void scalVector3_test() {
|
|
Vec3 a = {1, 2, 3};
|
|
Vec3 r = vec3Scale(a, 2);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(2, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(4, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(6, r.z);
|
|
}
|
|
|
|
void dotVector3_test() {
|
|
Vec3 a = {1, 2, 3};
|
|
Vec3 b = {4, 5, 6};
|
|
float result = vec3Dot(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(32, result);
|
|
}
|
|
|
|
void lenVector3_test() {
|
|
Vec3 a = {1, 2, 2};
|
|
float result = vec3Len(a);
|
|
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(result - 3));
|
|
}
|
|
|
|
void normVector3_test() {
|
|
Vec3 a = {3, 4, 0};
|
|
Vec3 r = vec3Norm(a);
|
|
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(r.x - 0.6f));
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(r.y - 0.8f));
|
|
}
|
|
|
|
void lerpVector3_test() {
|
|
Vec3 a = {0, 0, 0};
|
|
Vec3 b = {10, 10, 10};
|
|
Vec3 r = vec3Lerp(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);
|
|
}
|
|
|
|
void crosVector3_test() {
|
|
Vec3 a = {1, 0, 0};
|
|
Vec3 b = {0, 1, 0};
|
|
Vec3 r = vec3Cross(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(1, r.z);
|
|
|
|
}
|
|
|
|
void anglVector3_test() {
|
|
Vec3 a = {1, 0, 0};
|
|
Vec3 b = {0, 1, 0};
|
|
float result = vec3Angle(a, b);
|
|
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(result - (M_PI / 2)));
|
|
}
|
|
|
|
void projVector3_test() {
|
|
Vec3 a = {3, 4, 0};
|
|
Vec3 b = {1, 0, 0};
|
|
Vec3 r = vec3Proj(a, b);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(3, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.z);
|
|
|
|
}
|
|
|
|
void reflVector3_test() {
|
|
Vec3 v = {1, -1, 0};
|
|
Vec3 normal = {0, 1, 0};
|
|
Vec3 r = vec3Refl(v, normal);
|
|
|
|
TEST_ASSERT_EQUAL_FLOAT(1, r.x);
|
|
TEST_ASSERT_EQUAL_FLOAT(1, r.y);
|
|
TEST_ASSERT_EQUAL_FLOAT(0, r.z);
|
|
}
|
|
|
|
void distVector3_test() {
|
|
Vec3 a = {1, 2, 3};
|
|
Vec3 b = {4, 5, 6};
|
|
float result = vec3Dist(a, b);
|
|
|
|
TEST_ASSERT_FLOAT_WITHIN(0.0002f, 5.196, result);
|
|
}
|
|
|
|
void rotaVector3_test() {
|
|
Vec3 v = {1.0f, 0.0f, 0.0f};
|
|
Vec3 axis = {0.0f, 0.0f, 1.0f};
|
|
float angle = M_PI / 2.0f;
|
|
Vec3 result = vec3Rotate(v, axis, angle);
|
|
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(result.x - 0.0f));
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(result.y - 1.0f));
|
|
TEST_ASSERT_LESS_THAN_FLOAT(0.0001f, fabs(result.z - 0.0f));
|
|
}
|
|
|
|
void runVector3_test() {
|
|
RUN_TEST(addVector3_test);
|
|
RUN_TEST(subVector3_test);
|
|
RUN_TEST(scalVector3_test);
|
|
RUN_TEST(dotVector3_test);
|
|
RUN_TEST(lenVector3_test);
|
|
RUN_TEST(normVector3_test);
|
|
RUN_TEST(lerpVector3_test);
|
|
RUN_TEST(crosVector3_test);
|
|
RUN_TEST(anglVector3_test);
|
|
RUN_TEST(projVector3_test);
|
|
RUN_TEST(reflVector3_test);
|
|
RUN_TEST(distVector3_test);
|
|
RUN_TEST(rotaVector3_test);
|
|
} |