From 3adf263341684862c491aa346f64c962ffa6afdb Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Mon, 17 Nov 2014 22:59:10 +0100 Subject: [PATCH] Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269 --- doc/glm.docx | Bin 1068027 -> 1069123 bytes glm/detail/type_mat2x2.hpp | 10 +- glm/detail/type_mat2x3.hpp | 11 +- glm/detail/type_mat2x4.hpp | 10 +- glm/detail/type_mat3x2.hpp | 12 +- glm/detail/type_mat3x3.hpp | 12 +- glm/detail/type_mat3x4.hpp | 11 +- glm/detail/type_mat4x2.hpp | 11 +- glm/detail/type_mat4x3.hpp | 13 +- glm/detail/type_mat4x4.hpp | 17 +- glm/gtc/quaternion.hpp | 9 + glm/gtc/quaternion.inl | 11 +- glm/gtx/dual_quaternion.hpp | 8 + glm/gtx/dual_quaternion.inl | 11 +- readme.txt | 1 + test/core/core_func_common.cpp | 955 +++++++++++++++++---------------- test/core/core_type_mat4x4.cpp | 11 +- 17 files changed, 620 insertions(+), 493 deletions(-) diff --git a/doc/glm.docx b/doc/glm.docx index 553403c10847817dbb355ae15ffd68ad5307e49c..c23cad5b28de818a887fc7cc05a327fc67249e41 100644 GIT binary patch delta 64177 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�#>Oe+l~gai0`H;RLpRnlvY=rf$^YIf~9Y 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 NTUo4 delta 63006 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

8T%fg?9Tz9r6h23%R*kz` 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 - GLM_FUNC_DECL explicit tmat2x2(tmat2x2 const & m); + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat2x2(tmat2x2 const & m); +# else + template + GLM_FUNC_DECL tmat2x2(tmat2x2 const & m); +# endif GLM_FUNC_DECL explicit tmat2x2(tmat3x3 const & x); GLM_FUNC_DECL explicit tmat2x2(tmat4x4 const & x); diff --git a/glm/detail/type_mat2x3.hpp b/glm/detail/type_mat2x3.hpp index 53c5fa4a..8699a5b6 100644 --- a/glm/detail/type_mat2x3.hpp +++ b/glm/detail/type_mat2x3.hpp @@ -75,6 +75,7 @@ namespace glm ////////////////////////////////////// // Conversions + template GLM_FUNC_DECL tmat2x3( X1 const & x1, Y1 const & y1, Z1 const & z1, @@ -87,8 +88,14 @@ namespace glm ////////////////////////////////////// // Matrix conversion - template - GLM_FUNC_DECL explicit tmat2x3(tmat2x3 const & m); + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat2x3(tmat2x3 const & m); +# else + template + GLM_FUNC_DECL tmat2x3(tmat2x3 const & m); +# endif GLM_FUNC_DECL explicit tmat2x3(tmat2x2 const & x); GLM_FUNC_DECL explicit tmat2x3(tmat3x3 const & x); diff --git a/glm/detail/type_mat2x4.hpp b/glm/detail/type_mat2x4.hpp index 5f40ed5b..b97d1e91 100644 --- a/glm/detail/type_mat2x4.hpp +++ b/glm/detail/type_mat2x4.hpp @@ -89,8 +89,14 @@ namespace glm ////////////////////////////////////// // Matrix conversions - template - GLM_FUNC_DECL explicit tmat2x4(tmat2x4 const & m); + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat2x4(tmat2x4 const & m); +# else + template + GLM_FUNC_DECL tmat2x4(tmat2x4 const & m); +# endif GLM_FUNC_DECL explicit tmat2x4(tmat2x2 const & x); GLM_FUNC_DECL explicit tmat2x4(tmat3x3 const & x); diff --git a/glm/detail/type_mat3x2.hpp b/glm/detail/type_mat3x2.hpp index 762158bc..1a2b0c66 100644 --- a/glm/detail/type_mat3x2.hpp +++ b/glm/detail/type_mat3x2.hpp @@ -77,6 +77,7 @@ namespace glm ////////////////////////////////////// // Conversions + template< typename X1, typename Y1, typename X2, typename Y2, @@ -92,9 +93,16 @@ namespace glm tvec2 const & v2, tvec2 const & v3); + ////////////////////////////////////// // Matrix conversions - template - GLM_FUNC_DECL explicit tmat3x2(tmat3x2 const & m); + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat3x2(tmat3x2 const & m); +# else + template + GLM_FUNC_DECL tmat3x2(tmat3x2 const & m); +# endif GLM_FUNC_DECL explicit tmat3x2(tmat2x2 const & x); GLM_FUNC_DECL explicit tmat3x2(tmat3x3 const & x); diff --git a/glm/detail/type_mat3x3.hpp b/glm/detail/type_mat3x3.hpp index a7d1409f..97d1ed2e 100644 --- a/glm/detail/type_mat3x3.hpp +++ b/glm/detail/type_mat3x3.hpp @@ -81,6 +81,7 @@ namespace glm ////////////////////////////////////// // Conversions + template< typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2, @@ -96,9 +97,16 @@ namespace glm tvec3 const & v2, tvec3 const & v3); + ////////////////////////////////////// // Matrix conversions - template - GLM_FUNC_DECL explicit tmat3x3(tmat3x3 const & m); + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat3x3(tmat3x3 const & m); +# else + template + GLM_FUNC_DECL tmat3x3(tmat3x3 const & m); +# endif GLM_FUNC_DECL explicit tmat3x3(tmat2x2 const & x); GLM_FUNC_DECL explicit tmat3x3(tmat4x4 const & x); diff --git a/glm/detail/type_mat3x4.hpp b/glm/detail/type_mat3x4.hpp index 6c4c7cd5..4574f563 100644 --- a/glm/detail/type_mat3x4.hpp +++ b/glm/detail/type_mat3x4.hpp @@ -92,9 +92,16 @@ namespace glm tvec4 const & v2, tvec4 const & v3); + ////////////////////////////////////// // Matrix conversion - template - GLM_FUNC_DECL explicit tmat3x4(tmat3x4 const & m); + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat3x4(tmat3x4 const & m); +# else + template + GLM_FUNC_DECL tmat3x4(tmat3x4 const & m); +# endif GLM_FUNC_DECL explicit tmat3x4(tmat2x2 const & x); GLM_FUNC_DECL explicit tmat3x4(tmat3x3 const & x); diff --git a/glm/detail/type_mat4x2.hpp b/glm/detail/type_mat4x2.hpp index a84c83f2..6de10768 100644 --- a/glm/detail/type_mat4x2.hpp +++ b/glm/detail/type_mat4x2.hpp @@ -98,9 +98,16 @@ namespace glm tvec2 const & v3, tvec2 const & v4); + ////////////////////////////////////// // Matrix conversions - template - GLM_FUNC_DECL explicit tmat4x2(tmat4x2 const & m); + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat4x2(tmat4x2 const & m); +# else + template + GLM_FUNC_DECL tmat4x2(tmat4x2 const & m); +# endif GLM_FUNC_DECL explicit tmat4x2(tmat2x2 const & x); GLM_FUNC_DECL explicit tmat4x2(tmat3x3 const & x); diff --git a/glm/detail/type_mat4x3.hpp b/glm/detail/type_mat4x3.hpp index f108052b..a9210e7f 100644 --- a/glm/detail/type_mat4x3.hpp +++ b/glm/detail/type_mat4x3.hpp @@ -97,10 +97,17 @@ namespace glm tvec3 const & v3, tvec3 const & v4); + ////////////////////////////////////// // Matrix conversions - template - GLM_FUNC_DECL explicit tmat4x3(tmat4x3 const & m); - + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat4x3(tmat4x3 const & m); +# else + template + GLM_FUNC_DECL tmat4x3(tmat4x3 const & m); +# endif + GLM_FUNC_DECL explicit tmat4x3(tmat2x2 const & x); GLM_FUNC_DECL explicit tmat4x3(tmat3x3 const & x); GLM_FUNC_DECL explicit tmat4x3(tmat4x4 const & x); diff --git a/glm/detail/type_mat4x4.hpp b/glm/detail/type_mat4x4.hpp index 61e4e7bb..dcb2a6a7 100644 --- a/glm/detail/type_mat4x4.hpp +++ b/glm/detail/type_mat4x4.hpp @@ -95,17 +95,24 @@ namespace glm X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3, X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4); - + template GLM_FUNC_DECL tmat4x4( tvec4 const & v1, tvec4 const & v2, tvec4 const & v3, tvec4 const & v4); - + + ////////////////////////////////////// // Matrix conversions - template - GLM_FUNC_DECL explicit tmat4x4(tmat4x4 const & m); + +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tmat4x4(tmat4x4 const & m); +# else + template + GLM_FUNC_DECL tmat4x4(tmat4x4 const & m); +# endif GLM_FUNC_DECL explicit tmat4x4(tmat2x2 const & x); GLM_FUNC_DECL explicit tmat4x4(tmat3x3 const & x); @@ -179,7 +186,7 @@ namespace glm template GLM_FUNC_DECL typename tmat4x4::row_type operator*(typename tmat4x4::col_type const & v, tmat4x4 const & m); - + template GLM_FUNC_DECL tmat2x4 operator*(tmat4x4 const & m1, tmat2x4 const & m2); diff --git a/glm/gtc/quaternion.hpp b/glm/gtc/quaternion.hpp index 5c8ed128..12730932 100644 --- a/glm/gtc/quaternion.hpp +++ b/glm/gtc/quaternion.hpp @@ -95,6 +95,14 @@ namespace glm ////////////////////////////////////// // Convertions +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tquat(tquat const & q); +# else + template + GLM_FUNC_DECL tquat(tquat const & q); +# endif + /// Create a quaternion from two normalized axis /// /// @param u A first normalized axis @@ -102,6 +110,7 @@ namespace glm /// @see gtc_quaternion /// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors GLM_FUNC_DECL explicit tquat(tvec3 const & u, tvec3 const & v); + /// Build a quaternion from euler angles (pitch, yaw, roll), in radians. GLM_FUNC_DECL explicit tquat(tvec3 const & eulerAngles); GLM_FUNC_DECL explicit tquat(tmat3x3 const & m); diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index f214eff3..70587b86 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -106,12 +106,21 @@ namespace detail template GLM_FUNC_QUALIFIER tquat::tquat(T const & w, T const & x, T const & y, T const & z) - : x(x), y(y), z(z), w(w) + : x(x), y(y), z(z), w(w) {} ////////////////////////////////////////////////////////////// // Conversions + template + template + GLM_FUNC_QUALIFIER tquat::tquat(tquat const & q) + : x(static_cast(q.x)) + , y(static_cast(q.y)) + , z(static_cast(q.z)) + , w(static_cast(q.w)) + {} + //template //GLM_FUNC_QUALIFIER tquat::tquat //( diff --git a/glm/gtx/dual_quaternion.hpp b/glm/gtx/dual_quaternion.hpp index 4e6b724e..c12af399 100644 --- a/glm/gtx/dual_quaternion.hpp +++ b/glm/gtx/dual_quaternion.hpp @@ -89,6 +89,14 @@ namespace glm ////////////////////////////////////////////////////////////// // tdualquat conversions +# ifdef GLM_FORCE_EXPLICIT_CTOR + template + GLM_FUNC_DECL explicit tdualquat(tdualquat const & q); +# else + template + GLM_FUNC_DECL tdualquat(tdualquat const & q); +# endif + GLM_FUNC_DECL explicit tdualquat(tmat2x4 const & holder_mat); GLM_FUNC_DECL explicit tdualquat(tmat3x4 const & aug_mat); diff --git a/glm/gtx/dual_quaternion.inl b/glm/gtx/dual_quaternion.inl index bde0b52d..83694716 100644 --- a/glm/gtx/dual_quaternion.inl +++ b/glm/gtx/dual_quaternion.inl @@ -56,7 +56,8 @@ namespace glm template template GLM_FUNC_QUALIFIER tdualquat::tdualquat(tdualquat const & d) - : real(d.real), dual(d.dual) + : real(d.real) + , dual(d.dual) {} ////////////////////////////////////// @@ -87,6 +88,14 @@ namespace glm ////////////////////////////////////////////////////////////// // tdualquat conversions + + template + template + GLM_FUNC_QUALIFIER tdualquat::tdualquat(tdualquat const & q) + : real(q.real) + , dual(q.dual) + {} + template GLM_FUNC_QUALIFIER tdualquat::tdualquat(tmat2x4 const & m) { diff --git a/readme.txt b/readme.txt index 6f7e6cb0..e6bd5ba8 100644 --- a/readme.txt +++ b/readme.txt @@ -57,6 +57,7 @@ Features: - Added GTC_bitfield extension, promoted GTX_bit - Added GTC_integer extension, promoted GTX_bit - Added GTC_round extension, promoted GTX_bit +- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269 Improvements: - Rely on C++11 to implement isinf and isnan diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 528d665d..83fba5f6 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -7,6 +7,8 @@ // File : test/core/func_common.cpp /////////////////////////////////////////////////////////////////////////////////////////////////// +#define GLM_FORCE_EXPLICIT_CTOR +#include #include #include #include @@ -16,272 +18,293 @@ #include #include -int test_floor() +namespace floor_ { - int Error(0); - + int test() { - float A(1.1f); - float B = glm::floor(A); + int Error(0); + + { + float A(1.1f); + float B = glm::floor(A); + } + + { + double A(1.1f); + double B = glm::floor(A); + } + + { + glm::vec1 A(1.1f); + glm::vec1 B = glm::floor(A); + + Error += glm::all(glm::epsilonEqual(B, glm::vec1(1.0), 0.0001f)) ? 0 : 1; + } + + { + glm::dvec1 A(1.1f); + glm::dvec1 B = glm::floor(A); + + Error += glm::all(glm::epsilonEqual(B, glm::dvec1(1.0), 0.0001)) ? 0 : 1; + } + + { + glm::vec2 A(1.1f); + glm::vec2 B = glm::floor(A); + + Error += glm::all(glm::epsilonEqual(B, glm::vec2(1.0), 0.0001f)) ? 0 : 1; + } + + { + glm::dvec2 A(1.1f); + glm::dvec2 B = glm::floor(A); + + Error += glm::all(glm::epsilonEqual(B, glm::dvec2(1.0), 0.0001)) ? 0 : 1; + } + + { + glm::vec3 A(1.1f); + glm::vec3 B = glm::floor(A); + + Error += glm::all(glm::epsilonEqual(B, glm::vec3(1.0), 0.0001f)) ? 0 : 1; + } + + { + glm::dvec3 A(1.1f); + glm::dvec3 B = glm::floor(A); + + Error += glm::all(glm::epsilonEqual(B, glm::dvec3(1.0), 0.0001)) ? 0 : 1; + } + + { + glm::vec4 A(1.1f); + glm::vec4 B = glm::floor(A); + + Error += glm::all(glm::epsilonEqual(B, glm::vec4(1.0), 0.0001f)) ? 0 : 1; + } + + { + glm::dvec4 A(1.1f); + glm::dvec4 B = glm::floor(A); + + Error += glm::all(glm::epsilonEqual(B, glm::dvec4(1.0), 0.0001)) ? 0 : 1; + } + + return Error; } +}//namespace floor - { - double A(1.1f); - double B = glm::floor(A); - } - - { - glm::vec1 A(1.1f); - glm::vec1 B = glm::floor(A); - - Error += glm::all(glm::epsilonEqual(B, glm::vec1(1.0), 0.0001f)) ? 0 : 1; - } - - { - glm::dvec1 A(1.1f); - glm::dvec1 B = glm::floor(A); - - Error += glm::all(glm::epsilonEqual(B, glm::dvec1(1.0), 0.0001)) ? 0 : 1; - } - - { - glm::vec2 A(1.1f); - glm::vec2 B = glm::floor(A); - - Error += glm::all(glm::epsilonEqual(B, glm::vec2(1.0), 0.0001f)) ? 0 : 1; - } - - { - glm::dvec2 A(1.1f); - glm::dvec2 B = glm::floor(A); - - Error += glm::all(glm::epsilonEqual(B, glm::dvec2(1.0), 0.0001)) ? 0 : 1; - } - - { - glm::vec3 A(1.1f); - glm::vec3 B = glm::floor(A); - - Error += glm::all(glm::epsilonEqual(B, glm::vec3(1.0), 0.0001f)) ? 0 : 1; - } - - { - glm::dvec3 A(1.1f); - glm::dvec3 B = glm::floor(A); - - Error += glm::all(glm::epsilonEqual(B, glm::dvec3(1.0), 0.0001)) ? 0 : 1; - } - - { - glm::vec4 A(1.1f); - glm::vec4 B = glm::floor(A); - - Error += glm::all(glm::epsilonEqual(B, glm::vec4(1.0), 0.0001f)) ? 0 : 1; - } - - { - glm::dvec4 A(1.1f); - glm::dvec4 B = glm::floor(A); - - Error += glm::all(glm::epsilonEqual(B, glm::dvec4(1.0), 0.0001)) ? 0 : 1; - } - - return Error; -} - -int test_modf() +namespace modf_ { - int Error(0); - + int test() { - float X(1.5f); - float I(0.0f); - float A = glm::modf(X, I); + int Error(0); - Error += I == 1.0f ? 0 : 1; - Error += A == 0.5f ? 0 : 1; + { + float X(1.5f); + float I(0.0f); + float A = glm::modf(X, I); + + Error += I == 1.0f ? 0 : 1; + Error += A == 0.5f ? 0 : 1; + } + + { + glm::vec4 X(1.1f, 1.2f, 1.5f, 1.7f); + glm::vec4 I(0.0f); + glm::vec4 A = glm::modf(X, I); + + Error += I == glm::vec4(1.0f) ? 0 : 1; + Error += glm::all(glm::epsilonEqual(A, glm::vec4(0.1f, 0.2f, 0.5f, 0.7f), 0.00001f)) ? 0 : 1; + } + + { + glm::dvec4 X(1.1, 1.2, 1.5, 1.7); + glm::dvec4 I(0.0); + glm::dvec4 A = glm::modf(X, I); + + Error += I == glm::dvec4(1.0) ? 0 : 1; + Error += glm::all(glm::epsilonEqual(A, glm::dvec4(0.1, 0.2, 0.5, 0.7), 0.000000001)) ? 0 : 1; + } + + { + double X(1.5); + double I(0.0); + double A = glm::modf(X, I); + + Error += I == 1.0 ? 0 : 1; + Error += A == 0.5 ? 0 : 1; + } + + return Error; } +}//namespace modf - { - glm::vec4 X(1.1f, 1.2f, 1.5f, 1.7f); - glm::vec4 I(0.0f); - glm::vec4 A = glm::modf(X, I); - - Error += I == glm::vec4(1.0f) ? 0 : 1; - Error += glm::all(glm::epsilonEqual(A, glm::vec4(0.1f, 0.2f, 0.5f, 0.7f), 0.00001f)) ? 0 : 1; - } - - { - glm::dvec4 X(1.1, 1.2, 1.5, 1.7); - glm::dvec4 I(0.0); - glm::dvec4 A = glm::modf(X, I); - - Error += I == glm::dvec4(1.0) ? 0 : 1; - Error += glm::all(glm::epsilonEqual(A, glm::dvec4(0.1, 0.2, 0.5, 0.7), 0.000000001)) ? 0 : 1; - } - - { - double X(1.5); - double I(0.0); - double A = glm::modf(X, I); - - Error += I == 1.0 ? 0 : 1; - Error += A == 0.5 ? 0 : 1; - } - - return Error; -} - -int test_floatBitsToInt() +namespace floatBitsToInt { - int Error = 0; + int test() + { + int Error = 0; - { - float A = 1.0f; - int B = glm::floatBitsToInt(A); - float C = glm::intBitsToFloat(B); - int D = *(int*)&A; - Error += B == D ? 0 : 1; - Error += A == C ? 0 : 1; - } + { + float A = 1.0f; + int B = glm::floatBitsToInt(A); + float C = glm::intBitsToFloat(B); + int D = *(int*)&A; + Error += B == D ? 0 : 1; + Error += A == C ? 0 : 1; + } - { - glm::vec2 A(1.0f, 2.0f); - glm::ivec2 B = glm::floatBitsToInt(A); - glm::vec2 C = glm::intBitsToFloat(B); - Error += B.x == *(int*)&(A.x) ? 0 : 1; - Error += B.y == *(int*)&(A.y) ? 0 : 1; - Error += A == C? 0 : 1; - } + { + glm::vec2 A(1.0f, 2.0f); + glm::ivec2 B = glm::floatBitsToInt(A); + glm::vec2 C = glm::intBitsToFloat(B); + Error += B.x == *(int*)&(A.x) ? 0 : 1; + Error += B.y == *(int*)&(A.y) ? 0 : 1; + Error += A == C? 0 : 1; + } - { - glm::vec3 A(1.0f, 2.0f, 3.0f); - glm::ivec3 B = glm::floatBitsToInt(A); - glm::vec3 C = glm::intBitsToFloat(B); - Error += B.x == *(int*)&(A.x) ? 0 : 1; - Error += B.y == *(int*)&(A.y) ? 0 : 1; - Error += B.z == *(int*)&(A.z) ? 0 : 1; - Error += A == C? 0 : 1; - } + { + glm::vec3 A(1.0f, 2.0f, 3.0f); + glm::ivec3 B = glm::floatBitsToInt(A); + glm::vec3 C = glm::intBitsToFloat(B); + Error += B.x == *(int*)&(A.x) ? 0 : 1; + Error += B.y == *(int*)&(A.y) ? 0 : 1; + Error += B.z == *(int*)&(A.z) ? 0 : 1; + Error += A == C? 0 : 1; + } - { - glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f); - glm::ivec4 B = glm::floatBitsToInt(A); - glm::vec4 C = glm::intBitsToFloat(B); - Error += B.x == *(int*)&(A.x) ? 0 : 1; - Error += B.y == *(int*)&(A.y) ? 0 : 1; - Error += B.z == *(int*)&(A.z) ? 0 : 1; - Error += B.w == *(int*)&(A.w) ? 0 : 1; - Error += A == C? 0 : 1; - } + { + glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f); + glm::ivec4 B = glm::floatBitsToInt(A); + glm::vec4 C = glm::intBitsToFloat(B); + Error += B.x == *(int*)&(A.x) ? 0 : 1; + Error += B.y == *(int*)&(A.y) ? 0 : 1; + Error += B.z == *(int*)&(A.z) ? 0 : 1; + Error += B.w == *(int*)&(A.w) ? 0 : 1; + Error += A == C? 0 : 1; + } - return Error; -} + return Error; + } +}//namespace floatBitsToInt -int test_floatBitsToUint() +namespace floatBitsToUint { - int Error = 0; - + int test() { - float A = 1.0f; - glm::uint B = glm::floatBitsToUint(A); - float C = glm::intBitsToFloat(B); - Error += B == *(glm::uint*)&A ? 0 : 1; - Error += A == C? 0 : 1; - } + int Error = 0; - { - glm::vec2 A(1.0f, 2.0f); - glm::uvec2 B = glm::floatBitsToUint(A); - glm::vec2 C = glm::uintBitsToFloat(B); - Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1; - Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1; - Error += A == C ? 0 : 1; - } + { + float A = 1.0f; + glm::uint B = glm::floatBitsToUint(A); + float C = glm::intBitsToFloat(B); + Error += B == *(glm::uint*)&A ? 0 : 1; + Error += A == C? 0 : 1; + } - { - glm::vec3 A(1.0f, 2.0f, 3.0f); - glm::uvec3 B = glm::floatBitsToUint(A); - glm::vec3 C = glm::uintBitsToFloat(B); - Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1; - Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1; - Error += B.z == *(glm::uint*)&(A.z) ? 0 : 1; - Error += A == C? 0 : 1; - } + { + glm::vec2 A(1.0f, 2.0f); + glm::uvec2 B = glm::floatBitsToUint(A); + glm::vec2 C = glm::uintBitsToFloat(B); + Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1; + Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1; + Error += A == C ? 0 : 1; + } - { - glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f); - glm::uvec4 B = glm::floatBitsToUint(A); - glm::vec4 C = glm::uintBitsToFloat(B); - Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1; - Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1; - Error += B.z == *(glm::uint*)&(A.z) ? 0 : 1; - Error += B.w == *(glm::uint*)&(A.w) ? 0 : 1; - Error += A == C? 0 : 1; - } + { + glm::vec3 A(1.0f, 2.0f, 3.0f); + glm::uvec3 B = glm::floatBitsToUint(A); + glm::vec3 C = glm::uintBitsToFloat(B); + Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1; + Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1; + Error += B.z == *(glm::uint*)&(A.z) ? 0 : 1; + Error += A == C? 0 : 1; + } - return Error; -} + { + glm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f); + glm::uvec4 B = glm::floatBitsToUint(A); + glm::vec4 C = glm::uintBitsToFloat(B); + Error += B.x == *(glm::uint*)&(A.x) ? 0 : 1; + Error += B.y == *(glm::uint*)&(A.y) ? 0 : 1; + Error += B.z == *(glm::uint*)&(A.z) ? 0 : 1; + Error += B.w == *(glm::uint*)&(A.w) ? 0 : 1; + Error += A == C? 0 : 1; + } + + return Error; + } +}//namespace floatBitsToUint -int test_min() +namespace min_ { - int Error = 0; + int test() + { + int Error = 0; - glm::vec1 A0 = glm::min(glm::vec1(1), glm::vec1(1)); + glm::vec1 A0 = glm::min(glm::vec1(1), glm::vec1(1)); - glm::vec2 B0 = glm::min(glm::vec2(1), glm::vec2(1)); - glm::vec2 B1 = glm::min(glm::vec2(1), 1.0f); - bool B2 = glm::all(glm::equal(B0, B1)); - Error += B2 ? 0 : 1; + glm::vec2 B0 = glm::min(glm::vec2(1), glm::vec2(1)); + glm::vec2 B1 = glm::min(glm::vec2(1), 1.0f); + bool B2 = glm::all(glm::equal(B0, B1)); + Error += B2 ? 0 : 1; - glm::vec3 C0 = glm::min(glm::vec3(1), glm::vec3(1)); - glm::vec3 C1 = glm::min(glm::vec3(1), 1.0f); - bool C2 = glm::all(glm::equal(C0, C1)); - Error += C2 ? 0 : 1; + glm::vec3 C0 = glm::min(glm::vec3(1), glm::vec3(1)); + glm::vec3 C1 = glm::min(glm::vec3(1), 1.0f); + bool C2 = glm::all(glm::equal(C0, C1)); + Error += C2 ? 0 : 1; - glm::vec4 D0 = glm::min(glm::vec4(1), glm::vec4(1)); - glm::vec4 D1 = glm::min(glm::vec4(1), 1.0f); - bool D2 = glm::all(glm::equal(D0, D1)); - Error += D2 ? 0 : 1; + glm::vec4 D0 = glm::min(glm::vec4(1), glm::vec4(1)); + glm::vec4 D1 = glm::min(glm::vec4(1), 1.0f); + bool D2 = glm::all(glm::equal(D0, D1)); + Error += D2 ? 0 : 1; - return Error; -} + return Error; + } +}//namespace min_ -int test_max() +namespace max_ { - int Error = 0; + int test() + { + int Error = 0; - glm::vec1 A0 = glm::max(glm::vec1(1), glm::vec1(1)); + glm::vec1 A0 = glm::max(glm::vec1(1), glm::vec1(1)); - glm::vec2 B0 = glm::max(glm::vec2(1), glm::vec2(1)); - glm::vec2 B1 = glm::max(glm::vec2(1), 1.0f); - bool B2 = glm::all(glm::equal(B0, B1)); - Error += B2 ? 0 : 1; + glm::vec2 B0 = glm::max(glm::vec2(1), glm::vec2(1)); + glm::vec2 B1 = glm::max(glm::vec2(1), 1.0f); + bool B2 = glm::all(glm::equal(B0, B1)); + Error += B2 ? 0 : 1; - glm::vec3 C0 = glm::max(glm::vec3(1), glm::vec3(1)); - glm::vec3 C1 = glm::max(glm::vec3(1), 1.0f); - bool C2 = glm::all(glm::equal(C0, C1)); - Error += C2 ? 0 : 1; + glm::vec3 C0 = glm::max(glm::vec3(1), glm::vec3(1)); + glm::vec3 C1 = glm::max(glm::vec3(1), 1.0f); + bool C2 = glm::all(glm::equal(C0, C1)); + Error += C2 ? 0 : 1; - glm::vec4 D0 = glm::max(glm::vec4(1), glm::vec4(1)); - glm::vec4 D1 = glm::max(glm::vec4(1), 1.0f); - bool D2 = glm::all(glm::equal(D0, D1)); - Error += D2 ? 0 : 1; + glm::vec4 D0 = glm::max(glm::vec4(1), glm::vec4(1)); + glm::vec4 D1 = glm::max(glm::vec4(1), 1.0f); + bool D2 = glm::all(glm::equal(D0, D1)); + Error += D2 ? 0 : 1; - return Error; -} + return Error; + } +}//namespace max_ -int test_clamp() +namespace clamp_ { - int Error = 0; + int test() + { + int Error = 0; - return Error; -} + return Error; + } +}//namespace clamp_ -namespace test_mix +namespace mix_ { template - struct test + struct entry { T x; T y; @@ -289,7 +312,7 @@ namespace test_mix T Result; }; - test TestBool[] = + entry TestBool[] = { {0.0f, 1.0f, false, 0.0f}, {0.0f, 1.0f, true, 1.0f}, @@ -297,7 +320,7 @@ namespace test_mix {-1.0f, 1.0f, true, 1.0f} }; - test TestFloat[] = + entry TestFloat[] = { {0.0f, 1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 1.0f, 1.0f}, @@ -305,7 +328,7 @@ namespace test_mix {-1.0f, 1.0f, 1.0f, 1.0f} }; - test TestVec2Bool[] = + entry 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)}, @@ -313,7 +336,7 @@ namespace test_mix {glm::vec2(-1.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)} }; - test TestBVec2[] = + entry 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)}, @@ -322,7 +345,7 @@ namespace test_mix {glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(true, false), glm::vec2(1.0f, -1.0f)} }; - test TestVec3Bool[] = + entry TestVec3Bool[] = { {glm::vec3(0.0f), glm::vec3(1.0f), false, glm::vec3(0.0f)}, {glm::vec3(0.0f), glm::vec3(1.0f), true, glm::vec3(1.0f)}, @@ -330,7 +353,7 @@ namespace test_mix {glm::vec3(-1.0f), glm::vec3(1.0f), true, glm::vec3(1.0f)} }; - test TestBVec3[] = + entry TestBVec3[] = { {glm::vec3(0.0f), glm::vec3(1.0f), glm::bvec3(false), glm::vec3(0.0f)}, {glm::vec3(0.0f), glm::vec3(1.0f), glm::bvec3(true), glm::vec3(1.0f)}, @@ -339,7 +362,7 @@ namespace test_mix {glm::vec3(1.0f, 2.0f, 3.0f), glm::vec3(4.0f, 5.0f, 6.0f), glm::bvec3(true, false, true), glm::vec3(4.0f, 2.0f, 6.0f)} }; - test TestVec4Bool[] = + entry TestVec4Bool[] = { {glm::vec4(0.0f), glm::vec4(1.0f), false, glm::vec4(0.0f)}, {glm::vec4(0.0f), glm::vec4(1.0f), true, glm::vec4(1.0f)}, @@ -347,7 +370,7 @@ namespace test_mix {glm::vec4(-1.0f), glm::vec4(1.0f), true, glm::vec4(1.0f)} }; - test TestBVec4[] = + entry TestBVec4[] = { {glm::vec4(0.0f), glm::vec4(1.0f), glm::bvec4(false), glm::vec4(0.0f)}, {glm::vec4(0.0f), glm::vec4(1.0f), glm::bvec4(true), glm::vec4(1.0f)}, @@ -356,13 +379,13 @@ namespace test_mix {glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(5.0f, 6.0f, 7.0f, 8.0f), glm::bvec4(true, false, true, false), glm::vec4(5.0f, 2.0f, 7.0f, 4.0f)} }; - int run() + int test() { int Error = 0; // Float with bool { - for(std::size_t i = 0; i < sizeof(TestBool) / sizeof(test); ++i) + for(std::size_t i = 0; i < sizeof(TestBool) / sizeof(entry); ++i) { float Result = glm::mix(TestBool[i].x, TestBool[i].y, TestBool[i].a); Error += glm::epsilonEqual(Result, TestBool[i].Result, glm::epsilon()) ? 0 : 1; @@ -371,7 +394,7 @@ namespace test_mix // Float with float { - for(std::size_t i = 0; i < sizeof(TestFloat) / sizeof(test); ++i) + for(std::size_t i = 0; i < sizeof(TestFloat) / sizeof(entry); ++i) { float Result = glm::mix(TestFloat[i].x, TestFloat[i].y, TestFloat[i].a); Error += glm::epsilonEqual(Result, TestFloat[i].Result, glm::epsilon()) ? 0 : 1; @@ -380,7 +403,7 @@ namespace test_mix // vec2 with bool { - for(std::size_t i = 0; i < sizeof(TestVec2Bool) / sizeof(test); ++i) + for(std::size_t i = 0; i < sizeof(TestVec2Bool) / sizeof(entry); ++i) { glm::vec2 Result = glm::mix(TestVec2Bool[i].x, TestVec2Bool[i].y, TestVec2Bool[i].a); Error += glm::epsilonEqual(Result.x, TestVec2Bool[i].Result.x, glm::epsilon()) ? 0 : 1; @@ -390,7 +413,7 @@ namespace test_mix // vec2 with bvec2 { - for(std::size_t i = 0; i < sizeof(TestBVec2) / sizeof(test); ++i) + for(std::size_t i = 0; i < sizeof(TestBVec2) / sizeof(entry); ++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()) ? 0 : 1; @@ -400,7 +423,7 @@ namespace test_mix // vec3 with bool { - for(std::size_t i = 0; i < sizeof(TestVec3Bool) / sizeof(test); ++i) + for(std::size_t i = 0; i < sizeof(TestVec3Bool) / sizeof(entry); ++i) { glm::vec3 Result = glm::mix(TestVec3Bool[i].x, TestVec3Bool[i].y, TestVec3Bool[i].a); Error += glm::epsilonEqual(Result.x, TestVec3Bool[i].Result.x, glm::epsilon()) ? 0 : 1; @@ -411,7 +434,7 @@ namespace test_mix // vec3 with bvec3 { - for(std::size_t i = 0; i < sizeof(TestBVec3) / sizeof(test); ++i) + for(std::size_t i = 0; i < sizeof(TestBVec3) / sizeof(entry); ++i) { glm::vec3 Result = glm::mix(TestBVec3[i].x, TestBVec3[i].y, TestBVec3[i].a); Error += glm::epsilonEqual(Result.x, TestBVec3[i].Result.x, glm::epsilon()) ? 0 : 1; @@ -422,7 +445,7 @@ namespace test_mix // vec4 with bool { - for(std::size_t i = 0; i < sizeof(TestVec4Bool) / sizeof(test); ++i) + for(std::size_t i = 0; i < sizeof(TestVec4Bool) / sizeof(entry); ++i) { glm::vec4 Result = glm::mix(TestVec4Bool[i].x, TestVec4Bool[i].y, TestVec4Bool[i].a); Error += glm::epsilonEqual(Result.x, TestVec4Bool[i].Result.x, glm::epsilon()) ? 0 : 1; @@ -434,7 +457,7 @@ namespace test_mix // vec4 with bvec4 { - for(std::size_t i = 0; i < sizeof(TestBVec4) / sizeof(test); ++i) + for(std::size_t i = 0; i < sizeof(TestBVec4) / sizeof(entry); ++i) { glm::vec4 Result = glm::mix(TestBVec4[i].x, TestBVec4[i].y, TestBVec4[i].a); Error += glm::epsilonEqual(Result.x, TestBVec4[i].Result.x, glm::epsilon()) ? 0 : 1; @@ -446,26 +469,26 @@ namespace test_mix return Error; } -}//namespace test_mix +}//namespace mix_ -namespace test_step +namespace step_ { template - struct test + struct entry { EDGE edge; VEC x; VEC result; }; - test TestVec4Scalar [] = + entry TestVec4Scalar [] = { { 0.0f, glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) }, { 1.0f, glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) }, { 0.0f, glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f), glm::vec4(0.0f) } }; - test TestVec4Vector [] = + entry TestVec4Vector [] = { { glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f), glm::vec4(-2.0f, -3.0f, -4.0f, -5.0f), glm::vec4(0.0f) }, { glm::vec4( 0.0f, 1.0f, 2.0f, 3.0f), glm::vec4( 1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) }, @@ -473,13 +496,13 @@ namespace test_step { glm::vec4( 0.0f, 1.0f, 2.0f, 3.0f), glm::vec4(-1.0f,-2.0f,-3.0f,-4.0f), glm::vec4(0.0f) } }; - int run() + int test() { int Error = 0; // vec4 and float { - for (std::size_t i = 0; i < sizeof(TestVec4Scalar) / sizeof(test); ++i) + for (std::size_t i = 0; i < sizeof(TestVec4Scalar) / sizeof(entry); ++i) { glm::vec4 Result = glm::step(TestVec4Scalar[i].edge, TestVec4Scalar[i].x); Error += glm::all(glm::epsilonEqual(Result, TestVec4Scalar[i].result, glm::epsilon())) ? 0 : 1; @@ -488,7 +511,7 @@ namespace test_step // vec4 and vec4 { - for (std::size_t i = 0; i < sizeof(TestVec4Vector) / sizeof(test); ++i) + for (std::size_t i = 0; i < sizeof(TestVec4Vector) / sizeof(entry); ++i) { glm::vec4 Result = glm::step(TestVec4Vector[i].edge, TestVec4Vector[i].x); Error += glm::all(glm::epsilonEqual(Result, TestVec4Vector[i].result, glm::epsilon())) ? 0 : 1; @@ -497,247 +520,259 @@ namespace test_step return Error; } -}//namespace test_step +}//namespace step_ -int test_round() +namespace round_ { - int Error = 0; - + int test() { - float A = glm::round(0.0f); - Error += A == 0.0f ? 0 : 1; - float B = glm::round(0.5f); - Error += B == 1.0f ? 0 : 1; - float C = glm::round(1.0f); - Error += C == 1.0f ? 0 : 1; - float D = glm::round(0.1f); - Error += D == 0.0f ? 0 : 1; - float E = glm::round(0.9f); - Error += E == 1.0f ? 0 : 1; - float F = glm::round(1.5f); - Error += F == 2.0f ? 0 : 1; - float G = glm::round(1.9f); - Error += G == 2.0f ? 0 : 1; - } + int Error = 0; - { - float A = glm::round(-0.0f); - Error += A == 0.0f ? 0 : 1; - float B = glm::round(-0.5f); - Error += B == -1.0f ? 0 : 1; - float C = glm::round(-1.0f); - Error += C == -1.0f ? 0 : 1; - float D = glm::round(-0.1f); - Error += D == 0.0f ? 0 : 1; - float E = glm::round(-0.9f); - Error += E == -1.0f ? 0 : 1; - float F = glm::round(-1.5f); - Error += F == -2.0f ? 0 : 1; - float G = glm::round(-1.9f); - Error += G == -2.0f ? 0 : 1; - } + { + float A = glm::round(0.0f); + Error += A == 0.0f ? 0 : 1; + float B = glm::round(0.5f); + Error += B == 1.0f ? 0 : 1; + float C = glm::round(1.0f); + Error += C == 1.0f ? 0 : 1; + float D = glm::round(0.1f); + Error += D == 0.0f ? 0 : 1; + float E = glm::round(0.9f); + Error += E == 1.0f ? 0 : 1; + float F = glm::round(1.5f); + Error += F == 2.0f ? 0 : 1; + float G = glm::round(1.9f); + Error += G == 2.0f ? 0 : 1; + } - return Error; -} + { + float A = glm::round(-0.0f); + Error += A == 0.0f ? 0 : 1; + float B = glm::round(-0.5f); + Error += B == -1.0f ? 0 : 1; + float C = glm::round(-1.0f); + Error += C == -1.0f ? 0 : 1; + float D = glm::round(-0.1f); + Error += D == 0.0f ? 0 : 1; + float E = glm::round(-0.9f); + Error += E == -1.0f ? 0 : 1; + float F = glm::round(-1.5f); + Error += F == -2.0f ? 0 : 1; + float G = glm::round(-1.9f); + Error += G == -2.0f ? 0 : 1; + } + + return Error; + } +}//namespace round_ -int test_roundEven() +namespace roundEven { - int Error = 0; - + int test() { - float A1 = glm::roundEven(-1.5f); - Error += glm::epsilonEqual(A1, -2.0f, 0.0001f) ? 0 : 1; + int Error = 0; - float A2 = glm::roundEven(1.5f); - Error += glm::epsilonEqual(A2, 2.0f, 0.0001f) ? 0 : 1; + { + float A1 = glm::roundEven(-1.5f); + Error += glm::epsilonEqual(A1, -2.0f, 0.0001f) ? 0 : 1; - float A5 = glm::roundEven(-2.5f); - Error += glm::epsilonEqual(A5, -2.0f, 0.0001f) ? 0 : 1; + float A2 = glm::roundEven(1.5f); + Error += glm::epsilonEqual(A2, 2.0f, 0.0001f) ? 0 : 1; - float A6 = glm::roundEven(2.5f); - Error += glm::epsilonEqual(A6, 2.0f, 0.0001f) ? 0 : 1; + float A5 = glm::roundEven(-2.5f); + Error += glm::epsilonEqual(A5, -2.0f, 0.0001f) ? 0 : 1; - float A3 = glm::roundEven(-3.5f); - Error += glm::epsilonEqual(A3, -4.0f, 0.0001f) ? 0 : 1; + float A6 = glm::roundEven(2.5f); + Error += glm::epsilonEqual(A6, 2.0f, 0.0001f) ? 0 : 1; - float A4 = glm::roundEven(3.5f); - Error += glm::epsilonEqual(A4, 4.0f, 0.0001f) ? 0 : 1; + float A3 = glm::roundEven(-3.5f); + Error += glm::epsilonEqual(A3, -4.0f, 0.0001f) ? 0 : 1; - float C7 = glm::roundEven(-4.5f); - Error += glm::epsilonEqual(C7, -4.0f, 0.0001f) ? 0 : 1; + float A4 = glm::roundEven(3.5f); + Error += glm::epsilonEqual(A4, 4.0f, 0.0001f) ? 0 : 1; - float C8 = glm::roundEven(4.5f); - Error += glm::epsilonEqual(C8, 4.0f, 0.0001f) ? 0 : 1; + float C7 = glm::roundEven(-4.5f); + Error += glm::epsilonEqual(C7, -4.0f, 0.0001f) ? 0 : 1; - float C1 = glm::roundEven(-5.5f); - Error += glm::epsilonEqual(C1, -6.0f, 0.0001f) ? 0 : 1; + float C8 = glm::roundEven(4.5f); + Error += glm::epsilonEqual(C8, 4.0f, 0.0001f) ? 0 : 1; - float C2 = glm::roundEven(5.5f); - Error += glm::epsilonEqual(C2, 6.0f, 0.0001f) ? 0 : 1; + float C1 = glm::roundEven(-5.5f); + Error += glm::epsilonEqual(C1, -6.0f, 0.0001f) ? 0 : 1; - float C3 = glm::roundEven(-6.5f); - Error += glm::epsilonEqual(C3, -6.0f, 0.0001f) ? 0 : 1; + float C2 = glm::roundEven(5.5f); + Error += glm::epsilonEqual(C2, 6.0f, 0.0001f) ? 0 : 1; - float C4 = glm::roundEven(6.5f); - Error += glm::epsilonEqual(C4, 6.0f, 0.0001f) ? 0 : 1; + float C3 = glm::roundEven(-6.5f); + Error += glm::epsilonEqual(C3, -6.0f, 0.0001f) ? 0 : 1; - float C5 = glm::roundEven(-7.5f); - Error += glm::epsilonEqual(C5, -8.0f, 0.0001f) ? 0 : 1; + float C4 = glm::roundEven(6.5f); + Error += glm::epsilonEqual(C4, 6.0f, 0.0001f) ? 0 : 1; - float C6 = glm::roundEven(7.5f); - Error += glm::epsilonEqual(C6, 8.0f, 0.0001f) ? 0 : 1; + float C5 = glm::roundEven(-7.5f); + Error += glm::epsilonEqual(C5, -8.0f, 0.0001f) ? 0 : 1; - Error += 0; - } + float C6 = glm::roundEven(7.5f); + Error += glm::epsilonEqual(C6, 8.0f, 0.0001f) ? 0 : 1; - { - float A7 = glm::roundEven(-2.4f); - Error += glm::epsilonEqual(A7, -2.0f, 0.0001f) ? 0 : 1; + Error += 0; + } - float A8 = glm::roundEven(2.4f); - Error += glm::epsilonEqual(A8, 2.0f, 0.0001f) ? 0 : 1; + { + float A7 = glm::roundEven(-2.4f); + Error += glm::epsilonEqual(A7, -2.0f, 0.0001f) ? 0 : 1; - float B1 = glm::roundEven(-2.6f); - Error += glm::epsilonEqual(B1, -3.0f, 0.0001f) ? 0 : 1; + float A8 = glm::roundEven(2.4f); + Error += glm::epsilonEqual(A8, 2.0f, 0.0001f) ? 0 : 1; - float B2 = glm::roundEven(2.6f); - Error += glm::epsilonEqual(B2, 3.0f, 0.0001f) ? 0 : 1; + float B1 = glm::roundEven(-2.6f); + Error += glm::epsilonEqual(B1, -3.0f, 0.0001f) ? 0 : 1; - float B3 = glm::roundEven(-2.0f); - Error += glm::epsilonEqual(B3, -2.0f, 0.0001f) ? 0 : 1; + float B2 = glm::roundEven(2.6f); + Error += glm::epsilonEqual(B2, 3.0f, 0.0001f) ? 0 : 1; - float B4 = glm::roundEven(2.0f); - Error += glm::epsilonEqual(B4, 2.0f, 0.0001f) ? 0 : 1; + float B3 = glm::roundEven(-2.0f); + Error += glm::epsilonEqual(B3, -2.0f, 0.0001f) ? 0 : 1; - Error += 0; - } + float B4 = glm::roundEven(2.0f); + Error += glm::epsilonEqual(B4, 2.0f, 0.0001f) ? 0 : 1; - { - float A = glm::roundEven(0.0f); - Error += A == 0.0f ? 0 : 1; - float B = glm::roundEven(0.5f); - Error += B == 0.0f ? 0 : 1; - float C = glm::roundEven(1.0f); - Error += C == 1.0f ? 0 : 1; - float D = glm::roundEven(0.1f); - Error += D == 0.0f ? 0 : 1; - float E = glm::roundEven(0.9f); - Error += E == 1.0f ? 0 : 1; - float F = glm::roundEven(1.5f); - Error += F == 2.0f ? 0 : 1; - float G = glm::roundEven(1.9f); - Error += G == 2.0f ? 0 : 1; - } + Error += 0; + } - { - float A = glm::roundEven(-0.0f); - Error += A == 0.0f ? 0 : 1; - float B = glm::roundEven(-0.5f); - Error += B == -0.0f ? 0 : 1; - float C = glm::roundEven(-1.0f); - Error += C == -1.0f ? 0 : 1; - float D = glm::roundEven(-0.1f); - Error += D == 0.0f ? 0 : 1; - float E = glm::roundEven(-0.9f); - Error += E == -1.0f ? 0 : 1; - float F = glm::roundEven(-1.5f); - Error += F == -2.0f ? 0 : 1; - float G = glm::roundEven(-1.9f); - Error += G == -2.0f ? 0 : 1; - } + { + float A = glm::roundEven(0.0f); + Error += A == 0.0f ? 0 : 1; + float B = glm::roundEven(0.5f); + Error += B == 0.0f ? 0 : 1; + float C = glm::roundEven(1.0f); + Error += C == 1.0f ? 0 : 1; + float D = glm::roundEven(0.1f); + Error += D == 0.0f ? 0 : 1; + float E = glm::roundEven(0.9f); + Error += E == 1.0f ? 0 : 1; + float F = glm::roundEven(1.5f); + Error += F == 2.0f ? 0 : 1; + float G = glm::roundEven(1.9f); + Error += G == 2.0f ? 0 : 1; + } - { - float A = glm::roundEven(1.5f); - Error += A == 2.0f ? 0 : 1; - float B = glm::roundEven(2.5f); - Error += B == 2.0f ? 0 : 1; - float C = glm::roundEven(3.5f); - Error += C == 4.0f ? 0 : 1; - float D = glm::roundEven(4.5f); - Error += D == 4.0f ? 0 : 1; - float E = glm::roundEven(5.5f); - Error += E == 6.0f ? 0 : 1; - float F = glm::roundEven(6.5f); - Error += F == 6.0f ? 0 : 1; - float G = glm::roundEven(7.5f); - Error += G == 8.0f ? 0 : 1; - } + { + float A = glm::roundEven(-0.0f); + Error += A == 0.0f ? 0 : 1; + float B = glm::roundEven(-0.5f); + Error += B == -0.0f ? 0 : 1; + float C = glm::roundEven(-1.0f); + Error += C == -1.0f ? 0 : 1; + float D = glm::roundEven(-0.1f); + Error += D == 0.0f ? 0 : 1; + float E = glm::roundEven(-0.9f); + Error += E == -1.0f ? 0 : 1; + float F = glm::roundEven(-1.5f); + Error += F == -2.0f ? 0 : 1; + float G = glm::roundEven(-1.9f); + Error += G == -2.0f ? 0 : 1; + } + + { + float A = glm::roundEven(1.5f); + Error += A == 2.0f ? 0 : 1; + float B = glm::roundEven(2.5f); + Error += B == 2.0f ? 0 : 1; + float C = glm::roundEven(3.5f); + Error += C == 4.0f ? 0 : 1; + float D = glm::roundEven(4.5f); + Error += D == 4.0f ? 0 : 1; + float E = glm::roundEven(5.5f); + Error += E == 6.0f ? 0 : 1; + float F = glm::roundEven(6.5f); + Error += F == 6.0f ? 0 : 1; + float G = glm::roundEven(7.5f); + Error += G == 8.0f ? 0 : 1; + } - { - float A = glm::roundEven(-1.5f); - Error += A == -2.0f ? 0 : 1; - float B = glm::roundEven(-2.5f); - Error += B == -2.0f ? 0 : 1; - float C = glm::roundEven(-3.5f); - Error += C == -4.0f ? 0 : 1; - float D = glm::roundEven(-4.5f); - Error += D == -4.0f ? 0 : 1; - float E = glm::roundEven(-5.5f); - Error += E == -6.0f ? 0 : 1; - float F = glm::roundEven(-6.5f); - Error += F == -6.0f ? 0 : 1; - float G = glm::roundEven(-7.5f); - Error += G == -8.0f ? 0 : 1; + { + float A = glm::roundEven(-1.5f); + Error += A == -2.0f ? 0 : 1; + float B = glm::roundEven(-2.5f); + Error += B == -2.0f ? 0 : 1; + float C = glm::roundEven(-3.5f); + Error += C == -4.0f ? 0 : 1; + float D = glm::roundEven(-4.5f); + Error += D == -4.0f ? 0 : 1; + float E = glm::roundEven(-5.5f); + Error += E == -6.0f ? 0 : 1; + float F = glm::roundEven(-6.5f); + Error += F == -6.0f ? 0 : 1; + float G = glm::roundEven(-7.5f); + Error += G == -8.0f ? 0 : 1; + } + + return Error; } +}//namespace roundEven - return Error; -} - -int test_isnan() +namespace isnan_ { - int Error = 0; - - float Zero_f = 0.0; - double Zero_d = 0.0; - + int test() { - Error += true == glm::isnan(0.0/Zero_d) ? 0 : 1; - Error += true == glm::any(glm::isnan(glm::dvec2(0.0 / Zero_d))) ? 0 : 1; - Error += true == glm::any(glm::isnan(glm::dvec3(0.0 / Zero_d))) ? 0 : 1; - Error += true == glm::any(glm::isnan(glm::dvec4(0.0 / Zero_d))) ? 0 : 1; - } + int Error = 0; - { - Error += true == glm::isnan(0.0f/Zero_f) ? 0 : 1; - Error += true == glm::any(glm::isnan(glm::vec2(0.0f/Zero_f))) ? 0 : 1; - Error += true == glm::any(glm::isnan(glm::vec3(0.0f/Zero_f))) ? 0 : 1; - Error += true == glm::any(glm::isnan(glm::vec4(0.0f/Zero_f))) ? 0 : 1; - } + float Zero_f = 0.0; + double Zero_d = 0.0; - return Error; -} - -int test_isinf() + { + Error += true == glm::isnan(0.0/Zero_d) ? 0 : 1; + Error += true == glm::any(glm::isnan(glm::dvec2(0.0 / Zero_d))) ? 0 : 1; + Error += true == glm::any(glm::isnan(glm::dvec3(0.0 / Zero_d))) ? 0 : 1; + Error += true == glm::any(glm::isnan(glm::dvec4(0.0 / Zero_d))) ? 0 : 1; + } + + { + Error += true == glm::isnan(0.0f/Zero_f) ? 0 : 1; + Error += true == glm::any(glm::isnan(glm::vec2(0.0f/Zero_f))) ? 0 : 1; + Error += true == glm::any(glm::isnan(glm::vec3(0.0f/Zero_f))) ? 0 : 1; + Error += true == glm::any(glm::isnan(glm::vec4(0.0f/Zero_f))) ? 0 : 1; + } + + return Error; + } +}//namespace isnan_ + +namespace isinf_ { - int Error = 0; - - float Zero_f = 0.0; - double Zero_d = 0.0; + int test() + { + int Error = 0; - { - Error += true == glm::isinf( 1.0/Zero_d) ? 0 : 1; - Error += true == glm::isinf(-1.0/Zero_d) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::dvec2( 1.0/Zero_d))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::dvec2(-1.0/Zero_d))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::dvec3( 1.0/Zero_d))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::dvec3(-1.0/Zero_d))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::dvec4( 1.0/Zero_d))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::dvec4(-1.0/Zero_d))) ? 0 : 1; + float Zero_f = 0.0; + double Zero_d = 0.0; + + { + Error += true == glm::isinf( 1.0/Zero_d) ? 0 : 1; + Error += true == glm::isinf(-1.0/Zero_d) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::dvec2( 1.0/Zero_d))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::dvec2(-1.0/Zero_d))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::dvec3( 1.0/Zero_d))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::dvec3(-1.0/Zero_d))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::dvec4( 1.0/Zero_d))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::dvec4(-1.0/Zero_d))) ? 0 : 1; + } + + { + Error += true == glm::isinf( 1.0f/Zero_f) ? 0 : 1; + Error += true == glm::isinf(-1.0f/Zero_f) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::vec2( 1.0f/Zero_f))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::vec2(-1.0f/Zero_f))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::vec3( 1.0f/Zero_f))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::vec3(-1.0f/Zero_f))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::vec4( 1.0f/Zero_f))) ? 0 : 1; + Error += true == glm::any(glm::isinf(glm::vec4(-1.0f/Zero_f))) ? 0 : 1; + } + + return Error; } - - { - Error += true == glm::isinf( 1.0f/Zero_f) ? 0 : 1; - Error += true == glm::isinf(-1.0f/Zero_f) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::vec2( 1.0f/Zero_f))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::vec2(-1.0f/Zero_f))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::vec3( 1.0f/Zero_f))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::vec3(-1.0f/Zero_f))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::vec4( 1.0f/Zero_f))) ? 0 : 1; - Error += true == glm::any(glm::isinf(glm::vec4(-1.0f/Zero_f))) ? 0 : 1; - } - - return Error; -} +}//namespace isinf_ namespace sign { @@ -1018,18 +1053,18 @@ int main() int Error(0); Error += sign::test(); - Error += test_floor(); - Error += test_modf(); - Error += test_floatBitsToInt(); - Error += test_floatBitsToUint(); - Error += test_step::run(); - Error += test_max(); - Error += test_min(); - Error += test_mix::run(); - Error += test_round(); - Error += test_roundEven(); - Error += test_isnan(); - Error += test_isinf(); + Error += floor_::test(); + Error += modf_::test(); + Error += floatBitsToInt::test(); + Error += floatBitsToUint::test(); + Error += step_::test(); + Error += max_::test(); + Error += min_::test(); + Error += mix_::test(); + Error += round_::test(); + Error += roundEven::test(); + Error += isnan_::test(); + Error += isinf_::test(); # ifdef GLM_TEST_ENABLE_PERF Error += sign::perf(); diff --git a/test/core/core_type_mat4x4.cpp b/test/core/core_type_mat4x4.cpp index d9396c37..cd1239a7 100644 --- a/test/core/core_type_mat4x4.cpp +++ b/test/core/core_type_mat4x4.cpp @@ -13,16 +13,9 @@ #include #include -void print(glm::dmat4 const & Mat0) -{ - printf("mat4(\n"); - printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[0][0], Mat0[0][1], Mat0[0][2], Mat0[0][3]); - printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[1][0], Mat0[1][1], Mat0[1][2], Mat0[1][3]); - printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[2][0], Mat0[2][1], Mat0[2][2], Mat0[2][3]); - printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f))\n\n", Mat0[3][0], Mat0[3][1], Mat0[3][2], Mat0[3][3]); -} -void print(glm::mat4 const & Mat0) +template +void print(genType const & Mat0) { printf("mat4(\n"); printf("\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\n", Mat0[0][0], Mat0[0][1], Mat0[0][2], Mat0[0][3]);