dawn/common: Handle zero input in RoundUp function
The RoundUp function previously asserted that n > 0.
This change allows n = 0 as input, returning 0 as the result.
Change-Id: I48c0a04becb9d5b9b75c08a68805524739f797c6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/257474
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/common/Math.cpp b/src/dawn/common/Math.cpp
index c896cce..49864e8 100644
--- a/src/dawn/common/Math.cpp
+++ b/src/dawn/common/Math.cpp
@@ -129,7 +129,6 @@
uint64_t RoundUp(uint64_t n, uint64_t m) {
DAWN_ASSERT(m > 0);
- DAWN_ASSERT(n > 0);
DAWN_ASSERT(m <= std::numeric_limits<uint64_t>::max() - n);
return ((n + m - 1) / m) * m;
}
diff --git a/src/dawn/tests/unittests/MathTests.cpp b/src/dawn/tests/unittests/MathTests.cpp
index 79c3a7d..43ec498 100644
--- a/src/dawn/tests/unittests/MathTests.cpp
+++ b/src/dawn/tests/unittests/MathTests.cpp
@@ -346,20 +346,33 @@
// Tests for RoundUp
TEST(Math, RoundUp) {
+ // Test with n = 0
+ ASSERT_EQ(RoundUp(0u, 1u), 0u);
+ ASSERT_EQ(RoundUp(0u, 2u), 0u);
+ ASSERT_EQ(RoundUp(0u, 4u), 0u);
+ ASSERT_EQ(RoundUp(0u, 8u), 0u);
+ ASSERT_EQ(RoundUp(0u, 1000u), 0u);
+
+ // Test with n > 0, already multiples
ASSERT_EQ(RoundUp(2u, 2u), 2u);
- ASSERT_EQ(RoundUp(2u, 4u), 4u);
ASSERT_EQ(RoundUp(6u, 2u), 6u);
ASSERT_EQ(RoundUp(8u, 4u), 8u);
ASSERT_EQ(RoundUp(12u, 6u), 12u);
-
ASSERT_EQ(RoundUp(3u, 3u), 3u);
+
+ // Test with n > 0, not multiples
+ ASSERT_EQ(RoundUp(2u, 4u), 4u);
ASSERT_EQ(RoundUp(3u, 5u), 5u);
ASSERT_EQ(RoundUp(5u, 3u), 6u);
ASSERT_EQ(RoundUp(9u, 5u), 10u);
+ // Test with m = 1 (should return n unchanged)
+ ASSERT_EQ(RoundUp(1u, 1u), 1u);
+ ASSERT_EQ(RoundUp(2u, 1u), 2u);
+ ASSERT_EQ(RoundUp(100u, 1u), 100u);
+
// Test extrema
ASSERT_EQ(RoundUp(0x7FFFFFFFFFFFFFFFull, 0x8000000000000000ull), 0x8000000000000000ull);
- ASSERT_EQ(RoundUp(1u, 1u), 1u);
}
// Tests for IsSubset