| Index: tests/MathTest.cpp
|
| diff --git a/tests/MathTest.cpp b/tests/MathTest.cpp
|
| index cb4d0b8bd2e8f281ad905eff5961004ab9f391a9..bc8e6a32de886ff16a13d1589bf207b86603da1a 100644
|
| --- a/tests/MathTest.cpp
|
| +++ b/tests/MathTest.cpp
|
| @@ -691,3 +691,74 @@ static void TestEndian(skiatest::Reporter* reporter) {
|
| }
|
|
|
| DEFINE_TESTCLASS("Endian", EndianTestClass, TestEndian)
|
| +
|
| +template <typename T>
|
| +static void test_divmod(skiatest::Reporter* r) {
|
| + const struct {
|
| + T numer;
|
| + T denom;
|
| + } kEdgeCases[] = {
|
| + {(T)17, (T)17},
|
| + {(T)17, (T)4},
|
| + {(T)0, (T)17},
|
| + // For unsigned T these negatives are just some large numbers. Doesn't hurt to test them.
|
| + {(T)-17, (T)-17},
|
| + {(T)-17, (T)4},
|
| + {(T)17, (T)-4},
|
| + {(T)-17, (T)-4},
|
| + };
|
| +
|
| + for (size_t i = 0; i < SK_ARRAY_COUNT(kEdgeCases); i++) {
|
| + const T numer = kEdgeCases[i].numer;
|
| + const T denom = kEdgeCases[i].denom;
|
| + T div, mod;
|
| + SkTDivMod(numer, denom, &div, &mod);
|
| + REPORTER_ASSERT(r, numer/denom == div);
|
| + REPORTER_ASSERT(r, numer%denom == mod);
|
| + }
|
| +
|
| + SkRandom rand;
|
| + for (size_t i = 0; i < 10000; i++) {
|
| + const T numer = (T)rand.nextS();
|
| + T denom = 0;
|
| + while (0 == denom) {
|
| + denom = (T)rand.nextS();
|
| + }
|
| + T div, mod;
|
| + SkTDivMod(numer, denom, &div, &mod);
|
| + REPORTER_ASSERT(r, numer/denom == div);
|
| + REPORTER_ASSERT(r, numer%denom == mod);
|
| + }
|
| +}
|
| +
|
| +DEF_TEST(divmod_u8, r) {
|
| + test_divmod<uint8_t>(r);
|
| +}
|
| +
|
| +DEF_TEST(divmod_u16, r) {
|
| + test_divmod<uint16_t>(r);
|
| +}
|
| +
|
| +DEF_TEST(divmod_u32, r) {
|
| + test_divmod<uint32_t>(r);
|
| +}
|
| +
|
| +DEF_TEST(divmod_u64, r) {
|
| + test_divmod<uint64_t>(r);
|
| +}
|
| +
|
| +DEF_TEST(divmod_s8, r) {
|
| + test_divmod<int8_t>(r);
|
| +}
|
| +
|
| +DEF_TEST(divmod_s16, r) {
|
| + test_divmod<int16_t>(r);
|
| +}
|
| +
|
| +DEF_TEST(divmod_s32, r) {
|
| + test_divmod<int32_t>(r);
|
| +}
|
| +
|
| +DEF_TEST(divmod_s64, r) {
|
| + test_divmod<int64_t>(r);
|
| +}
|
|
|