aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/MathTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/MathTest.cpp')
-rw-r--r--tests/MathTest.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/MathTest.cpp b/tests/MathTest.cpp
index 41a4104bd4..35b4136b44 100644
--- a/tests/MathTest.cpp
+++ b/tests/MathTest.cpp
@@ -685,3 +685,41 @@ DEF_TEST(divmod_s32, r) {
DEF_TEST(divmod_s64, r) {
test_divmod<int64_t>(r);
}
+
+static void test_nextsizepow2(skiatest::Reporter* r, size_t test, size_t expectedAns) {
+ size_t ans = GrNextSizePow2(test);
+
+ REPORTER_ASSERT(r, ans == expectedAns);
+ //SkDebugf("0x%zx -> 0x%zx (0x%zx)\n", test, ans, expectedAns);
+}
+
+DEF_TEST(GrNextSizePow2, reporter) {
+ constexpr int kNumSizeTBits = 8 * sizeof(size_t);
+
+ size_t test = 0, expectedAns = 1;
+
+ test_nextsizepow2(reporter, test, expectedAns);
+
+ test = 1; expectedAns = 1;
+
+ for (int i = 1; i < kNumSizeTBits; ++i) {
+ test_nextsizepow2(reporter, test, expectedAns);
+
+ test++;
+ expectedAns <<= 1;
+
+ test_nextsizepow2(reporter, test, expectedAns);
+
+ test = expectedAns;
+ }
+
+ // For the remaining three tests there is no higher power (of 2)
+ test = 0x1;
+ test <<= kNumSizeTBits-1;
+ test_nextsizepow2(reporter, test, test);
+
+ test++;
+ test_nextsizepow2(reporter, test, test);
+
+ test_nextsizepow2(reporter, SIZE_MAX, SIZE_MAX);
+}