Add tests for transformations

This commit is contained in:
Ben Visness
2016-08-28 01:44:05 -05:00
parent 71dc1f4dee
commit 7f7fc4e0d6

View File

@@ -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);
}