aboutsummaryrefslogtreecommitdiff
path: root/3rdparty/glm/source/test/gtx/gtx_integer.cpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-05-22 01:08:24 -0700
committerrtk0c <[email protected]>2022-05-22 01:08:24 -0700
commitc568f0a8c9f0aef00c770b494ee1ff3a89ab48de (patch)
tree1dc1e69d796e635cdac6a4ef7e6d3a90ab1423c2 /3rdparty/glm/source/test/gtx/gtx_integer.cpp
parenta5db6bd3cc4af5233010ff44d0572ddf98b43c9d (diff)
Changeset: 35 Fix missing sources in git submodules after migration to PlasticSCM
Diffstat (limited to '3rdparty/glm/source/test/gtx/gtx_integer.cpp')
-rw-r--r--3rdparty/glm/source/test/gtx/gtx_integer.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/3rdparty/glm/source/test/gtx/gtx_integer.cpp b/3rdparty/glm/source/test/gtx/gtx_integer.cpp
new file mode 100644
index 0000000..4c4225d
--- /dev/null
+++ b/3rdparty/glm/source/test/gtx/gtx_integer.cpp
@@ -0,0 +1,108 @@
+#define GLM_ENABLE_EXPERIMENTAL
+#include <glm/exponential.hpp>
+#include <glm/gtc/epsilon.hpp>
+#include <glm/gtx/integer.hpp>
+#include <cstdio>
+/*
+int test_floor_log2()
+{
+ int Error = 0;
+
+ for(std::size_t i = 1; i < 1000000; ++i)
+ {
+ glm::uint A = glm::floor_log2(glm::uint(i));
+ glm::uint B = glm::uint(glm::floor(glm::log2(double(i)))); // Will fail with float, lack of accuracy
+
+ Error += A == B ? 0 : 1;
+ assert(!Error);
+ }
+
+ return Error;
+}
+*/
+int test_log2()
+{
+ int Error = 0;
+
+ for(std::size_t i = 1; i < 24; ++i)
+ {
+ glm::uint A = glm::log2(glm::uint(1 << i));
+ glm::uint B = glm::uint(glm::log2(double(1 << i)));
+
+ //Error += glm::equalEpsilon(double(A), B, 1.0) ? 0 : 1;
+ Error += glm::abs(double(A) - B) <= 24 ? 0 : 1;
+ assert(!Error);
+
+ std::printf("Log2(%d) error A=%d, B=%d\n", 1 << i, A, B);
+ }
+
+ std::printf("log2 error=%d\n", Error);
+
+ return Error;
+}
+
+int test_nlz()
+{
+ int Error = 0;
+
+ for(glm::uint i = 1; i < glm::uint(33); ++i)
+ Error += glm::nlz(i) == glm::uint(31u) - glm::findMSB(i) ? 0 : 1;
+ //printf("%d, %d\n", glm::nlz(i), 31u - glm::findMSB(i));
+
+ return Error;
+}
+
+int test_pow_uint()
+{
+ int Error = 0;
+
+ glm::uint const p0 = glm::pow(2u, 0u);
+ Error += p0 == 1u ? 0 : 1;
+
+ glm::uint const p1 = glm::pow(2u, 1u);
+ Error += p1 == 2u ? 0 : 1;
+
+ glm::uint const p2 = glm::pow(2u, 2u);
+ Error += p2 == 4u ? 0 : 1;
+
+ return Error;
+}
+
+int test_pow_int()
+{
+ int Error = 0;
+
+ int const p0 = glm::pow(2, 0u);
+ Error += p0 == 1 ? 0 : 1;
+
+ int const p1 = glm::pow(2, 1u);
+ Error += p1 == 2 ? 0 : 1;
+
+ int const p2 = glm::pow(2, 2u);
+ Error += p2 == 4 ? 0 : 1;
+
+ int const p0n = glm::pow(-2, 0u);
+ Error += p0n == -1 ? 0 : 1;
+
+ int const p1n = glm::pow(-2, 1u);
+ Error += p1n == -2 ? 0 : 1;
+
+ int const p2n = glm::pow(-2, 2u);
+ Error += p2n == 4 ? 0 : 1;
+
+ return Error;
+}
+
+int main()
+{
+ int Error = 0;
+
+ Error += test_nlz();
+// Error += test_floor_log2();
+ Error += test_log2();
+ Error += test_pow_uint();
+ Error += test_pow_int();
+
+ return Error;
+}
+