From d8c3672bce7edfb82534c3c33e7cbe86afb7cf11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Sat, 11 Nov 2023 07:42:44 -0800 Subject: [PATCH] Allow 0 as alignment value. --- include/bx/inline/uint32_t.inl | 8 ++++---- tests/uint32_test.cpp | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) 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) );