Index: tests/PathOpsCubicLineIntersectionTest.cpp |
diff --git a/tests/PathOpsCubicLineIntersectionTest.cpp b/tests/PathOpsCubicLineIntersectionTest.cpp |
index 1a2e18858916e73adaa1ceabac2754dfec12ad32..234a53805f6aad63ce90f75a97bba961feea1235 100644 |
--- a/tests/PathOpsCubicLineIntersectionTest.cpp |
+++ b/tests/PathOpsCubicLineIntersectionTest.cpp |
@@ -49,6 +49,13 @@ static void testFail(skiatest::Reporter* reporter, int iIndex) { |
} |
static lineCubic lineCubicTests[] = { |
+ {{{{-634.60540771484375, -481.262939453125}, {266.2696533203125, -752.70867919921875}, |
+ {-751.8370361328125, -317.37921142578125}, {-969.7427978515625, 824.7255859375}}}, |
+ {{{-287.9506133720805678, -557.1376476615772617}, |
+ {-285.9506133720805678, -557.1376476615772617}}}}, |
+ |
+ {{{{36.7184372,0.888650894}, {36.7184372,0.888650894}, {35.1233864,0.554015458}, |
+ {34.5114098,-0.115255356}}}, {{{35.4531212,0}, {31.9375,0}}}}, |
{{{{421, 378}, {421, 380.209137f}, {418.761414f, 382}, {416, 382}}}, |
{{{320, 378}, {421, 378.000031f}}}}, |
@@ -83,6 +90,32 @@ static lineCubic lineCubicTests[] = { |
static const size_t lineCubicTests_count = SK_ARRAY_COUNT(lineCubicTests); |
+static int doIntersect(SkIntersections& intersections, const SkDCubic& cubic, const SkDLine& line) { |
+ int result; |
+ bool flipped = false; |
+ if (line[0].fX == line[1].fX) { |
+ double top = line[0].fY; |
+ double bottom = line[1].fY; |
+ flipped = top > bottom; |
+ if (flipped) { |
+ SkTSwap<double>(top, bottom); |
+ } |
+ result = intersections.vertical(cubic, top, bottom, line[0].fX, flipped); |
+ } else if (line[0].fY == line[1].fY) { |
+ double left = line[0].fX; |
+ double right = line[1].fX; |
+ flipped = left > right; |
+ if (flipped) { |
+ SkTSwap<double>(left, right); |
+ } |
+ result = intersections.horizontal(cubic, left, right, line[0].fY, flipped); |
+ } else { |
+ intersections.intersect(cubic, line); |
+ result = intersections.used(); |
+ } |
+ return result; |
+} |
+ |
static void testOne(skiatest::Reporter* reporter, int iIndex) { |
const SkDCubic& cubic = lineCubicTests[iIndex].cubic; |
SkASSERT(ValidCubic(cubic)); |
@@ -102,7 +135,7 @@ static void testOne(skiatest::Reporter* reporter, int iIndex) { |
} |
if (order1 == 4 && order2 == 2) { |
SkIntersections i; |
- int roots = i.intersect(cubic, line); |
+ int roots = doIntersect(i, cubic, line); |
for (int pt = 0; pt < roots; ++pt) { |
double tt1 = i[0][pt]; |
SkDPoint xy1 = cubic.ptAtT(tt1); |