Index: tests/MathTest.cpp |
=================================================================== |
--- tests/MathTest.cpp (revision 8804) |
+++ tests/MathTest.cpp (working copy) |
@@ -48,6 +48,32 @@ |
/////////////////////////////////////////////////////////////////////////////// |
+// test that SkMul16ShiftRound and SkMulDiv255Round return the same result |
+static void test_muldivround(skiatest::Reporter* reporter) { |
+#if 0 |
+ // this "complete" test is too slow, so we test a random sampling of it |
+ |
+ for (int a = 0; a <= 32767; ++a) { |
+ for (int b = 0; b <= 32767; ++b) { |
+ unsigned prod0 = SkMul16ShiftRound(a, b, 8); |
+ unsigned prod1 = SkMulDiv255Round(a, b); |
+ SkASSERT(prod0 == prod1); |
+ } |
+ } |
+#endif |
+ |
+ SkRandom rand; |
+ for (int i = 0; i < 10000; ++i) { |
+ unsigned a = rand.nextU() & 0x7FFF; |
+ unsigned b = rand.nextU() & 0x7FFF; |
+ |
+ unsigned prod0 = SkMul16ShiftRound(a, b, 8); |
+ unsigned prod1 = SkMulDiv255Round(a, b); |
+ |
+ REPORTER_ASSERT(reporter, prod0 == prod1); |
+ } |
+} |
+ |
static float float_blend(int src, int dst, float unit) { |
return dst + (src - dst) * unit; |
} |
@@ -595,6 +621,8 @@ |
// disable for now |
if (false) test_blend31(); // avoid bit rot, suppress warning |
+ |
+ test_muldivround(reporter); |
} |
#include "TestClassDef.h" |