|
|
@@ -11,6 +11,7 @@
|
|
|
//#include <boost/date_time/posix_time/posix_time.hpp>
|
|
|
//#include <boost/thread/thread.hpp>
|
|
|
#include <glm/glm.hpp>
|
|
|
+#include <glm/gtc/constants.hpp>
|
|
|
#include <glm/gtc/epsilon.hpp>
|
|
|
#include <cstdio>
|
|
|
|
|
|
@@ -148,26 +149,94 @@ int test_floatBitsToUint()
|
|
|
return Error;
|
|
|
}
|
|
|
|
|
|
-int test_mix()
|
|
|
+namespace test_mix
|
|
|
{
|
|
|
- int Error = 0;
|
|
|
-
|
|
|
- {
|
|
|
- float A = glm::mix(0.f, 1.f, true);
|
|
|
- Error += A == 1.f ? 0 : 1;
|
|
|
- float B = glm::mix(0.f, 1.f, false);
|
|
|
- Error += B == 0.f ? 0 : 1;
|
|
|
- }
|
|
|
-
|
|
|
- {
|
|
|
- float A = glm::mix(0.f, 1.f, 1.f);
|
|
|
- Error += A == 1.f ? 0 : 1;
|
|
|
- float B = glm::mix(0.f, 1.f, 0.f);
|
|
|
- Error += B == 0.f ? 0 : 1;
|
|
|
- }
|
|
|
-
|
|
|
- return Error;
|
|
|
-}
|
|
|
+ template <typename T, typename B>
|
|
|
+ struct test
|
|
|
+ {
|
|
|
+ T x;
|
|
|
+ T y;
|
|
|
+ B a;
|
|
|
+ T Result;
|
|
|
+ };
|
|
|
+
|
|
|
+ test<float, bool> TestBool[] =
|
|
|
+ {
|
|
|
+ {0.0f, 1.0f, false, 0.0f},
|
|
|
+ {0.0f, 1.0f, true, 1.0f},
|
|
|
+ {-1.0f, 1.0f, false, -1.0f},
|
|
|
+ {-1.0f, 1.0f, true, 1.0f}
|
|
|
+ };
|
|
|
+
|
|
|
+ test<float, bool> TestFloat[] =
|
|
|
+ {
|
|
|
+ {0.0f, 1.0f, 0.0f, 0.0f},
|
|
|
+ {0.0f, 1.0f, 1.0f, 1.0f},
|
|
|
+ {-1.0f, 1.0f, 0.0f, -1.0f},
|
|
|
+ {-1.0f, 1.0f, 1.0f, 1.0f}
|
|
|
+ };
|
|
|
+
|
|
|
+ test<glm::vec2, bool> TestVec2Bool[] =
|
|
|
+ {
|
|
|
+ {glm::vec2(0.0f), glm::vec2(1.0f), false, glm::vec2(0.0f)},
|
|
|
+ {glm::vec2(0.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)},
|
|
|
+ {glm::vec2(-1.0f), glm::vec2(1.0f), false, glm::vec2(-1.0f)},
|
|
|
+ {glm::vec2(-1.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)}
|
|
|
+ };
|
|
|
+
|
|
|
+ test<glm::vec2, glm::bvec2> TestBVec2[] =
|
|
|
+ {
|
|
|
+ {glm::vec2(0.0f), glm::vec2(1.0f), glm::bvec2(false), glm::vec2(0.0f)},
|
|
|
+ {glm::vec2(0.0f), glm::vec2(1.0f), glm::bvec2(true), glm::vec2(1.0f)},
|
|
|
+ {glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(false), glm::vec2(-1.0f)},
|
|
|
+ {glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(true), glm::vec2(1.0f)}
|
|
|
+ };
|
|
|
+
|
|
|
+ int run()
|
|
|
+ {
|
|
|
+ int Error = 0;
|
|
|
+
|
|
|
+ // Float with bool
|
|
|
+ {
|
|
|
+ for(std::size_t i = 0; i < sizeof(TestBool) / sizeof(test<float, bool>); ++i)
|
|
|
+ {
|
|
|
+ float Result = glm::mix(TestBool[i].x, TestBool[i].y, TestBool[i].a);
|
|
|
+ Error += glm::epsilonEqual(Result, TestBool[i].Result, glm::epsilon<float>()) ? 0 : 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Float with float
|
|
|
+ {
|
|
|
+ for(std::size_t i = 0; i < sizeof(TestFloat) / sizeof(test<float, float>); ++i)
|
|
|
+ {
|
|
|
+ float Result = glm::mix(TestFloat[i].x, TestFloat[i].y, TestFloat[i].a);
|
|
|
+ Error += glm::epsilonEqual(Result, TestFloat[i].Result, glm::epsilon<float>()) ? 0 : 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // vec2 with bool
|
|
|
+ {
|
|
|
+ for(std::size_t i = 0; i < sizeof(TestBVec2) / sizeof(test<glm::vec2, bool>); ++i)
|
|
|
+ {
|
|
|
+ glm::vec2 Result = glm::mix(TestBVec2[i].x, TestBVec2[i].y, TestBVec2[i].a);
|
|
|
+ Error += glm::epsilonEqual(Result.x, TestBVec2[i].Result.x, glm::epsilon<float>()) ? 0 : 1;
|
|
|
+ Error += glm::epsilonEqual(Result.y, TestBVec2[i].Result.y, glm::epsilon<float>()) ? 0 : 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // vec2 with bvec2
|
|
|
+ {
|
|
|
+ for(std::size_t i = 0; i < sizeof(TestBVec2) / sizeof(test<glm::vec2, glm::bvec2>); ++i)
|
|
|
+ {
|
|
|
+ glm::vec2 Result = glm::mix(TestBVec2[i].x, TestBVec2[i].y, TestBVec2[i].a);
|
|
|
+ Error += glm::epsilonEqual(Result.x, TestBVec2[i].Result.x, glm::epsilon<float>()) ? 0 : 1;
|
|
|
+ Error += glm::epsilonEqual(Result.y, TestBVec2[i].Result.y, glm::epsilon<float>()) ? 0 : 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return Error;
|
|
|
+ }
|
|
|
+}//namespace test_mix
|
|
|
|
|
|
int test_round()
|
|
|
{
|
|
|
@@ -414,7 +483,7 @@ int main()
|
|
|
Error += test_modf();
|
|
|
Error += test_floatBitsToInt();
|
|
|
Error += test_floatBitsToUint();
|
|
|
- Error += test_mix();
|
|
|
+ Error += test_mix::run();
|
|
|
Error += test_round();
|
|
|
Error += test_roundEven();
|
|
|
Error += test_isnan();
|