Add tests for scalar math operations

This commit is contained in:
Ben Visness
2016-08-25 22:29:19 -05:00
parent 425fd9c11a
commit e07ee7357f

View File

@@ -5,6 +5,72 @@
#include "gtest/gtest.h"
TEST(ScalarMath, Trigonometry)
{
// We have to be a little looser with our equality constraint
// because of floating-point precision issues.
const float trigAbsError = 0.0001f;
EXPECT_NEAR(HMM_SinF(0.0f), 0.0f, trigAbsError);
EXPECT_NEAR(HMM_SinF(HMM_PI32 / 2), 1.0f, trigAbsError);
EXPECT_NEAR(HMM_SinF(HMM_PI32), 0.0f, trigAbsError);
EXPECT_NEAR(HMM_SinF(3 * HMM_PI32 / 2), -1.0f, trigAbsError);
EXPECT_NEAR(HMM_SinF(-HMM_PI32 / 2), -1.0f, trigAbsError);
EXPECT_NEAR(HMM_CosF(0.0f), 1.0f, trigAbsError);
EXPECT_NEAR(HMM_CosF(HMM_PI32 / 2), 0.0f, trigAbsError);
EXPECT_NEAR(HMM_CosF(HMM_PI32), -1.0f, trigAbsError);
EXPECT_NEAR(HMM_CosF(3 * HMM_PI32 / 2), 0.0f, trigAbsError);
EXPECT_NEAR(HMM_CosF(-HMM_PI32), -1.0f, trigAbsError);
EXPECT_NEAR(HMM_TanF(0.0f), 0.0f, trigAbsError);
EXPECT_NEAR(HMM_TanF(HMM_PI32 / 4), 1.0f, trigAbsError);
EXPECT_NEAR(HMM_TanF(3 * HMM_PI32 / 4), -1.0f, trigAbsError);
EXPECT_NEAR(HMM_TanF(HMM_PI32), 0.0f, trigAbsError);
EXPECT_NEAR(HMM_TanF(-HMM_PI32 / 4), -1.0f, trigAbsError);
// This isn't the most rigorous because we're really just sanity-
// checking that things work by default.
}
TEST(ScalarMath, SqrtF)
{
EXPECT_FLOAT_EQ(HMM_SqrtF(16.0f), 4.0f);
}
TEST(ScalarMath, ToRadians)
{
EXPECT_FLOAT_EQ(HMM_ToRadians(0.0f), 0);
EXPECT_FLOAT_EQ(HMM_ToRadians(180.0f), HMM_PI32);
EXPECT_FLOAT_EQ(HMM_ToRadians(-180.0f), -HMM_PI32);
}
TEST(ScalarMath, SquareRoot)
{
// EXPECT_FLOAT_EQ(HMM_SquareRoot(16.0f), 4.0f);
FAIL() << "Bad header, function not defined. See commented line above.";
}
TEST(ScalarMath, FastInverseSquareRoot)
{
// EXPECT_FLOAT_EQ(HMM_FastInverseSquareRoot(4.0f), 0.5f); // linker error, no function body
FAIL() << "Bad header, function not defined. See commented line above.";
}
TEST(ScalarMath, Power)
{
EXPECT_FLOAT_EQ(HMM_Power(2.0f, 0), 1.0f);
EXPECT_FLOAT_EQ(HMM_Power(2.0f, 4), 16.0f);
EXPECT_FLOAT_EQ(HMM_Power(2.0f, -2), 0.25f);
}
TEST(ScalarMath, Clamp)
{
EXPECT_FLOAT_EQ(HMM_Clamp(-2.0f, 0.0f, 2.0f), 0.0f);
EXPECT_FLOAT_EQ(HMM_Clamp(-2.0f, -3.0f, 2.0f), -2.0f);
EXPECT_FLOAT_EQ(HMM_Clamp(-2.0f, 3.0f, 2.0f), 2.0f);
}
TEST(Initialization, Vectors)
{
//