From 9a913ac95be9493460da038672aa3043093f00bb Mon Sep 17 00:00:00 2001 From: Ben Visness Date: Fri, 21 May 2021 12:04:17 -0500 Subject: [PATCH] Expose NaNs in our tests oops --- test/HandmadeTest.h | 5 +++-- test/categories/QuaternionOps.h | 39 +++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/test/HandmadeTest.h b/test/HandmadeTest.h index c142e11..89428cf 100644 --- a/test/HandmadeTest.h +++ b/test/HandmadeTest.h @@ -58,6 +58,7 @@ #define HANDMADETEST_H #include +#include #include #include @@ -152,7 +153,7 @@ INITIALIZER(_HMT_COVERCASE_FUNCNAME_INIT(name)) { \ _HMT_CASE_START(); \ float actual = (_actual); \ float diff = actual - (_expected); \ - if (diff < -FLT_EPSILON || FLT_EPSILON < diff) { \ + if (isnan(actual) || diff < -FLT_EPSILON || FLT_EPSILON < diff) { \ _HMT_CASE_FAIL(); \ printf("Expected %f, got %f", (_expected), actual); \ } \ @@ -162,7 +163,7 @@ INITIALIZER(_HMT_COVERCASE_FUNCNAME_INIT(name)) { \ _HMT_CASE_START(); \ float actual = (_actual); \ float diff = actual - (_expected); \ - if (diff < -(_epsilon) || (_epsilon) < diff) { \ + if (isnan(actual) || diff < -(_epsilon) || (_epsilon) < diff) { \ _HMT_CASE_FAIL(); \ printf("Expected %f, got %f", (_expected), actual); \ } \ diff --git a/test/categories/QuaternionOps.h b/test/categories/QuaternionOps.h index a373106..235c783 100644 --- a/test/categories/QuaternionOps.h +++ b/test/categories/QuaternionOps.h @@ -66,14 +66,39 @@ TEST(QuaternionOps, NLerp) TEST(QuaternionOps, Slerp) { - hmm_quaternion from = HMM_Quaternion(0.0f, 0.0f, 0.0f, 1.0f); - hmm_quaternion to = HMM_Quaternion(0.5f, 0.5f, -0.5f, 0.5f); + // Normal operation + { + hmm_quaternion from = HMM_Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + hmm_quaternion to = HMM_Quaternion(0.5f, 0.5f, -0.5f, 0.5f); - hmm_quaternion result = HMM_Slerp(from, 0.5f, to); - EXPECT_FLOAT_EQ(result.X, 0.28867513f); - EXPECT_FLOAT_EQ(result.Y, 0.28867513f); - EXPECT_FLOAT_EQ(result.Z, -0.28867513f); - EXPECT_FLOAT_EQ(result.W, 0.86602540f); + hmm_quaternion result = HMM_Slerp(from, 0.5f, to); + EXPECT_FLOAT_EQ(result.X, 0.28867513f); + EXPECT_FLOAT_EQ(result.Y, 0.28867513f); + EXPECT_FLOAT_EQ(result.Z, -0.28867513f); + EXPECT_FLOAT_EQ(result.W, 0.86602540f); + } + + // Same quat twice + { + hmm_quaternion q = HMM_Quaternion(0.5f, 0.5f, 0.5f, 1.0f); + + hmm_quaternion result = HMM_Slerp(q, 0.5f, q); + EXPECT_FLOAT_EQ(result.X, 0.5f); + EXPECT_FLOAT_EQ(result.Y, 0.5f); + EXPECT_FLOAT_EQ(result.Z, 0.5f); + EXPECT_FLOAT_EQ(result.W, 1.0f); + } + + // Identity quat twice + { + hmm_quaternion q = HMM_Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + hmm_quaternion result = HMM_Slerp(q, 0.5f, q); + EXPECT_FLOAT_EQ(result.X, 0.0f); + EXPECT_FLOAT_EQ(result.Y, 1.0f); + EXPECT_FLOAT_EQ(result.Z, 0.0f); + EXPECT_FLOAT_EQ(result.W, 1.0f); + } } TEST(QuaternionOps, QuatToMat4)