From 5bfd97756ad5c51e6a810d67ae69d054c7b38875 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 9 Oct 2022 10:52:23 +0200 Subject: a --- test/app.hpp | 1 + test/const-math.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test/main.cpp | 2 ++ 3 files changed, 75 insertions(+) create mode 100644 test/const-math.cpp (limited to 'test') diff --git a/test/app.hpp b/test/app.hpp index 44fbed11..a7bb7d8b 100644 --- a/test/app.hpp +++ b/test/app.hpp @@ -9,5 +9,6 @@ struct app final : Platform::WindowlessWglApplication // NOLINT(cppcoreguideline int exec() override; static bool test_json(); static bool test_tile_iter(); + static bool test_const_math(); }; } // namespace Magnum::Examples diff --git a/test/const-math.cpp b/test/const-math.cpp new file mode 100644 index 00000000..3f125a1f --- /dev/null +++ b/test/const-math.cpp @@ -0,0 +1,72 @@ +#include "app.hpp" +#include "compat/assert.hpp" +#include +#include +#include +#include +#include + +#ifdef __GNUG__ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + +using namespace Magnum; +using Magnum::Math::Vector; + +template +static constexpr void test_float2() +{ + const vec a{(f)1, (f)2}, b{(f)2, (f)3}; + + ASSERT(a[0] == (f)1 && a[1] == (f)2); + ASSERT(a + b == vec{(f)3, (f)5}); + ASSERT(a - b == vec{(f)-1, (f)-1}); + ASSERT(a * b == vec{(f)2, (f)6}); + ASSERT(b / a == vec{(f)2, (f)1.5}); + ASSERT(b.product() == (f)6); + ASSERT(b.sum() == (f)5); +} + +template +static constexpr void test_int() +{ + using I = typename ivec::Type; + constexpr auto vec = [](auto x, auto y) { return ivec{(I)x, (I)y}; }; + const auto a = vec(3, 5), b = vec(11, 7); + + ASSERT(a[0] == 3 && a[1] == 5); + ASSERT(a + b == vec(14,12)); + ASSERT(b - a == vec(8, 2)); + ASSERT(b % a == vec(2, 2)); + ASSERT(b / a == vec(3, 1)); + ASSERT(a.product() == 15); + ASSERT(a.sum() == 8); +} + +static constexpr void* compile_tests() +{ + test_float2, float>(); + test_float2, double>(); + test_float2(); + + test_int>(); + test_int>(); + test_int>(); + + return nullptr; +} + +namespace Magnum::Examples { + +bool app::test_const_math() +{ + static_assert(compile_tests() == nullptr); + return true; +} + +} // namespace Magnum::Examples + +#ifdef __GNUG__ +# pragma GCC diagnostic pop +#endif diff --git a/test/main.cpp b/test/main.cpp index 06a2e64d..6dfe1f85 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -1,4 +1,5 @@ #include "app.hpp" +#include "compat/assert.hpp" #include "loader.hpp" #include #include @@ -26,6 +27,7 @@ int app::exec() bool ret = true; ret &= test_json(); ret &= test_tile_iter(); + ret &= test_const_math(); return !ret; } -- cgit v1.2.3