diff --git a/include/bx/inline/uint32_t.inl b/include/bx/inline/uint32_t.inl index 7db3788..d5c9e49 100644 --- a/include/bx/inline/uint32_t.inl +++ b/include/bx/inline/uint32_t.inl @@ -708,7 +708,7 @@ namespace bx template inline BX_CONSTEXPR_FUNC bool isAligned(Ty _a, int32_t _align) { - const Ty mask = Ty(_align - 1); + const Ty mask = Ty(max(1, _align) - 1); return 0 == (_a & mask); } @@ -727,9 +727,9 @@ namespace bx } template - inline BX_CONSTEXPR_FUNC Ty alignDown(Ty _a, int32_t _align) + inline BX_CONSTEXPR_FUNC Ty alignDown(Ty _a, int32_t _align) { - const Ty mask = Ty(_align - 1); + const Ty mask = Ty(max(1, _align) - 1); return Ty(_a & ~mask); } @@ -752,7 +752,7 @@ namespace bx template inline BX_CONSTEXPR_FUNC Ty alignUp(Ty _a, int32_t _align) { - const Ty mask = Ty(_align - 1); + const Ty mask = Ty(max(1, _align) - 1); return Ty( (_a + mask) & ~mask); } diff --git a/tests/uint32_test.cpp b/tests/uint32_test.cpp index 0618c01..5d5fb6b 100644 --- a/tests/uint32_test.cpp +++ b/tests/uint32_test.cpp @@ -141,6 +141,13 @@ TEST_CASE("align", "[uint32_t]") REQUIRE( bx::isAligned(64, 8) ); REQUIRE(!bx::isAligned(63, 8) ); + for (int32_t ii = 0; ii < 1024; ++ii) + { + REQUIRE(bx::isAligned(ii, 0) ); + REQUIRE(ii == bx::alignUp(ii, 0) ); + REQUIRE(ii == bx::alignDown(ii, 0) ); + } + REQUIRE( 0 == bx::alignUp( 0, 16) ); REQUIRE( 16 == bx::alignUp( 1, 16) ); REQUIRE( 16 == bx::alignUp( 15, 16) );