add unittests for roundtripping premul

BUG=skia:5579
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2179123005

Review-Url: https://codereview.chromium.org/2179123005
diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp
index 34660d8..dd40f36 100644
--- a/tests/ImageTest.cpp
+++ b/tests/ImageTest.cpp
@@ -938,3 +938,57 @@
     }
 }
 #endif
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+static void make_all_premul(SkBitmap* bm) {
+    bm->allocPixels(SkImageInfo::MakeN32(256, 256, kPremul_SkAlphaType));
+    for (int a = 0; a < 256; ++a) {
+        for (int r = 0; r < 256; ++r) {
+            // make all valid premul combinations
+            int c = SkTMin(a, r);
+            *bm->getAddr32(a, r) = SkPackARGB32(a, c, c, c);
+        }
+    }
+}
+
+static bool equal(const SkBitmap& a, const SkBitmap& b) {
+    SkASSERT(a.width() == b.width());
+    SkASSERT(a.height() == b.height());
+    for (int y = 0; y < a.height(); ++y) {
+        if (0 != memcmp(a.getAddr32(0, y), b.getAddr32(0, y), a.width() * sizeof(SkPMColor))) {
+            return false;
+        }
+    }
+    return true;
+}
+
+DEF_TEST(image_roundtrip_encode, reporter) {
+    SkBitmap bm0;
+    make_all_premul(&bm0);
+
+    auto img0 = SkImage::MakeFromBitmap(bm0);
+    sk_sp<SkData> data(img0->encode(SkImageEncoder::kPNG_Type, 100));
+    auto img1 = SkImage::MakeFromEncoded(data);
+    
+    SkBitmap bm1;
+    bm1.allocPixels(SkImageInfo::MakeN32(256, 256, kPremul_SkAlphaType));
+    img1->readPixels(bm1.info(), bm1.getPixels(), bm1.rowBytes(), 0, 0);
+    
+    REPORTER_ASSERT(reporter, equal(bm0, bm1));
+}
+
+DEF_TEST(image_roundtrip_premul, reporter) {
+    SkBitmap bm0;
+    make_all_premul(&bm0);
+
+    SkBitmap bm1;
+    bm1.allocPixels(SkImageInfo::MakeN32(256, 256, kUnpremul_SkAlphaType));
+    bm0.readPixels(bm1.info(), bm1.getPixels(), bm1.rowBytes(), 0, 0);
+
+    SkBitmap bm2;
+    bm2.allocPixels(SkImageInfo::MakeN32(256, 256, kPremul_SkAlphaType));
+    bm1.readPixels(bm2.info(), bm2.getPixels(), bm2.rowBytes(), 0, 0);
+
+    REPORTER_ASSERT(reporter, equal(bm0, bm2));
+}