mirror of
https://github.com/HandmadeMath/HandmadeMath.git
synced 2025-09-05 17:58:14 +00:00

Remove V2I, V3I, V4I (and style changes) Totally useless. Add update tool, update docs Tweak docs Create ci.yml Big style pass Maybe fix CI on Windows Report coverage errors Fix a missing coverage case Try setting up MSVC another way Update readmes Fix remaining use of the name UpdateTool
322 lines
8.7 KiB
C
322 lines
8.7 KiB
C
#include "../HandmadeTest.h"
|
|
|
|
TEST(Initialization, Vectors)
|
|
{
|
|
//
|
|
// Test vec2
|
|
//
|
|
HMM_Vec2 v2 = HMM_V2(1.0f, 2.0f);
|
|
|
|
EXPECT_FLOAT_EQ(v2.X, 1.0f);
|
|
EXPECT_FLOAT_EQ(v2.Y, 2.0f);
|
|
EXPECT_FLOAT_EQ(v2.U, 1.0f);
|
|
EXPECT_FLOAT_EQ(v2.V, 2.0f);
|
|
EXPECT_FLOAT_EQ(v2.Left, 1.0f);
|
|
EXPECT_FLOAT_EQ(v2.Right, 2.0f);
|
|
EXPECT_FLOAT_EQ(v2.Width, 1.0f);
|
|
EXPECT_FLOAT_EQ(v2.Height, 2.0f);
|
|
EXPECT_FLOAT_EQ(v2.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v2.Elements[1], 2.0f);
|
|
#ifdef __cplusplus
|
|
EXPECT_FLOAT_EQ(v2[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v2[1], 2.0f);
|
|
#endif
|
|
|
|
//
|
|
// Test vec3
|
|
//
|
|
HMM_Vec3 v3 = HMM_V3(1.0f, 2.0f, 3.0f);
|
|
|
|
EXPECT_FLOAT_EQ(v3.X, 1.0f);
|
|
EXPECT_FLOAT_EQ(v3.Y, 2.0f);
|
|
EXPECT_FLOAT_EQ(v3.Z, 3.0f);
|
|
EXPECT_FLOAT_EQ(v3.U, 1.0f);
|
|
EXPECT_FLOAT_EQ(v3.V, 2.0f);
|
|
EXPECT_FLOAT_EQ(v3.W, 3.0f);
|
|
EXPECT_FLOAT_EQ(v3.R, 1.0f);
|
|
EXPECT_FLOAT_EQ(v3.G, 2.0f);
|
|
EXPECT_FLOAT_EQ(v3.B, 3.0f);
|
|
EXPECT_FLOAT_EQ(v3.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v3.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v3.Elements[2], 3.0f);
|
|
EXPECT_FLOAT_EQ(v3.XY.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v3.XY.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v3.YZ.Elements[0], 2.0f);
|
|
EXPECT_FLOAT_EQ(v3.YZ.Elements[1], 3.0f);
|
|
EXPECT_FLOAT_EQ(v3.UV.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v3.UV.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v3.VW.Elements[0], 2.0f);
|
|
EXPECT_FLOAT_EQ(v3.VW.Elements[1], 3.0f);
|
|
#ifdef __cplusplus
|
|
EXPECT_FLOAT_EQ(v3[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v3[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v3[2], 3.0f);
|
|
#endif
|
|
|
|
//
|
|
// Test vec4
|
|
//
|
|
HMM_Vec4 v4 = HMM_V4(1.0f, 2.0f, 3.0f, 4.0f);
|
|
HMM_Vec4 v4v = HMM_V4V(v3, 4.0f);
|
|
|
|
EXPECT_FLOAT_EQ(v4.X, 1.0f);
|
|
EXPECT_FLOAT_EQ(v4.Y, 2.0f);
|
|
EXPECT_FLOAT_EQ(v4.Z, 3.0f);
|
|
EXPECT_FLOAT_EQ(v4.W, 4.0f);
|
|
EXPECT_FLOAT_EQ(v4.R, 1.0f);
|
|
EXPECT_FLOAT_EQ(v4.G, 2.0f);
|
|
EXPECT_FLOAT_EQ(v4.B, 3.0f);
|
|
EXPECT_FLOAT_EQ(v4.A, 4.0f);
|
|
EXPECT_FLOAT_EQ(v4.XY.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4.XY.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4.YZ.Elements[0], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4.YZ.Elements[1], 3.0f);
|
|
EXPECT_FLOAT_EQ(v4.ZW.Elements[0], 3.0f);
|
|
EXPECT_FLOAT_EQ(v4.ZW.Elements[1], 4.0f);
|
|
EXPECT_FLOAT_EQ(v4.XY.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4.XY.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4.XYZ.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4.XYZ.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4.XYZ.Elements[2], 3.0f);
|
|
EXPECT_FLOAT_EQ(v4.RGB.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4.RGB.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4.RGB.Elements[2], 3.0f);
|
|
#ifdef __cplusplus
|
|
EXPECT_FLOAT_EQ(v4[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4[2], 3.0f);
|
|
EXPECT_FLOAT_EQ(v4[3], 4.0f);
|
|
#endif
|
|
|
|
EXPECT_FLOAT_EQ(v4v.X, 1.0f);
|
|
EXPECT_FLOAT_EQ(v4v.Y, 2.0f);
|
|
EXPECT_FLOAT_EQ(v4v.Z, 3.0f);
|
|
EXPECT_FLOAT_EQ(v4v.W, 4.0f);
|
|
EXPECT_FLOAT_EQ(v4v.R, 1.0f);
|
|
EXPECT_FLOAT_EQ(v4v.G, 2.0f);
|
|
EXPECT_FLOAT_EQ(v4v.B, 3.0f);
|
|
EXPECT_FLOAT_EQ(v4v.A, 4.0f);
|
|
EXPECT_FLOAT_EQ(v4v.XY.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4v.XY.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4v.YZ.Elements[0], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4v.YZ.Elements[1], 3.0f);
|
|
EXPECT_FLOAT_EQ(v4v.ZW.Elements[0], 3.0f);
|
|
EXPECT_FLOAT_EQ(v4v.ZW.Elements[1], 4.0f);
|
|
EXPECT_FLOAT_EQ(v4v.XY.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4v.XY.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4v.XYZ.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4v.XYZ.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4v.XYZ.Elements[2], 3.0f);
|
|
EXPECT_FLOAT_EQ(v4v.RGB.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4v.RGB.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4v.RGB.Elements[2], 3.0f);
|
|
#ifdef __cplusplus
|
|
EXPECT_FLOAT_EQ(v4v[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(v4v[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(v4v[2], 3.0f);
|
|
EXPECT_FLOAT_EQ(v4v[3], 4.0f);
|
|
#endif
|
|
}
|
|
|
|
TEST(Initialization, MatrixEmpty)
|
|
{
|
|
//
|
|
// Test mat2
|
|
//
|
|
HMM_Mat2 m2 = HMM_M2();
|
|
for (int Column = 0; Column < 2; ++Column)
|
|
{
|
|
for (int Row = 0; Row < 2; ++Row)
|
|
{
|
|
EXPECT_FLOAT_EQ(m2.Elements[Column][Row], 0.0f);
|
|
#ifdef __cplusplus
|
|
EXPECT_FLOAT_EQ(m2[Column][Row], 0.0f);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
//
|
|
// Test mat3
|
|
//
|
|
HMM_Mat3 m3 = HMM_M3();
|
|
for (int Column = 0; Column < 3; ++Column)
|
|
{
|
|
for (int Row = 0; Row < 3; ++Row)
|
|
{
|
|
EXPECT_FLOAT_EQ(m3.Elements[Column][Row], 0.0f);
|
|
#ifdef __cplusplus
|
|
EXPECT_FLOAT_EQ(m3[Column][Row], 0.0f);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
//
|
|
// Test mat4
|
|
//
|
|
HMM_Mat4 m4 = HMM_M4();
|
|
for (int Column = 0; Column < 4; ++Column)
|
|
{
|
|
for (int Row = 0; Row < 4; ++Row)
|
|
{
|
|
EXPECT_FLOAT_EQ(m4.Elements[Column][Row], 0.0f);
|
|
#ifdef __cplusplus
|
|
EXPECT_FLOAT_EQ(m4[Column][Row], 0.0f);
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(Initialization, MatrixDiagonal)
|
|
{
|
|
//
|
|
// Test mat2
|
|
//
|
|
HMM_Mat2 m2d = HMM_M2D(1.0f);
|
|
for (int Column = 0; Column < 2; ++Column)
|
|
{
|
|
for (int Row = 0; Row < 2; ++Row)
|
|
{
|
|
if (Column == Row) {
|
|
EXPECT_FLOAT_EQ(m2d.Elements[Column][Row], 1.0f);
|
|
} else {
|
|
EXPECT_FLOAT_EQ(m2d.Elements[Column][Row], 0.0f);
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Test mat3
|
|
//
|
|
HMM_Mat3 m3d = HMM_M3D(1.0f);
|
|
for (int Column = 0; Column < 3; ++Column)
|
|
{
|
|
for (int Row = 0; Row < 3; ++Row)
|
|
{
|
|
if (Column == Row) {
|
|
EXPECT_FLOAT_EQ(m3d.Elements[Column][Row], 1.0f);
|
|
} else {
|
|
EXPECT_FLOAT_EQ(m3d.Elements[Column][Row], 0.0f);
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Test mat4
|
|
//
|
|
HMM_Mat4 m4d = HMM_M4D(1.0f);
|
|
for (int Column = 0; Column < 4; ++Column)
|
|
{
|
|
for (int Row = 0; Row < 4; ++Row)
|
|
{
|
|
if (Column == Row) {
|
|
EXPECT_FLOAT_EQ(m4d.Elements[Column][Row], 1.0f);
|
|
} else {
|
|
EXPECT_FLOAT_EQ(m4d.Elements[Column][Row], 0.0f);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
TEST(Initialization, Quaternion)
|
|
{
|
|
HMM_Quat q = HMM_Q(1.0f, 2.0f, 3.0f, 4.0f);
|
|
|
|
EXPECT_FLOAT_EQ(q.X, 1.0f);
|
|
EXPECT_FLOAT_EQ(q.Y, 2.0f);
|
|
EXPECT_FLOAT_EQ(q.Z, 3.0f);
|
|
EXPECT_FLOAT_EQ(q.W, 4.0f);
|
|
|
|
EXPECT_FLOAT_EQ(q.Elements[0], 1.0f);
|
|
EXPECT_FLOAT_EQ(q.Elements[1], 2.0f);
|
|
EXPECT_FLOAT_EQ(q.Elements[2], 3.0f);
|
|
EXPECT_FLOAT_EQ(q.Elements[3], 4.0f);
|
|
|
|
HMM_Vec4 v = HMM_V4(1.0f, 2.0f, 3.0f, 4.0f);
|
|
HMM_Quat qv = HMM_QV4(v);
|
|
|
|
EXPECT_FLOAT_EQ(qv.X, 1.0f);
|
|
EXPECT_FLOAT_EQ(qv.Y, 2.0f);
|
|
EXPECT_FLOAT_EQ(qv.Z, 3.0f);
|
|
EXPECT_FLOAT_EQ(qv.W, 4.0f);
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
TEST(Initialization, MatrixOverloads)
|
|
{
|
|
// Operator overloads for matrix columns must allow mutation.
|
|
|
|
//
|
|
// Test mat2
|
|
//
|
|
HMM_Mat2 m2 = {0};
|
|
m2[0][0] = 1.0f;
|
|
m2[0][1] = 2.0f;
|
|
m2[1][0] = 3.0f;
|
|
m2[1][1] = 4.0f;
|
|
EXPECT_FLOAT_EQ(m2.Elements[0][0], 1.0f);
|
|
EXPECT_FLOAT_EQ(m2.Elements[0][1], 2.0f);
|
|
EXPECT_FLOAT_EQ(m2.Elements[1][0], 3.0f);
|
|
EXPECT_FLOAT_EQ(m2.Elements[1][1], 4.0f);
|
|
|
|
//
|
|
// Test mat3
|
|
//
|
|
HMM_Mat3 m3 = {0};
|
|
m3[0][0] = 1.0f;
|
|
m3[0][1] = 2.0f;
|
|
m3[0][2] = 3.0f;
|
|
m3[1][0] = 4.0f;
|
|
m3[1][1] = 5.0f;
|
|
m3[1][2] = 6.0f;
|
|
m3[2][0] = 7.0f;
|
|
m3[2][1] = 8.0f;
|
|
m3[2][2] = 9.0f;
|
|
EXPECT_FLOAT_EQ(m3.Elements[0][0], 1.0f);
|
|
EXPECT_FLOAT_EQ(m3.Elements[0][1], 2.0f);
|
|
EXPECT_FLOAT_EQ(m3.Elements[0][2], 3.0f);
|
|
EXPECT_FLOAT_EQ(m3.Elements[1][0], 4.0f);
|
|
EXPECT_FLOAT_EQ(m3.Elements[1][1], 5.0f);
|
|
EXPECT_FLOAT_EQ(m3.Elements[1][2], 6.0f);
|
|
EXPECT_FLOAT_EQ(m3.Elements[2][0], 7.0f);
|
|
EXPECT_FLOAT_EQ(m3.Elements[2][1], 8.0f);
|
|
EXPECT_FLOAT_EQ(m3.Elements[2][2], 9.0f);
|
|
|
|
//
|
|
// Test mat4
|
|
//
|
|
HMM_Mat4 m4 = {0};
|
|
m4[0][0] = 1.0f;
|
|
m4[0][1] = 2.0f;
|
|
m4[0][2] = 3.0f;
|
|
m4[0][3] = 4.0f;
|
|
m4[1][0] = 5.0f;
|
|
m4[1][1] = 6.0f;
|
|
m4[1][2] = 7.0f;
|
|
m4[1][3] = 8.0f;
|
|
m4[2][0] = 9.0f;
|
|
m4[2][1] = 10.0f;
|
|
m4[2][2] = 11.0f;
|
|
m4[2][3] = 12.0f;
|
|
m4[3][0] = 13.0f;
|
|
m4[3][1] = 14.0f;
|
|
m4[3][2] = 15.0f;
|
|
m4[3][3] = 16.0f;
|
|
EXPECT_FLOAT_EQ(m4.Elements[0][0], 1.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[0][1], 2.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[0][2], 3.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[0][3], 4.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[1][0], 5.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[1][1], 6.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[1][2], 7.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[1][3], 8.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[2][0], 9.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[2][1], 10.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[2][2], 11.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[2][3], 12.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[3][0], 13.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[3][1], 14.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[3][2], 15.0f);
|
|
EXPECT_FLOAT_EQ(m4.Elements[3][3], 16.0f);
|
|
}
|
|
#endif
|