path ops work in progress

make more skps work

remove edit files

BUG=

Review URL: https://codereview.chromium.org/23542056

git-svn-id: http://skia.googlecode.com/svn/trunk@11570 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/PathOpsOpTest.cpp b/tests/PathOpsOpTest.cpp
index dee99db..4d03577 100644
--- a/tests/PathOpsOpTest.cpp
+++ b/tests/PathOpsOpTest.cpp
@@ -712,7 +712,6 @@
     testPathOp(reporter, path, pathB, kDifference_PathOp);
 }
 
-#if 1
 // this fails to detect a cubic/cubic intersection
 // the slight overlap is missed when the cubics are approximated by quadratics
 // and the subsequent line/cubic intersection also (correctly) misses the intersection
@@ -730,7 +729,6 @@
     pathB.close();
     testPathOp(reporter, path, pathB, kDifference_PathOp);
 }
-#endif
 
 static void cubicOp39d(skiatest::Reporter* reporter) {
     SkPath path, pathB;
@@ -1834,7 +1832,8 @@
     testPathOp(reporter, path, pathB, kIntersect_PathOp);
 }
 
-#if 01
+#define ISSUE_1417_WORKING_ON_LINUX_32 0
+#if ISSUE_1417_WORKING_ON_LINUX_32
 static void issue1417(skiatest::Reporter* reporter) {
     SkPath path1;
     path1.moveTo(122.58908843994140625f, 82.2836456298828125f);
@@ -2066,7 +2065,8 @@
     testPathOp(reporter, path, pathB, kXOR_PathOp);
 }
 
-#if 0
+#define ISSUE_1435_WORKING 0
+#if ISSUE_1435_WORKING
 static void issue1435(skiatest::Reporter* reporter) {
     SkPath path1;
     path1.moveTo(160, 60);
@@ -2120,7 +2120,6 @@
 }
 #endif
 
-#if 0
 static void bufferOverflow(skiatest::Reporter* reporter) {
     SkPath path;
     path.addRect(0,0, 300,170141183460469231731687303715884105728.);
@@ -2128,9 +2127,7 @@
     pathB.addRect(0,0, 300,16);
     testPathOp(reporter, path, pathB, kUnion_PathOp);
 }
-#endif
 
-#if 0
 static void skpkkiste_to716(skiatest::Reporter* reporter) {
     SkPath path;
     path.setFillType(SkPath::kEvenOdd_FillType);
@@ -2154,7 +2151,6 @@
     pathB.close();
     testPathOp(reporter, path, pathB, kIntersect_PathOp);
 }
-#endif
 
 static void loopEdge1(skiatest::Reporter* reporter) {
     SkPath path;
@@ -2277,12 +2273,789 @@
     pathB.close();
     testPathOp(reporter, path, pathB, kUnion_PathOp);
 }
+
+static void skpaaalgarve_org53(skiatest::Reporter* reporter) {  //  add t cancel

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+   path.moveTo(-1.24344979e-014f, 348);

+    path.lineTo(258, 348);

+    path.lineTo(258, 322);

+    path.quadTo(258, 317.857849f, 255.072006f, 314.928009f);

+    path.quadTo(252.142136f, 312, 248, 312);

+    path.lineTo(1.77635684e-015f, 312);

+    path.lineTo(-1.24344979e-014f, 348);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+   pathB.moveTo(0, 312);

+    pathB.lineTo(258, 312);

+    pathB.lineTo(258, 348);

+    pathB.lineTo(0, 348);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpabcspark_ca103(skiatest::Reporter* reporter) {  //  add t cancel

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(1.99840144e-015f, 494);

+    path.lineTo(97, 494);

+    path.quadTo(100.313705f, 494, 102.6576f, 491.657593f);

+    path.quadTo(105, 489.313721f, 105, 486);

+    path.lineTo(105, 425);

+    path.quadTo(105, 421.686279f, 102.6576f, 419.342407f);

+    path.quadTo(100.313705f, 417, 97, 417);

+    path.lineTo(2.22044605e-016f, 417);

+    path.lineTo(1.99840144e-015f, 494);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(0, 417);

+    pathB.lineTo(105, 417);

+    pathB.lineTo(105, 494);

+    pathB.lineTo(0, 494);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}
+
+static void skpacesoftech_com47(skiatest::Reporter* reporter) {  // partial coincidence

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(670.537415f, 285);

+    path.lineTo(670.387451f, 285);

+    path.lineTo(596.315186f, 314.850708f);

+    path.lineTo(626.19696f, 389);

+    path.lineTo(626.346863f, 389);

+    path.lineTo(700.419189f, 359.149261f);

+    path.lineTo(670.537415f, 285);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(663.318542f, 374.100616f);

+    pathB.quadTo(647.950989f, 380.293671f, 632.705322f, 373.806305f);

+    pathB.quadTo(617.459595f, 367.318909f, 611.266541f, 351.951355f);

+    pathB.quadTo(605.073486f, 336.58374f, 611.560913f, 321.338074f);

+    pathB.quadTo(618.048279f, 306.092407f, 633.415833f, 299.899353f);

+    pathB.quadTo(648.783447f, 293.706299f, 664.029114f, 300.193665f);

+    pathB.quadTo(679.27478f, 306.68103f, 685.467834f, 322.048645f);

+    pathB.quadTo(691.660889f, 337.416199f, 685.173523f, 352.661896f);

+    pathB.quadTo(678.686157f, 367.907562f, 663.318542f, 374.100616f);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpact_com43(skiatest::Reporter* reporter) {  // bridge op

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(1.45716772e-016f, 924.336121f);

+    path.lineTo(-1.11022302e-016f, 920);

+    path.lineTo(6, 920);

+    path.lineTo(6, 926);

+    path.lineTo(1.66389287f, 926);

+    path.quadTo(1.18842196f, 925.674561f, 0.756800175f, 925.243225f);

+    path.quadTo(0.325406998f, 924.811523f, 1.45716772e-016f, 924.336121f);

+    path.close();

+    path.moveTo(1, 921);

+    path.lineTo(5, 921);

+    path.lineTo(5, 925);

+    path.cubicTo(2.79086018f, 925, 1, 923.209167f, 1, 921);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(-1, 920);

+    pathB.lineTo(0, 920);

+    pathB.lineTo(3, 927);

+    pathB.lineTo(-1, 927);

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpadbox_lt8(skiatest::Reporter* reporter) {  // zero span

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(320.097229f, 628.573669f);

+    path.lineTo(610.227173f, 85.7786865f);

+    path.lineTo(946.652588f, 265.601807f);

+    path.lineTo(656.522644f, 808.39679f);

+    path.lineTo(320.097229f, 628.573669f);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kInverseWinding_FillType);

+    pathB.moveTo(333.866608f, 623.496155f);

+    pathB.lineTo(613.368042f, 100.585754f);

+    pathB.cubicTo(613.685303f, 99.9921265f, 614.423767f, 99.7681885f, 615.017395f, 100.085449f);

+    pathB.lineTo(932.633057f, 269.854553f);

+    pathB.cubicTo(933.226685f, 270.171875f, 933.450623f, 270.910278f, 933.133301f, 271.503906f);

+    pathB.lineTo(653.631897f, 794.414307f);

+    pathB.cubicTo(653.314636f, 795.007935f, 652.576172f, 795.231934f, 651.982544f, 794.914612f);

+    pathB.lineTo(334.366943f, 625.145508f);

+    pathB.cubicTo(333.773315f, 624.828247f, 333.549286f, 624.089783f, 333.866608f, 623.496155f);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}
+
+static void skpadindex_de4(skiatest::Reporter* reporter) {  // find chase op

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(0, 926);

+    path.lineTo(0, 0);

+    path.lineTo(1280, 0);

+    path.lineTo(1280, 926);

+    path.lineTo(0, 926);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(0, 312);

+    pathB.lineTo(8.20486257e-015f, 178);

+    pathB.lineTo(49, 178);

+    pathB.lineTo(49, 312);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}
+
+static void skpadithya_putr4_blogspot_com551(skiatest::Reporter* reporter) { // calc common

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(205.605804f, 142.334625f);

+    path.lineTo(254.665359f, 85.6058044f);

+    path.lineTo(311.394196f, 134.665359f);

+    path.lineTo(262.334625f, 191.39418f);

+    path.lineTo(205.605804f, 142.334625f);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(283.407959f, 110.462646f);

+    pathB.cubicTo(298.864319f, 123.829437f, 300.558258f, 147.195221f, 287.191467f, 162.651581f);

+    pathB.lineTo(286.537354f, 163.407959f);

+    pathB.cubicTo(273.170563f, 178.864334f, 249.804779f, 180.558258f, 234.348419f, 167.191467f);

+    pathB.lineTo(233.592026f, 166.537338f);

+    pathB.cubicTo(218.135666f, 153.170547f, 216.441727f, 129.804779f, 229.808517f, 114.348412f);

+    pathB.lineTo(230.462646f, 113.592026f);

+    pathB.cubicTo(243.829437f, 98.1356659f, 267.195221f, 96.4417267f, 282.651581f, 109.808517f);

+    pathB.lineTo(283.407959f, 110.462646f);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}
+
+static void skpadspert_de11(skiatest::Reporter* reporter) {  // mark and chase winding

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(-4.4408921e-016f, 682.5f);

+    path.lineTo(30.5f, 682.5f);

+    path.cubicTo(32.709137f, 682.5f, 34.5f, 680.709167f, 34.5f, 678.5f);

+    path.lineTo(34.5f, 486.5f);

+    path.cubicTo(34.5f, 484.290863f, 32.709137f, 482.5f, 30.5f, 482.5f);

+    path.lineTo(0, 482.5f);

+    path.lineTo(-4.4408921e-016f, 682.5f);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(0, 482);

+    pathB.lineTo(35, 482);

+    pathB.lineTo(35, 683);

+    pathB.lineTo(0, 683);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}
+
+static void skpaiaigames_com870(skiatest::Reporter* reporter) {  // cubic/cubic intersect

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(324.071075f, 845.071045f);

+    path.cubicTo(324.405151f, 844.737f, 324.715668f, 844.379395f, 325, 844.000977f);

+    path.lineTo(325, 842.127197f);

+    path.cubicTo(324.571411f, 842.956238f, 324.017761f, 843.710144f, 323.363953f, 844.363953f);

+    path.lineTo(324.071075f, 845.071045f);

+    path.close();

+    path.moveTo(323.363953f, 714.636047f);

+    path.lineTo(324.071075f, 713.928955f);

+    path.cubicTo(324.405151f, 714.263f, 324.715668f, 714.620605f, 325, 714.999023f);

+    path.lineTo(325, 716.872803f);

+    path.cubicTo(324.571411f, 716.043762f, 324.017761f, 715.289856f, 323.363953f, 714.636047f);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(317, 711);

+    pathB.cubicTo(322.522858f, 711, 327, 715.477173f, 327, 721);

+    pathB.lineTo(327, 838);

+    pathB.cubicTo(327, 843.522827f, 322.522858f, 848, 317, 848);

+    pathB.lineTo(155, 848);

+    pathB.cubicTo(149.477158f, 848, 145, 843.522827f, 145, 838);

+    pathB.lineTo(145, 721);

+    pathB.cubicTo(145, 715.477173f, 149.477158f, 711, 155, 711);

+    pathB.lineTo(317, 711);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void cubicOp92i(skiatest::Reporter* reporter) {

+    SkPath path, pathB;

+    path.setFillType(SkPath::kWinding_FillType);

+    path.moveTo(0, 1);

+    path.cubicTo(2, 6, 4, 1, 5, 4);

+    path.close();

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(1, 4);

+    pathB.cubicTo(4, 5, 1, 0, 6, 2);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}
+
+static void cubicOp93d(skiatest::Reporter* reporter) {

+    SkPath path, pathB;

+    path.setFillType(SkPath::kWinding_FillType);

+    path.moveTo(0, 1);

+    path.cubicTo(1, 6, 4, 1, 4, 3);

+    path.close();

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(1, 4);

+    pathB.cubicTo(3, 4, 1, 0, 6, 1);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kDifference_PathOp);

+}
+
+static void cubicOp94u(skiatest::Reporter* reporter) {

+    SkPath path, pathB;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(0, 3);

+    path.cubicTo(2, 3, 5, 0, 5, 3);

+    path.close();

+    pathB.setFillType(SkPath::kEvenOdd_FillType);

+    pathB.moveTo(0, 5);

+    pathB.cubicTo(3, 5, 3, 0, 3, 2);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kUnion_PathOp);

+}
+
+static void skpadbox_lt15(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(333.292084f, 624.570984f);

+    path.lineTo(614.229797f, 98.9735107f);

+    path.lineTo(933.457764f, 269.604431f);

+    path.lineTo(652.52002f, 795.201904f);

+    path.lineTo(333.292084f, 624.570984f);

+    path.close();

+    SkPath pathB;

+     pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(613.368042f, 100.585754f);

+    pathB.cubicTo(613.685303f, 99.9921265f, 614.423767f, 99.7681885f, 615.017395f, 100.085449f);

+    pathB.lineTo(932.633057f, 269.854553f);

+    pathB.cubicTo(933.226685f, 270.171875f, 933.450623f, 270.910278f, 933.133301f, 271.503906f);

+    pathB.lineTo(653.631897f, 794.414307f);

+    pathB.cubicTo(653.314636f, 795.007935f, 652.576172f, 795.231934f, 651.982544f, 794.914612f);

+    pathB.lineTo(334.366943f, 625.145508f);

+    pathB.cubicTo(333.773315f, 624.828247f, 333.549286f, 624.089783f, 333.866608f, 623.496155f);

+    pathB.lineTo(613.368042f, 100.585754f);

+     pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpadoption_org196(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(802, 367);

+    path.lineTo(802, 324);

+    path.lineTo(956, 324);

+    path.lineTo(956, 371);

+    path.quadTo(956, 373.071075f, 954.536011f, 374.536011f);

+    path.quadTo(953.071045f, 376, 951, 376);

+    path.lineTo(811, 376);

+    path.cubicTo(806.029419f, 376, 802, 371.970551f, 802, 367);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kInverseWinding_FillType);

+    pathB.moveTo(803, 326);

+    pathB.lineTo(955, 326);

+    pathB.lineTo(955, 370);

+    pathB.cubicTo(955, 372.761414f, 952.761414f, 375, 950, 375);

+    pathB.lineTo(808, 375);

+    pathB.cubicTo(805.238586f, 375, 803, 372.761414f, 803, 370);

+    pathB.lineTo(803, 326);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpadspert_net23(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(-2.220446e-018f, 483.5f);

+    path.lineTo(0, 482.5f);

+    path.lineTo(30.5f, 482.5f);

+    path.cubicTo(32.709137f, 482.5f, 34.5f, 484.290863f, 34.5f, 486.5f);

+    path.lineTo(34.5f, 678.5f);

+    path.cubicTo(34.5f, 680.709167f, 32.709137f, 682.5f, 30.5f, 682.5f);

+    path.lineTo(-4.4408921e-016f, 682.5f);

+    path.lineTo(-4.41868766e-016f, 681.5f);

+    path.lineTo(30.5f, 681.5f);

+    path.cubicTo(32.1568565f, 681.5f, 33.5f, 680.15686f, 33.5f, 678.5f);

+    path.lineTo(33.5f, 486.5f);

+    path.cubicTo(33.5f, 484.84314f, 32.1568565f, 483.5f, 30.5f, 483.5f);

+    path.lineTo(-2.220446e-018f, 483.5f);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(0, 482);

+    pathB.lineTo(35, 482);

+    pathB.lineTo(35, 683);

+    pathB.lineTo(0, 683);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+

+static void skpadventistmission_org572(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(1182.00037f, 926);

+    path.cubicTo(1181.08813f, 924.785583f, 1179.63586f, 924, 1178, 924);

+    path.lineTo(938, 924);

+    path.cubicTo(936.364197f, 924, 934.911865f, 924.785583f, 933.999634f, 926);

+    path.lineTo(1182.00037f, 926);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(934, 924);

+    pathB.lineTo(1182, 924);

+    pathB.lineTo(1182, 926);

+    pathB.lineTo(934, 926);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpagentxsites_com55(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(925, 27);

+    path.cubicTo(924.447693f, 27, 924, 27.4477158f, 924, 28);

+    path.lineTo(924, 55);

+    path.cubicTo(924, 55.5522842f, 924.447693f, 56, 925, 56);

+    path.lineTo(1103, 56);

+    path.cubicTo(1103.55225f, 56, 1104, 55.5522842f, 1104, 55);

+    path.lineTo(1104, 28);

+    path.cubicTo(1104, 27.4477158f, 1103.55225f, 27, 1103, 27);

+    path.lineTo(925, 27);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(1103, 27);

+    pathB.cubicTo(1104.10461f, 27, 1105, 27.8954315f, 1105, 29);

+    pathB.lineTo(1105, 54);

+    pathB.cubicTo(1105, 55.1045685f, 1104.10461f, 56, 1103, 56);

+    pathB.lineTo(926, 56);

+    pathB.cubicTo(924.895447f, 56, 924, 55.1045685f, 924, 54);

+    pathB.lineTo(924, 29);

+    pathB.cubicTo(924, 27.8954315f, 924.895447f, 27, 926, 27);

+    pathB.lineTo(1103, 27);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpbakosoft_com10(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(190, 170);

+    path.cubicTo(178.9543f, 170, 170, 178.9543f, 170, 190);

+    path.cubicTo(170, 201.0457f, 178.9543f, 210, 190, 210);

+    path.lineTo(370, 210);

+    path.cubicTo(381.045685f, 210, 390, 201.0457f, 390, 190);

+    path.cubicTo(390, 178.9543f, 381.045685f, 170, 370, 170);

+    path.lineTo(190, 170);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(210, 190);

+    pathB.quadTo(210, 198.284271f, 204.142136f, 204.142136f);

+    pathB.quadTo(198.284271f, 210, 190, 210);

+    pathB.quadTo(181.715729f, 210, 175.857864f, 204.142136f);

+    pathB.quadTo(170, 198.284271f, 170, 190);

+    pathB.quadTo(170, 181.715729f, 175.857864f, 175.857864f);

+    pathB.quadTo(181.715729f, 170, 190, 170);

+    pathB.quadTo(198.284271f, 170, 204.142136f, 175.857864f);

+    pathB.quadTo(210, 181.715729f, 210, 190);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpbambootheme_com12(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(47.8780937f, 58);

+    path.lineTo(0, 58);

+    path.lineTo(-8.65973959e-015f, 96.9914017f);

+    path.quadTo(20.0654926f, 96.6451874f, 34.3553391f, 82.3553391f);

+    path.quadTo(44.9466133f, 71.764061f, 47.8780937f, 58);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kEvenOdd_FillType);

+    pathB.moveTo(-1, -3);

+    pathB.lineTo(-1, -3);

+    pathB.cubicTo(26.6142502f, -3, 49, 19.3857498f, 49, 47);

+    pathB.lineTo(49, 47);

+    pathB.cubicTo(49, 74.6142502f, 26.6142502f, 97, -1, 97);

+    pathB.lineTo(-1, 97);

+    pathB.cubicTo(-28.6142502f, 97, -51, 74.6142502f, -51, 47);

+    pathB.lineTo(-51, 47);

+    pathB.cubicTo(-51, 19.3857498f, -28.6142502f, -3, -1, -3);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpakmmos_ru100(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(693.000488f, 926);

+    path.cubicTo(692.164734f, 925.37207f, 691.125793f, 925, 690, 925);

+    path.lineTo(578, 925);

+    path.cubicTo(576.874207f, 925, 575.835266f, 925.37207f, 574.999512f, 926);

+    path.lineTo(693.000488f, 926);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(575, 925);

+    pathB.lineTo(693, 925);

+    pathB.lineTo(693, 926);

+    pathB.lineTo(575, 926);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+#define SKPS_WORKING 0
+#if SKPS_WORKING
+static void skpcarpetplanet_ru22(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(195, 785);

+    path.cubicTo(124.307556f, 785, 67, 841.859863f, 67, 912);

+    path.lineTo(67, 913);

+    path.cubicTo(67, 917.388916f, 67.2243805f, 921.725769f, 67.662384f, 926);

+    path.lineTo(322, 926);

+    path.lineTo(322, 896.048035f);

+    path.cubicTo(314.09201f, 833.437622f, 260.247131f, 785, 195, 785);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(195, 785);

+    pathB.cubicTo(265.140167f, 785, 322, 842.307556f, 322, 913);

+    pathB.cubicTo(322, 983.692444f, 265.140167f, 1041, 195, 1041);

+    pathB.lineTo(194, 1041);

+    pathB.cubicTo(123.85984f, 1041, 67, 983.692444f, 67, 913);

+    pathB.cubicTo(67, 842.307556f, 123.85984f, 785, 194, 785);

+    pathB.lineTo(195, 785);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+

+static void skpcarrot_is24(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(945, 597);

+    path.quadTo(913.93396f, 597, 891.96698f, 618.96698f);

+    path.quadTo(870, 640.93396f, 870, 672);

+    path.quadTo(870, 703.06604f, 891.96698f, 725.03302f);

+    path.quadTo(913.93396f, 747, 945, 747);

+    path.quadTo(976.06604f, 747, 998.03302f, 725.03302f);

+    path.quadTo(1020, 703.06604f, 1020, 672);

+    path.quadTo(1020, 640.93396f, 998.03302f, 618.96698f);

+    path.quadTo(976.06604f, 597, 945, 597);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(945.080994f, 597.161987f);

+    pathB.cubicTo(903.659973f, 597.161987f, 870.080994f, 630.73999f, 870.080994f, 672.161987f);

+    pathB.cubicTo(870.080994f, 676.096008f, 870.387024f, 679.957031f, 870.971008f, 683.726013f);

+    pathB.cubicTo(876.53302f, 719.656006f, 907.593994f, 747.161987f, 945.080994f, 747.161987f);

+    pathB.cubicTo(982.567993f, 747.161987f, 1013.62903f, 719.656006f, 1019.19104f, 683.726013f);

+    pathB.cubicTo(1019.77502f, 679.955017f, 1020.08099f, 676.094971f, 1020.08099f, 672.161987f);

+    pathB.cubicTo(1020.08002f, 630.73999f, 986.502014f, 597.161987f, 945.080994f, 597.161987f);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}
+

+#endif

+

+static void skpbangalorenest_com4(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(0, 926);

+    path.lineTo(0, 0);

+    path.lineTo(1265, 0);

+    path.lineTo(1265, 926);

+    path.lineTo(0, 926);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(0, 290);

+    pathB.lineTo(-2.64514972e-014f, 146);

+    pathB.lineTo(30, 146);

+    pathB.lineTo(30, 290);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpbenzoteh_ru152(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(883, 23);

+    path.lineTo(883, 0);

+    path.lineTo(1122.5f, 0);

+    path.lineTo(1122.5f, 25.2136822f);

+    path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);

+    path.quadTo(1120.07104f, 28, 1118, 28);

+    path.lineTo(888, 28);

+    path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);

+    path.quadTo(883, 25.0710678f, 883, 23);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(883, 0);

+    pathB.lineTo(1123, 0);

+    pathB.lineTo(1123, 23);

+    pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);

+    pathB.quadTo(1120.07104f, 28, 1118, 28);

+    pathB.lineTo(888, 28);

+    pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);

+    pathB.quadTo(883, 25.0710678f, 883, 23);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpbestred_ru37(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(883, 23);

+    path.lineTo(883, 0);

+    path.lineTo(1122.5f, 0);

+    path.lineTo(1122.5f, 25.2136822f);

+    path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);

+    path.quadTo(1120.07104f, 28, 1118, 28);

+    path.lineTo(888, 28);

+    path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);

+    path.quadTo(883, 25.0710678f, 883, 23);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(883, 0);

+    pathB.lineTo(1123, 0);

+    pathB.lineTo(1123, 23);

+    pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);

+    pathB.quadTo(1120.07104f, 28, 1118, 28);

+    pathB.lineTo(888, 28);

+    pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);

+    pathB.quadTo(883, 25.0710678f, 883, 23);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+

+static void skpbingoentertainment_net189(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(896, 745.38678f);

+    path.lineTo(896, 873.38678f);

+    path.lineTo(922.567993f, 876.683716f);

+    path.lineTo(922.567993f, 748.683716f);

+    path.lineTo(896, 745.38678f);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(899.200928f, 745.783997f);

+    pathB.cubicTo(897.119385f, 745.525696f, 895.432007f, 752.031982f, 895.432007f, 760.316284f);

+    pathB.lineTo(895.432007f, 858.316284f);

+    pathB.cubicTo(895.432007f, 866.600586f, 897.119385f, 873.525696f, 899.200928f, 873.783997f);

+    pathB.lineTo(918.799133f, 876.216003f);

+    pathB.cubicTo(920.880615f, 876.474304f, 922.567993f, 869.968018f, 922.567993f, 861.683716f);

+    pathB.lineTo(922.567993f, 763.683716f);

+    pathB.cubicTo(922.567993f, 755.399414f, 920.880615f, 748.474304f, 918.799133f, 748.216003f);

+    pathB.lineTo(899.200928f, 745.783997f);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+
+static void skpcarrefour_ro62(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(1104, 453);

+    path.lineTo(399, 453);

+    path.lineTo(399, 657);

+    path.cubicTo(399, 661.970581f, 403.029449f, 666, 408, 666);

+    path.lineTo(1095, 666);

+    path.cubicTo(1099.97058f, 666, 1104, 661.970581f, 1104, 657);

+    path.lineTo(1104, 453);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kInverseWinding_FillType);

+    pathB.moveTo(400, 453);

+    pathB.lineTo(1103, 453);

+    pathB.lineTo(1103, 666);

+    pathB.lineTo(406, 666);

+    pathB.cubicTo(402.686279f, 666, 400, 663.313721f, 400, 660);

+    pathB.lineTo(400, 453);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+

+static void skpcaffelavazzait_com_ua21(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(883, 23);

+    path.lineTo(883, 0);

+    path.lineTo(1122.5f, 0);

+    path.lineTo(1122.5f, 25.2136822f);

+    path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);

+    path.quadTo(1120.07104f, 28, 1118, 28);

+    path.lineTo(888, 28);

+    path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);

+    path.quadTo(883, 25.0710678f, 883, 23);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(883, 0);

+    pathB.lineTo(1123, 0);

+    pathB.lineTo(1123, 23);

+    pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);

+    pathB.quadTo(1120.07104f, 28, 1118, 28);

+    pathB.lineTo(888, 28);

+    pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);

+    pathB.quadTo(883, 25.0710678f, 883, 23);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+

+static void skpcamcorder_kz21(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(883, 23);

+    path.lineTo(883, 0);

+    path.lineTo(1122.5f, 0);

+    path.lineTo(1122.5f, 25.2136822f);

+    path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);

+    path.quadTo(1120.07104f, 28, 1118, 28);

+    path.lineTo(888, 28);

+    path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);

+    path.quadTo(883, 25.0710678f, 883, 23);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(883, 0);

+    pathB.lineTo(1123, 0);

+    pathB.lineTo(1123, 23);

+    pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);

+    pathB.quadTo(1120.07104f, 28, 1118, 28);

+    pathB.lineTo(888, 28);

+    pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);

+    pathB.quadTo(883, 25.0710678f, 883, 23);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+

+static void skpcavablar_net563(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(160.000488f, 918);

+    path.cubicTo(159.164749f, 917.37207f, 158.125824f, 917, 157, 917);

+    path.lineTo(94, 917);

+    path.cubicTo(92.874176f, 917, 91.8352661f, 917.37207f, 90.9995193f, 918);

+    path.lineTo(160.000488f, 918);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(91, 917);

+    pathB.lineTo(160, 917);

+    pathB.lineTo(160, 918);

+    pathB.lineTo(91, 918);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+

+static void skpinsomnia_gr72(skiatest::Reporter* reporter) {

+    SkPath path;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(1138, 231);

+    path.lineTo(1137, 243.625748f);

+    path.lineTo(1137, 926);

+    path.lineTo(1139, 926);

+    path.lineTo(1139, 231);

+    path.lineTo(1138, 231);

+    path.close();

+    SkPath pathB;

+    pathB.setFillType(SkPath::kWinding_FillType);

+    pathB.moveTo(1139, 231);

+    pathB.lineTo(1138, 231);

+    pathB.lineTo(633, 6101);

+    pathB.lineTo(1139, 6607);

+    testPathOp(reporter, path, pathB, kIntersect_PathOp);

+}

+

+static void cubicOp95u(skiatest::Reporter* reporter) {

+    SkPath path, pathB;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(0, 2);

+    path.cubicTo(2, 3, 5, 1, 3, 2);

+    path.close();

+    pathB.setFillType(SkPath::kEvenOdd_FillType);

+    pathB.moveTo(1, 5);

+    pathB.cubicTo(2, 3, 2, 0, 3, 2);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kUnion_PathOp);

+}
+
+static void cubicOp96d(skiatest::Reporter* reporter) {

+    SkPath path, pathB;

+    path.setFillType(SkPath::kEvenOdd_FillType);

+    path.moveTo(1, 6);

+    path.cubicTo(0, 3, 6, 3, 5, 0);

+    path.close();

+    pathB.setFillType(SkPath::kEvenOdd_FillType);

+    pathB.moveTo(3, 6);

+    pathB.cubicTo(0, 5, 6, 1, 3, 0);

+    pathB.close();

+    testPathOp(reporter, path, pathB, kDifference_PathOp);

+}
+
 static void (*firstTest)(skiatest::Reporter* ) = 0;
 
 static struct TestDesc tests[] = {
- //   TEST(skpkkiste_to716),
- //   TEST(bufferOverflow),
- //   TEST(issue1435),
+#if ISSUE_1435_WORKING
+    TEST(issue1435),
+#endif
+#if SKPS_WORKING
+    TEST(skpcarrot_is24),
+    TEST(skpcarpetplanet_ru22),  // cubic/cubic intersect detects unwanted coincidence
+#endif
+#if ISSUE_1417_WORKING_ON_LINUX_32
+    TEST(issue1417),
+#endif
+    TEST(cubicOp96d),
+    TEST(cubicOp95u),
+    TEST(skpadbox_lt15),
+    TEST(skpagentxsites_com55),
+    TEST(skpadventistmission_org572),
+    TEST(skpadspert_net23),
+    TEST(skpadoption_org196),
+    TEST(skpbambootheme_com12),
+    TEST(skpbakosoft_com10),
+    TEST(skpakmmos_ru100),
+    TEST(skpbangalorenest_com4),
+    TEST(skpbingoentertainment_net189),
+    TEST(skpbestred_ru37),
+    TEST(skpbenzoteh_ru152),
+    TEST(skpcamcorder_kz21),
+    TEST(skpcaffelavazzait_com_ua21),
+    TEST(skpcarrefour_ro62),
+    TEST(skpcavablar_net563),
+    TEST(skpinsomnia_gr72),
+    TEST(skpadbox_lt8),
+    TEST(skpact_com43),
+    TEST(skpacesoftech_com47),
+    TEST(skpabcspark_ca103),
+    TEST(cubicOp94u),
+    TEST(cubicOp93d),
+    TEST(cubicOp92i),
+    TEST(skpadithya_putr4_blogspot_com551),
+    TEST(skpadindex_de4),
+    TEST(skpadspert_de11),
+    TEST(skpaiaigames_com870),
+    TEST(skpaaalgarve_org53),
+    TEST(skpkkiste_to716),
+    TEST(bufferOverflow),
     TEST(cubicOp91u),
     TEST(cubicOp90u),
     TEST(cubicOp89u),
@@ -2296,7 +3069,6 @@
     TEST(rectOp1i),
     TEST(issue1418b),
     TEST(cubicOp85i),
-    TEST(issue1417),
     TEST(issue1418),
     TEST(skpkkiste_to98),
     TEST(skpahrefs_com29),