| Index: tests/GradientTest.cpp | 
| diff --git a/tests/GradientTest.cpp b/tests/GradientTest.cpp | 
| index 8d73569f649d53ff04be9837f400f38579c08ff1..6a277d520efa64d51b654d853cf0297bff95ac31 100644 | 
| --- a/tests/GradientTest.cpp | 
| +++ b/tests/GradientTest.cpp | 
| @@ -212,9 +212,31 @@ static void test_nearly_vertical(skiatest::Reporter* reporter) { | 
| surface->getCanvas()->drawPaint(paint); | 
| } | 
|  | 
| +// A linear gradient interval can, due to numerical imprecision (likely in the divide) | 
| +// finish an interval with the final fx not landing outside of [p0...p1]. | 
| +// The old code had an assert which this test triggered. | 
| +// We now explicitly clamp the resulting fx value. | 
| +static void test_linear_fuzz(skiatest::Reporter* reporter) { | 
| +    SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(1300, 630)); | 
| + | 
| +    const SkPoint pts[] = {{ 179.5f, -179.5f }, { 1074.5f, 715.5f }}; | 
| +    const SkColor colors[] = { SK_ColorBLACK, SK_ColorWHITE, SK_ColorBLACK, SK_ColorWHITE }; | 
| +    const SkScalar pos[] = {0, 0.200000003f, 0.800000012f, 1 }; | 
| + | 
| + | 
| +    SkAutoTUnref<SkShader> gradient( | 
| +                   SkGradientShader::CreateLinear(pts, colors, pos, 4, SkShader::kClamp_TileMode)); | 
| + | 
| +    SkPaint paint; | 
| +    paint.setShader(gradient); | 
| +    SkRect r = {0, 83, 1254, 620}; | 
| +    surface->getCanvas()->drawRect(r, paint); | 
| +} | 
| + | 
| DEF_TEST(Gradient, reporter) { | 
| TestGradientShaders(reporter); | 
| TestConstantGradient(reporter); | 
| test_big_grad(reporter); | 
| test_nearly_vertical(reporter); | 
| +    test_linear_fuzz(reporter); | 
| } | 
|  |