diff --git a/glm/detail/func_integer.inl b/glm/detail/func_integer.inl index 1e8e309d..6ad5c46c 100644 --- a/glm/detail/func_integer.inl +++ b/glm/detail/func_integer.inl @@ -116,7 +116,7 @@ namespace glm Borrow = mix(vecType(1), vecType(0), greaterThanEqual(x, y)); vecType const YgeX(y - x); vecType const XgeY(vecType((static_cast(1) << static_cast(32)) + (vecType(y) - vecType(x)))); - return mix(XgeY, YgeX, y >= x); + return mix(XgeY, YgeX, greaterThanEqual(y, x)); } // umulExtended diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index edb8ac42..044c8644 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -8,6 +8,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// #include +#include #include enum result @@ -225,14 +226,58 @@ namespace usubBorrow { int Error(0); - glm::uint x = 16; - glm::uint y = 17; - glm::uint Borrow = 0; - glm::uint Result = glm::usubBorrow(x, y, Borrow); - + { + glm::uint x = 16; + glm::uint y = 17; + glm::uint Borrow = 0; + glm::uint Result = glm::usubBorrow(x, y, Borrow); + + Error += Borrow == 1 ? 0 : 1; + Error += Result == 1 ? 0 : 1; + } + + { + glm::uvec1 x(16); + glm::uvec1 y(17); + glm::uvec1 Borrow(0); + glm::uvec1 Result(glm::usubBorrow(x, y, Borrow)); + + Error += glm::all(glm::equal(Borrow, glm::uvec1(1))) ? 0 : 1; + Error += glm::all(glm::equal(Result, glm::uvec1(1))) ? 0 : 1; + } + + { + glm::uvec2 x(16); + glm::uvec2 y(17); + glm::uvec2 Borrow(0); + glm::uvec2 Result(glm::usubBorrow(x, y, Borrow)); + + Error += glm::all(glm::equal(Borrow, glm::uvec2(1))) ? 0 : 1; + Error += glm::all(glm::equal(Result, glm::uvec2(1))) ? 0 : 1; + } + + { + glm::uvec3 x(16); + glm::uvec3 y(17); + glm::uvec3 Borrow(0); + glm::uvec3 Result(glm::usubBorrow(x, y, Borrow)); + + Error += glm::all(glm::equal(Borrow, glm::uvec3(1))) ? 0 : 1; + Error += glm::all(glm::equal(Result, glm::uvec3(1))) ? 0 : 1; + } + + { + glm::uvec4 x(16); + glm::uvec4 y(17); + glm::uvec4 Borrow(0); + glm::uvec4 Result(glm::usubBorrow(x, y, Borrow)); + + Error += glm::all(glm::equal(Borrow, glm::uvec4(1))) ? 0 : 1; + Error += glm::all(glm::equal(Result, glm::uvec4(1))) ? 0 : 1; + } + return Error; } - }//namespace usubBorrow int main() @@ -241,6 +286,7 @@ int main() std::cout << "sizeof(glm::uint64): " << sizeof(glm::detail::uint64) << std::endl; + Error += ::usubBorrow::test(); Error += ::bitfieldExtract::test(); Error += ::bitfieldReverse::test(); Error += ::findMSB::test();