diff --git a/test/hmm_test.cpp b/test/hmm_test.cpp index 505c0e3..013cee1 100644 --- a/test/hmm_test.cpp +++ b/test/hmm_test.cpp @@ -1235,3 +1235,55 @@ TEST(Division, Mat4Scalar) EXPECT_FLOAT_EQ(m4.Elements[3][2], 7.5f); EXPECT_FLOAT_EQ(m4.Elements[3][3], 8.0f); } + +TEST(Transformations, Translate) +{ + hmm_mat4 translate = HMM_Translate(HMM_Vec3(1.0f, -3.0f, 6.0f)); + + hmm_vec3 original = HMM_Vec3(1.0f, 2.0f, 3.0f); + hmm_vec4 translated = translate * HMM_Vec4v(original, 1); + + EXPECT_FLOAT_EQ(translated.X, 2.0f); + EXPECT_FLOAT_EQ(translated.Y, -1.0f); + EXPECT_FLOAT_EQ(translated.Z, 9.0f); + EXPECT_FLOAT_EQ(translated.W, 1.0f); +} + +TEST(Transformations, Rotate) +{ + hmm_vec3 original = HMM_Vec3(1.0f, 1.0f, 1.0f); + + hmm_mat4 rotateX = HMM_Rotate(90, HMM_Vec3(1, 0, 0)); + hmm_vec4 rotatedX = rotateX * HMM_Vec4v(original, 1); + EXPECT_FLOAT_EQ(rotatedX.X, 1.0f); + EXPECT_FLOAT_EQ(rotatedX.Y, 1.0f); + EXPECT_FLOAT_EQ(rotatedX.Z, -1.0f); + EXPECT_FLOAT_EQ(rotatedX.W, 1.0f); + + hmm_mat4 rotateY = HMM_Rotate(90, HMM_Vec3(0, 1, 0)); + hmm_vec4 rotatedY = rotateY * HMM_Vec4v(original, 1); + EXPECT_FLOAT_EQ(rotatedY.X, -1.0f); + EXPECT_FLOAT_EQ(rotatedY.Y, 1.0f); + EXPECT_FLOAT_EQ(rotatedY.Z, 1.0f); + EXPECT_FLOAT_EQ(rotatedY.W, 1.0f); + + hmm_mat4 rotateZ = HMM_Rotate(90, HMM_Vec3(0, 0, 1)); + hmm_vec4 rotatedZ = rotateZ * HMM_Vec4v(original, 1); + EXPECT_FLOAT_EQ(rotatedZ.X, 1.0f); + EXPECT_FLOAT_EQ(rotatedZ.Y, -1.0f); + EXPECT_FLOAT_EQ(rotatedZ.Z, 1.0f); + EXPECT_FLOAT_EQ(rotatedZ.W, 1.0f); +} + +TEST(Transformations, Scale) +{ + hmm_mat4 scale = HMM_Scale(HMM_Vec3(2.0f, -3.0f, 0.5f)); + + hmm_vec3 original = HMM_Vec3(1.0f, 2.0f, 3.0f); + hmm_vec4 scaled = scale * HMM_Vec4v(original, 1); + + EXPECT_FLOAT_EQ(scaled.X, 2.0f); + EXPECT_FLOAT_EQ(scaled.Y, -6.0f); + EXPECT_FLOAT_EQ(scaled.Z, 1.5f); + EXPECT_FLOAT_EQ(scaled.W, 1.0f); +}