From 725356e6fe4529e0c47d6037544ecacbf9041ed3 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Wed, 10 Feb 2021 18:09:22 +0700 Subject: [PATCH] CI: fix clang compilation --- untests/vmath_ext_tests.cpp | 153 +++++++++++++++++--------------- untests/vmath_mat_fun_tests.cpp | 12 +-- untests/vmath_tests.hpp | 42 +++------ 3 files changed, 94 insertions(+), 113 deletions(-) diff --git a/untests/vmath_ext_tests.cpp b/untests/vmath_ext_tests.cpp index 683ed86..c89fdc6 100644 --- a/untests/vmath_ext_tests.cpp +++ b/untests/vmath_ext_tests.cpp @@ -22,41 +22,41 @@ namespace constexpr float pi_4 = radians(45.f); } -TEST_CASE("vmath/ext") { - SECTION("units") { - STATIC_REQUIRE(zero2 == int2(0,0)); - STATIC_REQUIRE(zero3 == int3(0,0,0)); - STATIC_REQUIRE(zero4 == int4(0,0,0,0)); +TEST_CASE("vmath/ext/units") { + STATIC_REQUIRE(zero2 == int2(0,0)); + STATIC_REQUIRE(zero3 == int3(0,0,0)); + STATIC_REQUIRE(zero4 == int4(0,0,0,0)); - STATIC_REQUIRE(unit2 == int2(1,1)); - STATIC_REQUIRE(unit2_x == int2(1,0)); - STATIC_REQUIRE(unit2_y == int2(0,1)); + STATIC_REQUIRE(unit2 == int2(1,1)); + STATIC_REQUIRE(unit2_x == int2(1,0)); + STATIC_REQUIRE(unit2_y == int2(0,1)); - STATIC_REQUIRE(unit3 == int3(1,1,1)); - STATIC_REQUIRE(unit3_x == int3(1,0,0)); - STATIC_REQUIRE(unit3_y == int3(0,1,0)); - STATIC_REQUIRE(unit3_z == int3(0,0,1)); + STATIC_REQUIRE(unit3 == int3(1,1,1)); + STATIC_REQUIRE(unit3_x == int3(1,0,0)); + STATIC_REQUIRE(unit3_y == int3(0,1,0)); + STATIC_REQUIRE(unit3_z == int3(0,0,1)); - STATIC_REQUIRE(unit4 == int4(1,1,1,1)); - STATIC_REQUIRE(unit4_x == int4(1,0,0,0)); - STATIC_REQUIRE(unit4_y == int4(0,1,0,0)); - STATIC_REQUIRE(unit4_z == int4(0,0,1,0)); - STATIC_REQUIRE(unit4_w == int4(0,0,0,1)); + STATIC_REQUIRE(unit4 == int4(1,1,1,1)); + STATIC_REQUIRE(unit4_x == int4(1,0,0,0)); + STATIC_REQUIRE(unit4_y == int4(0,1,0,0)); + STATIC_REQUIRE(unit4_z == int4(0,0,1,0)); + STATIC_REQUIRE(unit4_w == int4(0,0,0,1)); - STATIC_REQUIRE(zero2x2 == int2x2(0,0,0,0)); - STATIC_REQUIRE(zero3x3 == int3x3(0,0,0,0,0,0,0,0,0)); - STATIC_REQUIRE(zero4x4 == int4x4(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); + STATIC_REQUIRE(zero2x2 == int2x2(0,0,0,0)); + STATIC_REQUIRE(zero3x3 == int3x3(0,0,0,0,0,0,0,0,0)); + STATIC_REQUIRE(zero4x4 == int4x4(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); - STATIC_REQUIRE(unit2x2 == int2x2(1,1,1,1)); - STATIC_REQUIRE(unit3x3 == int3x3(1,1,1,1,1,1,1,1,1)); - STATIC_REQUIRE(unit4x4 == int4x4(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)); + STATIC_REQUIRE(unit2x2 == int2x2(1,1,1,1)); + STATIC_REQUIRE(unit3x3 == int3x3(1,1,1,1,1,1,1,1,1)); + STATIC_REQUIRE(unit4x4 == int4x4(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)); - STATIC_REQUIRE(identity2x2 == int2x2()); - STATIC_REQUIRE(identity3x3 == int3x3()); - STATIC_REQUIRE(identity4x4 == int4x4()); - } + STATIC_REQUIRE(identity2x2 == int2x2()); + STATIC_REQUIRE(identity3x3 == int3x3()); + STATIC_REQUIRE(identity4x4 == int4x4()); +} - SECTION("vector hash") { +TEST_CASE("vmath/ext/hash") { + SECTION("vector") { REQUIRE(std::hash{}({1,2}) == std::hash{}({1,2})); REQUIRE_FALSE(std::hash{}({1,2}) == std::hash{}({2,1})); @@ -94,7 +94,7 @@ TEST_CASE("vmath/ext") { } } - SECTION("matrix hash") { + SECTION("matrix") { REQUIRE(std::hash{}({1,2,3,4}) == std::hash{}({1,2,3,4})); REQUIRE_FALSE(std::hash{}({1,2,3,4}) == std::hash{}({1,2,4,3})); @@ -126,7 +126,7 @@ TEST_CASE("vmath/ext") { } } - SECTION("quaternion hash") { + SECTION("quaternion") { REQUIRE(std::hash{}({1,2,3,4}) == std::hash{}({1,2,3,4})); REQUIRE_FALSE(std::hash{}({1,2,3,4}) == std::hash{}({3,2,1,4})); @@ -157,30 +157,29 @@ TEST_CASE("vmath/ext") { REQUIRE(s[qua(2,3,4,5)] == 5); } } +} +TEST_CASE("vmath/ext/cast") { SECTION("cast_to") { - { - constexpr auto i = cast_to(1.5f); - STATIC_REQUIRE(i == 1); - STATIC_REQUIRE(std::is_same_v); - } - { - constexpr auto v = cast_to(float2{1.5f}); - STATIC_REQUIRE(v == int2(1)); - STATIC_REQUIRE(std::is_same_v); - } - { - constexpr auto m = cast_to(float2x2{1.5f}); - STATIC_REQUIRE(m == int2x2(1)); - STATIC_REQUIRE(std::is_same_v); - } - { - constexpr auto v = cast_to(fqua{1.5f, 2.2f, 3.6f, 4.5f}); - STATIC_REQUIRE(v == qua(1,2,3,4)); - STATIC_REQUIRE(std::is_same_v); - } - } + constexpr auto i = cast_to(1.5f); + STATIC_REQUIRE(i == 1); + STATIC_REQUIRE(std::is_same_v); + constexpr auto v = cast_to(float2(1.5f)); + STATIC_REQUIRE(v == int2(1)); + STATIC_REQUIRE(std::is_same_v); + + constexpr auto m = cast_to(float2x2(1.5f)); + STATIC_REQUIRE(m == int2x2(1)); + STATIC_REQUIRE(std::is_same_v); + + constexpr auto q = cast_to(fqua(1.5f, 2.2f, 3.6f, 4.5f)); + STATIC_REQUIRE(q == qua(1,2,3,4)); + STATIC_REQUIRE(std::is_same_v); + } +} + +TEST_CASE("vmath/ext/access") { SECTION("component") { STATIC_REQUIRE(component(int2{1,2}, 0) == 1); STATIC_REQUIRE(component(int2{1,2}, 1) == 2); @@ -214,8 +213,10 @@ TEST_CASE("vmath/ext") { STATIC_REQUIRE(imag(qua{1,2,3,4}) == vec{1,2,3}); STATIC_REQUIRE(imag(qua{1,2,3,4}, {4,3,2}) == qua{4,3,2,4}); } +} - SECTION("matrix translate") { +TEST_CASE("vmath/ext/matrix_transform") { + SECTION("translate") { STATIC_REQUIRE(float3(2.f,3.f,1.f) * translate(float2{1.f,2.f}) == uapprox3(3.f,5.f,1.f)); STATIC_REQUIRE(float3(2.f,3.f,1.f) * translate(translate(float2{1.f,2.f}), float2{1.f,2.f}) == uapprox3(4.f,7.f,1.f)); @@ -223,7 +224,7 @@ TEST_CASE("vmath/ext") { STATIC_REQUIRE(float4(2.f,3.f,4.f,1.f) * translate(translate(float3{1.f,2.f,3.f}), float3{1.f,2.f,3.f}) == uapprox4(4.f,7.f,10.f,1.f)); } - SECTION("matrix rotate") { + SECTION("rotate") { REQUIRE(float4(0.f,1.f,0.f,1.f) * rotate_x(pi_2) == uapprox4(0.f,0.f,1.f,1.f)); REQUIRE(float4(0.f,0.f,1.f,1.f) * rotate_y(pi_2) == uapprox4(1.f,0.f,0.f,1.f)); REQUIRE(float4(1.f,0.f,0.f,1.f) * rotate_z(pi_2) == uapprox4(0.f,1.f,0.f,1.f)); @@ -243,7 +244,7 @@ TEST_CASE("vmath/ext") { REQUIRE(float4(2.f,3.f,4.f,1.f) * rotate(rotate(qrotate(pi_2,float3{0.f,0.f,1.f})),qrotate(pi_2,float3{0.f,0.f,1.f})) == uapprox4(-2.f,-3.f,4.f,1.f)); } - SECTION("matrix scale") { + SECTION("scale") { STATIC_REQUIRE(float3(2.f,3.f,1.f) * scale(float2{2.f,3.f}) == uapprox3(4.f,9.f,1.f)); STATIC_REQUIRE(float4(2.f,3.f,4.f,1.f) * scale(float3{2.f,3.f,4.f}) == uapprox4(4.f,9.f,16.f,1.f)); STATIC_REQUIRE(float4(2.f,3.f,4.f,1.f) * scale(float3{2.f,3.f,4.f}) == uapprox4(4.f,9.f,16.f,1.f)); @@ -253,7 +254,7 @@ TEST_CASE("vmath/ext") { STATIC_REQUIRE(float4(2.f,3.f,4.f,1.f) * scale(scale(float3{2.f,2.f,2.f}), float3{2.f,3.f,4.f}) == uapprox4(8.f,18.f,32.f,1.f)); } - SECTION("matrix shear") { + SECTION("shear") { STATIC_REQUIRE(float3(2.f,3.f,1.f) * shear_x(0.f) == uapprox3(2.f,3.f,1.f)); STATIC_REQUIRE(float3(2.f,3.f,1.f) * shear_x(1.f) == uapprox3(5.f,3.f,1.f)); STATIC_REQUIRE(float3(2.f,3.f,1.f) * shear_x(2.f) == uapprox3(8.f,3.f,1.f)); @@ -271,7 +272,14 @@ TEST_CASE("vmath/ext") { STATIC_REQUIRE(float3(2.f,3.f,1.f) * shear(shear(float2(0.f,1.f)),float2(0.f,1.f)) == uapprox3(2.f,7.f,1.f)); } - SECTION("matrix orthographic") { + SECTION("matrix look_at") { + (void)look_at_lh(float3(1,2,3), float3(0,0,0), float3(0,2,0)); + (void)look_at_rh(float3(1,2,3), float3(0,0,0), float3(0,2,0)); + } +} + +TEST_CASE("vmath/ext/matrix_projections") { + SECTION("orthographic") { REQUIRE(all(approx( orthographic_lh(800.f, 600.f, 5.f, 10.f), scale(1.f,1.f,-1.f) * orthographic_rh(800.f, 600.f, 5.f, 10.f)))); @@ -282,7 +290,7 @@ TEST_CASE("vmath/ext") { } - SECTION("matrix perspective") { + SECTION("perspective") { REQUIRE(all(approx( perspective_lh(800.f, 600.f, 5.f, 10.f), scale(1.f,1.f,-1.f) * perspective_rh(800.f, 600.f, 5.f, 10.f)))); @@ -295,13 +303,10 @@ TEST_CASE("vmath/ext") { perspective_lh(100.f, 800.f, 50.f, 600.f, 5.f, 10.f), scale(1.f,1.f,-1.f) * perspective_rh(100.f, 800.f, 50.f, 600.f, 5.f, 10.f)))); } +} - SECTION("matrix look_at") { - (void)look_at_lh(float3(1,2,3), float3(0,0,0), float3(0,2,0)); - (void)look_at_rh(float3(1,2,3), float3(0,0,0), float3(0,2,0)); - } - - SECTION("vector angle") { +TEST_CASE("vmath/ext/vector_transform") { + SECTION("angle") { REQUIRE(angle(float2(2.f,0.f), float2(0.f,1.f)) == uapprox(radians(90.f))); REQUIRE(angle(float2(0.f,3.f), float2(1.f,0.f)) == uapprox(radians(90.f))); REQUIRE(angle(float2(0.5f,0.f), float2(-1.f,0.f)) == uapprox(radians(180.f))); @@ -310,7 +315,7 @@ TEST_CASE("vmath/ext") { REQUIRE(angle(float3(0.f,0.f,3.f), float3(0.f,1.f,0.f)) == uapprox(radians(90.f))); } - SECTION("vector rotate") { + SECTION("rotate") { REQUIRE(rotate(float2(2.f,0.f), radians(90.f)) == uapprox2(0.f,2.f)); REQUIRE(rotate(float2(1.5f,0.f), radians(-90.f)) == uapprox2(0.f,-1.5f)); @@ -329,17 +334,19 @@ TEST_CASE("vmath/ext") { REQUIRE(rotate(float4(1.5f,0.f,0.f,2.f), radians(90.f), float3(0,0,1)) == uapprox4(0.f,1.5f,0.f,2.f)); } - SECTION("vector project") { + SECTION("project") { STATIC_REQUIRE(project(float2(2.f, 2.f), float2(0.f, 1.f)) == uapprox2(0.f, 2.f)); STATIC_REQUIRE(project(float3(2.f, 2.f, 2.f), float3(0.f, 0.f, 1.f)) == uapprox3(0.f, 0.f, 2.f)); } - SECTION("vector perpendicular") { + SECTION("perpendicular") { STATIC_REQUIRE(perpendicular(float2(2.f, 2.f), float2(0.f, 1.f)) == uapprox2(2.f, 0.f)); STATIC_REQUIRE(perpendicular(float3(2.f, 2.f, 2.f), float3(0.f, 0.f, 1.f)) == uapprox3(2.f, 2.f, 0.f)); } +} - SECTION("quaternion/qrotate(m)") { +TEST_CASE("vmath/ext/quaternion_transform") { + SECTION("qrotate(m)") { REQUIRE(all(approx( vec{4.f,3.f,2.f,1.f} * rotate(qrotate(float3x3(rotate(0.f, vec{1.f,2.f,3.f})))), vec{4.f,3.f,2.f,1.f} * rotate(0.f, vec{1.f,2.f,3.f}), 0.001f))); @@ -351,7 +358,7 @@ TEST_CASE("vmath/ext") { vec{4.f,3.f,2.f,1.f} * rotate(radians(-190.5f), vec{1.f,2.f,3.f}), 0.001f))); } - SECTION("quaternion/qrotate(q, m)") { + SECTION("qrotate(q, m)") { REQUIRE(all(approx( vec{4.f,3.f,2.f} * qrotate( qrotate(float3x3(rotate(0.f, vec{1.f,2.f,3.f}))), @@ -361,7 +368,7 @@ TEST_CASE("vmath/ext") { float3x3(rotate(0.f, vec{3.f,2.f,1.f}))))); } - SECTION("quaternion/qrotate(from, to)") { + SECTION("qrotate(from, to)") { REQUIRE(+unit3_x * qrotate(-unit3_x, +unit3_x) == uapprox3(-unit3_x)); REQUIRE(-unit3_y * qrotate(+unit3_y, -unit3_y) == uapprox3(+unit3_y)); REQUIRE(+unit3_z * qrotate(-unit3_z, +unit3_z) == uapprox3(-unit3_z)); @@ -369,7 +376,7 @@ TEST_CASE("vmath/ext") { REQUIRE(vec{-2.f,1.f,3.f} * qrotate(vec{-2.f,1.f,3.f}, vec{1.f,2.f,3.f}) == uapprox3(1.f,2.f,3.f)); } - SECTION("quaternion/qrotate(q, from, to)") { + SECTION("qrotate(q, from, to)") { REQUIRE(vec{1.f,2.f,3.f} * inverse(qrotate(float3x3(rotate(radians(12.f), {2.f,2.f,2.f})))) * qrotate( @@ -378,7 +385,7 @@ TEST_CASE("vmath/ext") { vec{-2.f,1.f,3.f}) == uapprox3(vec{-2.f,1.f,3.f})); } - SECTION("quaternion/qrotate(angle, axis)") { + SECTION("qrotate(angle, axis)") { REQUIRE(all(approx( rotate(12.3f, float3(1.f,2.f,3.f)), rotate(qrotate(12.3f, float3(1.f,2.f,3.f)) * 2.f)))); @@ -395,7 +402,7 @@ TEST_CASE("vmath/ext") { REQUIRE(qrotate_z(12.3f) == qrotate(12.3f, unit3_z * 2.f)); } - SECTION("quaternion/qrotate(q, angle, axis)") { + SECTION("qrotate(q, angle, axis)") { REQUIRE(float3(0.f,1.f,0.f) * qrotate_x(qrotate_x(pi_4),pi_4) == uapprox3(0.f,0.f,1.f)); REQUIRE(float3(0.f,0.f,1.f) * qrotate_y(qrotate_y(pi_4),pi_4) == uapprox3(1.f,0.f,0.f)); REQUIRE(float3(1.f,0.f,0.f) * qrotate_z(qrotate_z(pi_4),pi_4) == uapprox3(0.f,1.f,0.f)); @@ -404,7 +411,7 @@ TEST_CASE("vmath/ext") { REQUIRE(float3(2.f,3.f,4.f) * qrotate(qrotate(pi_2,float3{0.f,0.f,1.f}),pi_2,float3{0.f,0.f,1.f}) == uapprox3(-2.f,-3.f,4.f)); } - SECTION("quaternion/qlook_at") { + SECTION("qlook_at") { REQUIRE(all(approx( qlook_at_lh(float3(1.f,2.f,3.f), float3(0,1,0)), qrotate(float3x3(look_at_lh(float3(), float3(1.f,2.f,3.f), float3(0,1,0))))))); diff --git a/untests/vmath_mat_fun_tests.cpp b/untests/vmath_mat_fun_tests.cpp index 9b8acc7..743a194 100644 --- a/untests/vmath_mat_fun_tests.cpp +++ b/untests/vmath_mat_fun_tests.cpp @@ -262,8 +262,7 @@ TEST_CASE("vmath/mat_fun") { constexpr float4x4 rm1 = inverse(m1); STATIC_REQUIRE(all(approx( unit4_z * m1 * rm1, - unit4_z, - uapprox_epsilon_v))); + unit4_z))); } { @@ -272,8 +271,7 @@ TEST_CASE("vmath/mat_fun") { const float4x4 rm2 = inverse(m2); REQUIRE(all(approx( unit4_z * m2 * rm2, - unit4_z, - uapprox_epsilon_v))); + unit4_z))); } { @@ -282,8 +280,7 @@ TEST_CASE("vmath/mat_fun") { const float3x3 rm3 = inverse(m3); REQUIRE(all(approx( unit3_z * m3 * rm3, - unit3_z, - uapprox_epsilon_v))); + unit3_z))); } { @@ -292,8 +289,7 @@ TEST_CASE("vmath/mat_fun") { const float2x2 rm4 = inverse(m4); REQUIRE(all(approx( unit2_y * m4 * rm4, - unit2_y, - uapprox_epsilon_v))); + unit2_y))); } } } diff --git a/untests/vmath_tests.hpp b/untests/vmath_tests.hpp index 8840f9a..278134d 100644 --- a/untests/vmath_tests.hpp +++ b/untests/vmath_tests.hpp @@ -6,45 +6,23 @@ #include -#include - namespace vmath_tests { using namespace vmath_hpp; template < typename T > - struct uapprox_epsilon; - - template <> - struct uapprox_epsilon { - static constexpr int value = 0; - }; - - template <> - struct uapprox_epsilon { - static constexpr float value = FLT_EPSILON * 100; - }; - - template <> - struct uapprox_epsilon { - static constexpr float value = DBL_EPSILON * 100; + struct uapprox_base { + T epsilon = T(10) * std::numeric_limits::epsilon(); }; template < typename T > - inline constexpr T uapprox_epsilon_v = uapprox_epsilon::value; - - // - // - // - - template < typename T > - struct uapprox { + struct uapprox : uapprox_base { T value; explicit constexpr uapprox(T v) : value(v) {} }; template < typename T > - struct uapprox2 { + struct uapprox2 : uapprox_base { vec value; constexpr explicit uapprox2(T v) : value(v) {} constexpr explicit uapprox2(T x, T y) : value(x, y) {} @@ -52,7 +30,7 @@ namespace vmath_tests }; template < typename T > - struct uapprox3 { + struct uapprox3 : uapprox_base { vec value; constexpr explicit uapprox3(T v) : value(v) {} constexpr explicit uapprox3(T x, T y, T z) : value(x, y, z) {} @@ -60,7 +38,7 @@ namespace vmath_tests }; template < typename T > - struct uapprox4 { + struct uapprox4 : uapprox_base { vec value; constexpr explicit uapprox4(T v) : value(v) {} constexpr explicit uapprox4(T x, T y, T z, T w) : value(x, y, z, w) {} @@ -73,21 +51,21 @@ namespace vmath_tests template < typename T > constexpr bool operator==(const T& l, const uapprox& r) { - return approx(l, r.value, uapprox_epsilon_v); + return approx(l, r.value, r.epsilon); } template < typename T > constexpr bool operator==(const vec& l, const uapprox2& r) { - return all(approx(l, r.value, uapprox_epsilon_v)); + return all(approx(l, r.value,r.epsilon)); } template < typename T > constexpr bool operator==(const vec& l, const uapprox3& r) { - return all(approx(l, r.value, uapprox_epsilon_v)); + return all(approx(l, r.value, r.epsilon)); } template < typename T > constexpr bool operator==(const vec& l, const uapprox4& r) { - return all(approx(l, r.value, uapprox_epsilon_v)); + return all(approx(l, r.value, r.epsilon)); } }