Index: tests/MipMapTest.cpp |
diff --git a/tests/MipMapTest.cpp b/tests/MipMapTest.cpp |
index 467fd34998f32d1afb75e28f78ff7988600b9141..5070d04df67989fa2169c4743829665d300d337c 100644 |
--- a/tests/MipMapTest.cpp |
+++ b/tests/MipMapTest.cpp |
@@ -150,3 +150,50 @@ DEF_TEST(MipMap_ComputeLevelCount, reporter) { |
REPORTER_ASSERT(reporter, currentTest.fExpectedLevelCount == levelCount); |
} |
} |
+ |
+struct LevelSizeScenario { |
+ int fBaseWidth; |
+ int fBaseHeight; |
+ int fLevel; |
+ SkSize fExpectedMipMapLevelSize; |
+}; |
+ |
+DEF_TEST(MipMap_ComputeLevelSize, reporter) { |
+ const LevelSizeScenario tests[] = { |
+ // Test mipmaps with negative sizes |
+ {-100, 100, 1, SkSize::Make(0, 0)}, |
+ {100, -100, 1, SkSize::Make(0, 0)}, |
+ {-100, -100, 1, SkSize::Make(0, 0)}, |
+ |
+ // Test mipmaps with 0, 1, 2 as dimensions |
+ // (SkMipMap::Build requires a min size of 1) |
+ // |
+ // 0 |
+ {0, 100, 1, SkSize::Make(0, 0)}, |
+ {100, 0, 1, SkSize::Make(0, 0)}, |
+ {0, 0, 1, SkSize::Make(0, 0)}, |
+ // 1 |
+ |
+ {1, 100, 1, SkSize::Make(1, 50)}, |
+ {100, 1, 1, SkSize::Make(50, 1)}, |
+ {1, 1, 1, SkSize::Make(0, 0)}, |
+ // 2 |
+ {2, 100, 1, SkSize::Make(1, 50)}, |
+ {100, 2, 2, SkSize::Make(25, 1)}, |
+ {2, 2, 1, SkSize::Make(1, 1)}, |
+ |
+ // Test a handful of cases |
+ {63, 63, 3, SkSize::Make(7, 7)}, |
+ {64, 64, 3, SkSize::Make(8, 8)}, |
+ {127, 127, 3, SkSize::Make(15, 15)}, |
+ {64, 129, 4, SkSize::Make(4, 8)}, |
+ {255, 32, 7, SkSize::Make(1, 1)}, |
+ {500, 1000, 2, SkSize::Make(125, 250)}, |
+ }; |
+ |
+ for (auto& currentTest : tests) { |
+ SkSize levelSize = SkMipMap::ComputeLevelSize(currentTest.fBaseWidth, |
+ currentTest.fBaseHeight, currentTest.fLevel); |
+ REPORTER_ASSERT(reporter, currentTest.fExpectedMipMapLevelSize == levelSize); |
+ } |
+} |