make sure to_srgb maps 1 to 1

CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-SK_CPU_LIMIT_SSE2,Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-SK_CPU_LIMIT_SSE41,Test-Android-Clang-Nexus10-CPU-Exynos5250-arm-Release-Android,Test-Android-Clang-PixelC-CPU-TegraX1-arm64-Release-Android,Test-Android-Clang-Ci20-CPU-IngenicJZ4780-mipsel-Release-Android

BUG=skia:6678,skia:6683

Change-Id: I217084fa0a11ad661a8751f0c3b1cade5cc52473
Reviewed-on: https://skia-review.googlesource.com/17902
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
diff --git a/tests/SRGBTest.cpp b/tests/SRGBTest.cpp
index 78855a3..b1e4570 100644
--- a/tests/SRGBTest.cpp
+++ b/tests/SRGBTest.cpp
@@ -5,6 +5,7 @@
  * found in the LICENSE file.
  */
 
+#include "SkPM4f.h"
 #include "SkRasterPipeline.h"
 #include "SkSRGB.h"
 #include "SkTypes.h"
@@ -61,3 +62,26 @@
         }
     }
 }
+
+DEF_TEST(sk_pipeline_srgb_edge_cases, r) {
+    // We need to run at least 4 pixels to make sure we hit all specializations.
+    SkPM4f colors[4] = { {{0,1,1,1}}, {{0,0,0,0}}, {{0,0,0,0}}, {{0,0,0,0}} };
+    auto& color = colors[0];
+    void* dst = &color;
+
+    SkRasterPipeline_<256> p;
+    p.append(SkRasterPipeline::constant_color, &color);
+    p.append(SkRasterPipeline::to_srgb);
+    p.append(SkRasterPipeline::store_f32, &dst);
+    p.run(0,4);
+
+    if (color.r() != 0.0f) {
+        ERRORF(r, "expected to_srgb() to map 0.0f to 0.0f, got %f", color.r());
+    }
+    if (color.g() != 1.0f) {
+        float f = color.g();
+        uint32_t x;
+        memcpy(&x, &f, 4);
+        ERRORF(r, "expected to_srgb() to map 1.0f to 1.0f, got %f (%08x)", color.g(), x);
+    }
+}