diff --git a/test/hmm_test.cpp b/test/hmm_test.cpp index 05af7d6..7dc4360 100644 --- a/test/hmm_test.cpp +++ b/test/hmm_test.cpp @@ -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) { //