#include "Test.h"
#include "SkColor.h"
#include "SkUnPreMultiply.h"
static void test_premul(skiatest::Reporter* reporter) {
for (int a = 0; a <= 255; a++) {
for (int x = 0; x <= 255; x++) {
SkColor c0 = SkColorSetARGB(a, x, x, x);
SkPMColor p0 = SkPreMultiplyColor(c0);
SkColor c1 = SkUnPreMultiply::PMColorToColor(p0);
SkPMColor p1 = SkPreMultiplyColor(c1);
// we can't promise that c0 == c1, since c0 -> p0 is a many to one
// function, however, we can promise that p0 -> c1 -> p1 : p0 == p1
REPORTER_ASSERT(reporter, p0 == p1);
{
int ax = SkMulDiv255Ceiling(x, a);
REPORTER_ASSERT(reporter, ax <= a);
}
}
}
}
static void TestColor(skiatest::Reporter* reporter) {
test_premul(reporter);
}
#include "TestClassDef.h"
DEFINE_TESTCLASS("Color", ColorTestClass, TestColor)