dethrace/test/BRSRC13/test_matrix23.c

432 lines
11 KiB
C

#include "tests.h"
#include "CORE/MATH/matrix23.h"
#include <stdlib.h>
#include <string.h>
void test_matrix23_BrMatrix23Copy() {
br_matrix23 matin = {{
{ 1.f, 2.f, },
{ 3.f, 4.f, },
{ 5.f, 6.f, },
}};
br_matrix23 matout;
BrMatrix23Copy(&matout, &matin);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(matin.m, matout.m, 6);
}
void test_matrix23_BrMatrix23Identity() {
br_matrix23 mat;
br_matrix23 expected = {{
{ 1.f, 0.f, },
{ 0.f, 1.f, },
{ 0.f, 0.f, },
}};
BrMatrix23Identity(&mat);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(mat.m, expected.m, 6);
}
void test_matrix23_BrMatrix23Rotate() {
br_matrix23 mat;
br_matrix23 expected = {{
{ .5f, .8660254037f, },
{ -.8660254037f, .5f, },
{ .0f, .0f, },
}};
BrMatrix23Rotate(&mat, BR_ANGLE_DEG(60));
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-3, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23Translate() {
br_matrix23 mat;
br_matrix23 expected = {{
{ 1.f, 0.f, },
{ 0.f, 1.f, },
{ 3.f, 5.f, },
}};
BrMatrix23Translate(&mat, 3.f, 5.f);;
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23Scale() {
br_matrix23 mat;
br_matrix23 expected = {{
{ 3.f, 0.f, },
{ 0.f, 5.f, },
{ 0.f, 0.f, },
}};
BrMatrix23Scale(&mat, 3.f, 5.f);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23ShearX() {
br_matrix23 mat;
br_matrix23 expected = {{
{ 1.f, 5.f, },
{ 0.f, 1.f, },
{ 0.f, 0.f, },
}};
BrMatrix23ShearX(&mat, 5.f);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23ShearY() {
br_matrix23 mat;
br_matrix23 expected = {{
{ 1.f, 0.f, },
{ 5.f, 1.f, },
{ 0.f, 0.f, },
}};
BrMatrix23ShearY(&mat, 5.f);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23Inverse() {
{
br_matrix23 b;
br_matrix23 a = {{
{ 1.f, 2.f},
{ 3.f, 4.f},
{ 5.f, 6.f},
}};
br_matrix23 expected = {{
{ -2.f, 1.f, },
{ 1.5f, -0.5f, },
{ 1.f, -2.f, },
}};
br_scalar det = BrMatrix23Inverse(&b, &a);
TEST_ASSERT_FLOAT_WITHIN(1.e-5, -2.f, det);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.m, b.m, 6);
}
{
br_matrix23 b;
br_matrix23 a = {{
{ 1.f, 2.f, },
{ 2.f, 4.f, },
{ 2.f, 1.f, },
}};
br_scalar det = BrMatrix23Inverse(&b, &a);
TEST_ASSERT_FLOAT_WITHIN(1.e-5, 0.f, det);
}
}
void test_matrix23_BrMatrix23LPInverse() {
br_matrix23 b;
br_matrix23 a = {{
{ 0.7071067f, -0.7071067f, },
{ 0.7071067f, 0.7071067f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 0.7071067f, 0.7071067f, },
{ -0.7071067f, 0.7071067f, },
{ 1.4142135f, -5.6568542f, },
}};
BrMatrix23LPInverse(&b, &a);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-5, expected.m, b.m, 6);
}
void test_matrix23_BrMatrix23LPNormalise() {
br_matrix23 b;
br_matrix23 a = {{
{ 1.f, 1e-9f, },
{ 0.f, 1.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 1.f, 0.f, },
{ 0.f, 1.f, },
{ 3.f, 5.f, },
}};
BrMatrix23LPNormalise(&b, &a);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.m, b.m, 6);
}
void test_matrix23_BrMatrix23ApplyP() {
br_vector2 vout;
br_matrix23 mat = {{
{ 1.f, 2.f, },
{ 5.f, 6.f, },
{ 9.f, 10.f, },
}};
br_vector2 vin = {
{ 1.f, 2.f, },
};
br_vector2 expected = {
{ 20.f, 24.f, },
};
BrMatrix23ApplyP(&vout, &vin, &mat);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.v, vout.v, 2);
}
void test_matrix23_BrMatrix23ApplyV() {
br_vector2 vout;
br_matrix23 mat = {{
{ 1.f, 2.f, },
{ 5.f, 6.f, },
{ 9.f, 10.f, },
}};
br_vector2 vin = {
{ 1.f, 2.f, },
};
br_vector2 expected = {
{ 11.f, 14.f, },
};
BrMatrix23ApplyV(&vout, &vin, &mat);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.v, vout.v, 2);
}
void test_matrix23_BrMatrix23TApplyP() {
br_vector2 vout;
br_matrix23 mat = {{
{ 1.f, 2.f, },
{ 5.f, 6.f, },
{ 9.f, 10.f, },
}};
br_vector2 vin = {
{ 1.f, 2.f, },
};
br_vector2 expected = {
{ 5.f, 17.f, },
};
BrMatrix23TApplyP(&vout, &vin, &mat);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.v, vout.v, 2);
}
void test_matrix23_BrMatrix23TApplyV() {
br_vector2 vout;
br_matrix23 mat = {{
{ 1.f, 2.f, },
{ 5.f, 6.f, },
{ 9.f, 10.f, },
}};
br_vector2 vin = {
{ 1.f, 2.f, },
};
br_vector2 expected = {
{ 5.f, 17.f, },
};
BrMatrix23TApplyV(&vout, &vin, &mat);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.v, vout.v, 2);
}
void test_matrix23_BrMatrix23Pre() {
br_matrix23 mat = {{
{ 1.f, 2.f, },
{ 5.f, 6.f, },
{ 9.f, 10.f, },
}};
br_matrix23 a = {{
{ 17.f, 18.f, },
{ 21.f, 22.f, },
{ 25.f, 26.f, },
}};
br_matrix23 expected = {{
{ 107.f, 142.f, },
{ 131.f, 174.f, },
{ 164.f, 216.f, },
}};
BrMatrix23Pre(&mat, &a);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23Post() {
br_matrix23 mat = {{
{ 1.f, 2.f, },
{ 5.f, 6.f, },
{ 9.f, 10.f, },
}};
br_matrix23 a = {{
{ 17.f, 18.f, },
{ 21.f, 22.f, },
{ 25.f, 26.f, },
}};
br_matrix23 expected = {{
{ 59.f, 62.f, },
{ 211.f, 222.f, },
{ 388.f, 408.f, },
}};
BrMatrix23Post(&mat, &a);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PreRotate() {
br_matrix23 mat = {{
{ 0.70710678f, -0.70710678f, },
{ 0.70710678f, 0.70710678f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 1.f, 0.f, },
{ 0.f, 1.f, },
{ 3.f, 5.f, },
}};
BrMatrix23PreRotate(&mat, BR_ANGLE_DEG(45));
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PostRotate() {
br_matrix23 mat = {{
{ 0.70710678f, -0.70710678f, },
{ 0.70710678f, 0.70710678f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 1.f, 0.f, },
{ 0.f, 1.f, },
{ -1.41421356f, 5.65685425f, },
}};
BrMatrix23PostRotate(&mat, BR_ANGLE_DEG(45));
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PreTranslate() {
br_matrix23 mat = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 8.f, 2.f, },
}};
BrMatrix23PreTranslate(&mat, 3.f, 5.f);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PostTranslate() {
br_matrix23 mat = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 6.f, 10.f, },
}};
BrMatrix23PostTranslate(&mat, 3.f, 5.f);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PreScale() {
br_matrix23 mat = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 0.f, -3.f, },
{ 5.f, 0.f, },
{ 3.f, 5.f, },
}};
BrMatrix23PreScale(&mat, 3.f, 5.f);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PostScale() {
br_matrix23 mat = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 0.f, -5.f, },
{ 3.f, 0.f, },
{ 9.f, 25.f, },
}};
BrMatrix23PostScale(&mat, 3.f, 5.f);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PreShearX() {
br_matrix23 mat = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 5.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
BrMatrix23PreShearX(&mat, 5.f);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PostShearX() {
br_matrix23 mat = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 0.f, -1.f, },
{ 1.f, 5.f, },
{ 3.f, 20.f, },
}};
BrMatrix23PostShearX(&mat, 5.f);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PreShearY() {
br_matrix23 mat = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ 0.f, -1.f, },
{ 1.f, -5.f, },
{ 3.f, 5.f, },
}};
BrMatrix23PreShearY(&mat, 5.f);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_BrMatrix23PostShearY() {
br_matrix23 mat = {{
{ 0.f, -1.f, },
{ 1.f, 0.f, },
{ 3.f, 5.f, },
}};
br_matrix23 expected = {{
{ -5.f, -1.f, },
{ 1.f, 0.f, },
{ 28.f, 5.f, },
}};
BrMatrix23PostShearY(&mat, 5.f);
TEST_ASSERT_FLOAT_ARRAY_WITHIN(1e-2, expected.m, mat.m, 6);
}
void test_matrix23_suite() {
UnitySetTestFile(__FILE__);
RUN_TEST(test_matrix23_BrMatrix23Copy);
RUN_TEST(test_matrix23_BrMatrix23Identity);
RUN_TEST(test_matrix23_BrMatrix23Rotate);
RUN_TEST(test_matrix23_BrMatrix23Translate);
RUN_TEST(test_matrix23_BrMatrix23Scale);
RUN_TEST(test_matrix23_BrMatrix23ShearX);
RUN_TEST(test_matrix23_BrMatrix23ShearY);
RUN_TEST(test_matrix23_BrMatrix23Inverse);
RUN_TEST(test_matrix23_BrMatrix23LPInverse);
RUN_TEST(test_matrix23_BrMatrix23LPNormalise);
RUN_TEST(test_matrix23_BrMatrix23ApplyP);
RUN_TEST(test_matrix23_BrMatrix23ApplyV);
RUN_TEST(test_matrix23_BrMatrix23TApplyP);
RUN_TEST(test_matrix23_BrMatrix23TApplyV);
RUN_TEST(test_matrix23_BrMatrix23Pre);
RUN_TEST(test_matrix23_BrMatrix23Post);
RUN_TEST(test_matrix23_BrMatrix23PreRotate);
RUN_TEST(test_matrix23_BrMatrix23PostRotate);
RUN_TEST(test_matrix23_BrMatrix23PreTranslate);
RUN_TEST(test_matrix23_BrMatrix23PostTranslate);
RUN_TEST(test_matrix23_BrMatrix23PreScale);
RUN_TEST(test_matrix23_BrMatrix23PostScale);
RUN_TEST(test_matrix23_BrMatrix23PreShearX);
RUN_TEST(test_matrix23_BrMatrix23PostShearX);
RUN_TEST(test_matrix23_BrMatrix23PreShearY);
RUN_TEST(test_matrix23_BrMatrix23PostShearY);
}