blob: fbfa0b56a7efe01b13c23eccdaff1efaef8ba1c8 [file] [log] [blame]
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7#include "PathOpsExtendedTest.h"
caryclarke4097e32014-06-18 07:24:19 -07008#include "PathOpsTestCommon.h"
caryclark@google.com818b0cc2013-04-08 11:50:46 +00009
10#define TEST(name) { name, #name }
11
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000012static void cubicOp1d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +000013 SkPath path, pathB;
14 path.setFillType(SkPath::kWinding_FillType);
15 path.moveTo(0,1);
16 path.cubicTo(0,2, 1,0, 1,0);
17 path.close();
18 pathB.setFillType(SkPath::kWinding_FillType);
19 pathB.moveTo(0,1);
20 pathB.cubicTo(0,1, 1,0, 2,0);
21 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000022 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +000023}
24
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000025static void cubicOp2d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +000026 SkPath path, pathB;
27 path.setFillType(SkPath::kWinding_FillType);
28 path.moveTo(0,2);
29 path.cubicTo(0,1, 1,0, 1,0);
30 path.close();
31 pathB.setFillType(SkPath::kWinding_FillType);
32 pathB.moveTo(0,1);
33 pathB.cubicTo(0,1, 2,0, 1,0);
34 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000035 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +000036}
37
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000038static void cubicOp3d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +000039 SkPath path, pathB;
40 path.setFillType(SkPath::kWinding_FillType);
41 path.moveTo(0,1);
42 path.cubicTo(2,3, 1,0, 1,0);
43 path.close();
44 pathB.setFillType(SkPath::kWinding_FillType);
45 pathB.moveTo(0,1);
46 pathB.cubicTo(0,1, 1,0, 3,2);
47 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000048 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +000049}
50
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000051static void cubicOp5d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +000052 SkPath path, pathB;
53 path.setFillType(SkPath::kWinding_FillType);
54 path.moveTo(0,1);
55 path.cubicTo(0,2, 1,0, 2,0);
56 path.close();
57 pathB.setFillType(SkPath::kWinding_FillType);
58 pathB.moveTo(0,1);
59 pathB.cubicTo(0,2, 1,0, 2,0);
60 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000061 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +000062}
63
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000064static void cubicOp6d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +000065 SkPath path, pathB;
66 path.setFillType(SkPath::kWinding_FillType);
67 path.moveTo(0,1);
68 path.cubicTo(0,6, 1,0, 3,0);
69 path.close();
70 pathB.setFillType(SkPath::kWinding_FillType);
71 pathB.moveTo(0,1);
72 pathB.cubicTo(0,3, 1,0, 6,0);
73 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000074 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +000075}
76
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000077static void cubicOp7d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +000078 SkPath path, pathB;
79 path.setFillType(SkPath::kWinding_FillType);
80 path.moveTo(0,1);
81 path.cubicTo(3,4, 1,0, 3,0);
82 path.close();
83 pathB.setFillType(SkPath::kWinding_FillType);
84 pathB.moveTo(0,1);
85 pathB.cubicTo(0,3, 1,0, 4,3);
86 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000087 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +000088}
89
commit-bot@chromium.org4431e772014-04-14 17:08:59 +000090static void cubicOp8d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +000091 SkPath path, pathB;
92 path.setFillType(SkPath::kWinding_FillType);
93 path.moveTo(0,1);
94 path.cubicTo(0,5, 1,0, 4,0);
95 path.close();
96 pathB.setFillType(SkPath::kWinding_FillType);
97 pathB.moveTo(0,1);
98 pathB.cubicTo(0,4, 1,0, 5,0);
99 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000100 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000101}
102
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000103static void cubicOp9d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000104 SkPath path, pathB;
105 path.setFillType(SkPath::kWinding_FillType);
106 path.moveTo(0,1);
107 path.cubicTo(1,6, 1,0, 2,1);
108 path.close();
109 pathB.setFillType(SkPath::kWinding_FillType);
110 pathB.moveTo(0,1);
111 pathB.cubicTo(1,2, 1,0, 6,1);
112 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000113 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000114}
115
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000116static void quadOp9d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000117 SkPath path, pathB;
118 path.setFillType(SkPath::kWinding_FillType);
119 path.moveTo(0,1);
120 path.quadTo(1,6, 1.5f,1);
121 path.quadTo(1.5f,0.5f, 2,1);
122 path.close();
123 pathB.setFillType(SkPath::kWinding_FillType);
124 pathB.moveTo(0,1);
125 pathB.quadTo(1,2, 1.4f,1);
126 pathB.quadTo(3,0.4f, 6,1);
127 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000128 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000129}
130
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000131static void lineOp9d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000132 SkPath path, pathB;
133 path.setFillType(SkPath::kWinding_FillType);
134 path.moveTo(0,1);
135 path.lineTo(1,6);
136 path.lineTo(1.5f,1);
137 path.lineTo(1.8f,0.8f);
138 path.lineTo(2,1);
139 path.close();
140 pathB.setFillType(SkPath::kWinding_FillType);
141 pathB.moveTo(0,1);
142 pathB.lineTo(1,2);
143 pathB.lineTo(1.4f,1);
144 pathB.lineTo(3,0.4f);
145 pathB.lineTo(6,1);
146 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000147 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000148}
149
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000150static void cubicOp1i(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000151 SkPath path, pathB;
152 path.setFillType(SkPath::kWinding_FillType);
153 path.moveTo(0,1);
154 path.cubicTo(1,2, 1,0, 2,1);
155 path.close();
156 pathB.setFillType(SkPath::kWinding_FillType);
157 pathB.moveTo(0,1);
158 pathB.cubicTo(1,2, 1,0, 2,1);
159 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000160 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000161}
162
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000163static void cubicOp10d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000164 SkPath path, pathB;
165 path.setFillType(SkPath::kWinding_FillType);
166 path.moveTo(0,1);
167 path.cubicTo(1,3, 1,0, 4,1);
168 path.close();
169 pathB.setFillType(SkPath::kWinding_FillType);
170 pathB.moveTo(0,1);
171 pathB.cubicTo(1,4, 1,0, 3,1);
172 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000173 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000174}
175
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000176static void cubicOp11d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000177 SkPath path, pathB;
178 path.setFillType(SkPath::kWinding_FillType);
179 path.moveTo(0,1);
180 path.cubicTo(3,4, 1,0, 5,1);
181 path.close();
182 pathB.setFillType(SkPath::kWinding_FillType);
183 pathB.moveTo(0,1);
184 pathB.cubicTo(1,5, 1,0, 4,3);
185 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000186 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000187}
188
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000189static void cubicOp12d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000190 SkPath path, pathB;
191 path.setFillType(SkPath::kWinding_FillType);
192 path.moveTo(0,1);
193 path.cubicTo(1,6, 1,0, 1,0);
194 path.close();
195 pathB.setFillType(SkPath::kWinding_FillType);
196 pathB.moveTo(0,1);
197 pathB.cubicTo(0,1, 1,0, 6,1);
198 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000199 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000200}
201
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000202static void cubicOp13d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000203 SkPath path, pathB;
204 path.setFillType(SkPath::kWinding_FillType);
205 path.moveTo(0,1);
206 path.cubicTo(4,5, 1,0, 5,3);
207 path.close();
208 pathB.setFillType(SkPath::kWinding_FillType);
209 pathB.moveTo(0,1);
210 pathB.cubicTo(3,5, 1,0, 5,4);
211 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000212 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000213}
214
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000215static void cubicOp14d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000216 SkPath path, pathB;
217 path.setFillType(SkPath::kWinding_FillType);
218 path.moveTo(0,1);
219 path.cubicTo(0,2, 2,0, 2,1);
220 path.close();
221 pathB.setFillType(SkPath::kWinding_FillType);
222 pathB.moveTo(0,2);
223 pathB.cubicTo(1,2, 1,0, 2,0);
224 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000225 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000226}
227
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000228static void cubicOp15d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000229 SkPath path, pathB;
230 path.setFillType(SkPath::kWinding_FillType);
231 path.moveTo(0,1);
232 path.cubicTo(3,6, 2,0, 2,1);
233 path.close();
234 pathB.setFillType(SkPath::kWinding_FillType);
235 pathB.moveTo(0,2);
236 pathB.cubicTo(1,2, 1,0, 6,3);
237 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000238 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000239}
240
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000241static void cubicOp16d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000242 SkPath path, pathB;
243 path.setFillType(SkPath::kWinding_FillType);
244 path.moveTo(0,2);
245 path.cubicTo(0,1, 3,0, 1,0);
246 path.close();
247 pathB.setFillType(SkPath::kWinding_FillType);
248 pathB.moveTo(0,3);
249 pathB.cubicTo(0,1, 2,0, 1,0);
250 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000251 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000252}
253
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000254static void cubicOp17d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000255 SkPath path, pathB;
256 path.setFillType(SkPath::kWinding_FillType);
257 path.moveTo(0,2);
258 path.cubicTo(0,2, 4,0, 2,1);
259 path.close();
260 pathB.setFillType(SkPath::kWinding_FillType);
261 pathB.moveTo(0,4);
262 pathB.cubicTo(1,2, 2,0, 2,0);
263 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000264 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000265}
266
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000267static void cubicOp18d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000268 SkPath path, pathB;
269 path.setFillType(SkPath::kWinding_FillType);
270 path.moveTo(0,1);
271 path.cubicTo(3,5, 2,0, 2,1);
272 path.close();
273 pathB.setFillType(SkPath::kWinding_FillType);
274 pathB.moveTo(0,2);
275 pathB.cubicTo(1,2, 1,0, 5,3);
276 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000277 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000278}
279
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000280static void cubicOp19i(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000281 SkPath path, pathB;
282 path.setFillType(SkPath::kWinding_FillType);
283 path.moveTo(0,2);
284 path.cubicTo(0,1, 2,1, 6,2);
285 path.close();
286 pathB.setFillType(SkPath::kWinding_FillType);
287 pathB.moveTo(1,2);
288 pathB.cubicTo(2,6, 2,0, 1,0);
289 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000290 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000291}
292
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000293static void cubicOp20d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000294 SkPath path, pathB;
295 path.setFillType(SkPath::kWinding_FillType);
296 path.moveTo(0,1);
297 path.cubicTo(0,1, 6,0, 2,1);
298 path.close();
299 pathB.setFillType(SkPath::kWinding_FillType);
300 pathB.moveTo(0,6);
301 pathB.cubicTo(1,2, 1,0, 1,0);
302 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000303 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000304}
305
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000306static void cubicOp21d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000307 SkPath path, pathB;
308 path.setFillType(SkPath::kWinding_FillType);
309 path.moveTo(0,1);
310 path.cubicTo(0,1, 2,1, 6,5);
311 path.close();
312 pathB.setFillType(SkPath::kWinding_FillType);
313 pathB.moveTo(1,2);
314 pathB.cubicTo(5,6, 1,0, 1,0);
315 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000316 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000317}
318
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000319static void cubicOp22d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000320 SkPath path, pathB;
321 path.setFillType(SkPath::kWinding_FillType);
322 path.moveTo(0,1);
323 path.cubicTo(2,3, 3,0, 2,1);
324 path.close();
325 pathB.setFillType(SkPath::kWinding_FillType);
326 pathB.moveTo(0,3);
327 pathB.cubicTo(1,2, 1,0, 3,2);
328 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000329 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000330}
331
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000332static void cubicOp23d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000333 SkPath path, pathB;
334 path.setFillType(SkPath::kWinding_FillType);
335 path.moveTo(0,1);
336 path.cubicTo(1,2, 4,0, 2,1);
337 path.close();
338 pathB.setFillType(SkPath::kWinding_FillType);
339 pathB.moveTo(0,4);
340 pathB.cubicTo(1,2, 1,0, 2,1);
341 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000342 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000343}
344
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000345static void cubicOp24d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000346 SkPath path, pathB;
347 path.setFillType(SkPath::kWinding_FillType);
348 path.moveTo(0,1);
349 path.cubicTo(1,2, 2,0, 3,2);
350 path.close();
351 pathB.setFillType(SkPath::kWinding_FillType);
352 pathB.moveTo(0,2);
353 pathB.cubicTo(2,3, 1,0, 2,1);
354 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000355 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000356}
357
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000358static void testIntersect1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000359 SkPath one, two;
360 one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
361 two.addRect(3, 3, 9, 9, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000362 testPathOp(reporter, one, two, kIntersect_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000363}
364
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000365static void testUnion1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000366 SkPath one, two;
367 one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
368 two.addRect(3, 3, 9, 9, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000369 testPathOp(reporter, one, two, kUnion_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000370}
371
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000372static void testDiff1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000373 SkPath one, two;
374 one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
375 two.addRect(3, 3, 9, 9, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000376 testPathOp(reporter, one, two, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000377}
378
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000379static void testXor1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000380 SkPath one, two;
381 one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
382 two.addRect(3, 3, 9, 9, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000383 testPathOp(reporter, one, two, kXOR_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000384}
385
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000386static void testIntersect2(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000387 SkPath one, two;
388 one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
389 two.addRect(0, 3, 9, 9, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000390 testPathOp(reporter, one, two, kIntersect_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000391}
392
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000393static void testUnion2(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000394 SkPath one, two;
395 one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
396 two.addRect(0, 3, 9, 9, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000397 testPathOp(reporter, one, two, kUnion_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000398}
399
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000400static void testDiff2(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000401 SkPath one, two;
402 one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
403 two.addRect(0, 3, 9, 9, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000404 testPathOp(reporter, one, two, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000405}
406
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000407static void testXor2(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000408 SkPath one, two;
409 one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
410 two.addRect(0, 3, 9, 9, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000411 testPathOp(reporter, one, two, kXOR_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000412}
413
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000414static void testOp1d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000415 SkPath path, pathB;
416 path.setFillType(SkPath::kWinding_FillType);
417 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
418 path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
419 pathB.setFillType(SkPath::kWinding_FillType);
420 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
421 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000422 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000423}
424
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000425static void testOp2d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000426 SkPath path, pathB;
427 path.setFillType(SkPath::kWinding_FillType);
428 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
429 path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
430 pathB.setFillType(SkPath::kEvenOdd_FillType);
431 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
432 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000433 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000434}
435
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000436static void testOp3d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000437 SkPath path, pathB;
438 path.setFillType(SkPath::kWinding_FillType);
439 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
440 path.addRect(1, 1, 2, 2, SkPath::kCW_Direction);
441 pathB.setFillType(SkPath::kWinding_FillType);
442 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
443 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000444 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000445}
446
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000447static void testOp1u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000448 SkPath path, pathB;
449 path.setFillType(SkPath::kWinding_FillType);
450 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
451 path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
452 pathB.setFillType(SkPath::kWinding_FillType);
453 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
454 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000455 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000456}
457
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000458static void testOp4d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000459 SkPath path, pathB;
460 path.setFillType(SkPath::kWinding_FillType);
461 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
462 path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
463 pathB.setFillType(SkPath::kWinding_FillType);
464 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
465 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000466 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000467}
468
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000469static void testOp5d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000470 SkPath path, pathB;
471 path.setFillType(SkPath::kEvenOdd_FillType);
472 path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
473 path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
474 pathB.setFillType(SkPath::kEvenOdd_FillType);
475 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
476 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000477 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000478}
479
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000480static void testOp6d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000481 SkPath path, pathB;
482 path.setFillType(SkPath::kEvenOdd_FillType);
483 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
484 path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
485 pathB.setFillType(SkPath::kWinding_FillType);
486 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
487 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000488 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000489}
490
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000491static void testOp7d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000492 SkPath path, pathB;
493 path.setFillType(SkPath::kEvenOdd_FillType);
494 path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
495 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
496 pathB.setFillType(SkPath::kEvenOdd_FillType);
497 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
498 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000499 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000500}
501
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000502static void testOp2u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000503 SkPath path, pathB;
504 path.setFillType(SkPath::kEvenOdd_FillType);
505 path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
506 path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
507 pathB.setFillType(SkPath::kWinding_FillType);
508 pathB.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
509 pathB.addRect(1, 1, 2, 2, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000510 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000511}
512
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000513static void testOp8d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000514 SkPath path, pathB;
515 path.addRect(0, 0, 640, 480);
516 pathB.moveTo(577330, 1971.72f);
517 pathB.cubicTo(10.7082f, -116.596f, 262.057f, 45.6468f, 294.694f, 1.96237f);
518 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000519 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000520}
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000521static void cubicOp25i(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000522 SkPath path, pathB;
523 path.setFillType(SkPath::kWinding_FillType);
524 path.moveTo(0,1);
525 path.cubicTo(2,4, 5,0, 3,2);
526 path.close();
527 pathB.setFillType(SkPath::kWinding_FillType);
528 pathB.moveTo(0,5);
529 pathB.cubicTo(2,3, 1,0, 4,2);
530 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000531 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000532}
533
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000534static void cubicOp26d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000535 SkPath path, pathB;
536 path.setFillType(SkPath::kWinding_FillType);
537 path.moveTo(0,1);
538 path.cubicTo(3,4, 4,0, 3,2);
539 path.close();
540 pathB.setFillType(SkPath::kWinding_FillType);
541 pathB.moveTo(0,4);
542 pathB.cubicTo(2,3, 1,0, 4,3);
543 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000544 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000545}
546
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000547static void cubicOp27d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000548 SkPath path, pathB;
549 path.setFillType(SkPath::kWinding_FillType);
550 path.moveTo(0,1);
551 path.cubicTo(3,6, 1,0, 5,2);
552 path.close();
553 pathB.setFillType(SkPath::kWinding_FillType);
554 pathB.moveTo(0,1);
555 pathB.cubicTo(2,5, 1,0, 6,3);
556 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000557 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000558}
559
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000560static void cubicOp28u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000561 SkPath path, pathB;
562 path.setFillType(SkPath::kWinding_FillType);
563 path.moveTo(0,1);
564 path.cubicTo(1,4, 6,0, 3,2);
565 path.close();
566 pathB.setFillType(SkPath::kWinding_FillType);
567 pathB.moveTo(0,6);
568 pathB.cubicTo(2,3, 1,0, 4,1);
569 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000570 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000571}
572
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000573static void cubicOp29d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000574 SkPath path, pathB;
575 path.setFillType(SkPath::kWinding_FillType);
576 path.moveTo(0,1);
577 path.cubicTo(2,5, 6,0, 4,2);
578 path.close();
579 pathB.setFillType(SkPath::kWinding_FillType);
580 pathB.moveTo(0,6);
581 pathB.cubicTo(2,4, 1,0, 5,2);
582 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000583 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000584}
585
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000586static void cubicOp30d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000587 SkPath path, pathB;
588 path.setFillType(SkPath::kWinding_FillType);
589 path.moveTo(0,1);
590 path.cubicTo(2,5, 6,0, 5,3);
591 path.close();
592 pathB.setFillType(SkPath::kWinding_FillType);
593 pathB.moveTo(0,6);
594 pathB.cubicTo(3,5, 1,0, 5,2);
595 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000596 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000597}
598
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000599static void cubicOp31d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000600 SkPath path, pathB;
601 path.setFillType(SkPath::kWinding_FillType);
602 path.moveTo(0,2);
603 path.cubicTo(0,3, 2,1, 4,0);
604 path.close();
605 pathB.setFillType(SkPath::kWinding_FillType);
606 pathB.moveTo(1,2);
607 pathB.cubicTo(0,4, 2,0, 3,0);
608 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000609 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000610}
611
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000612static void cubicOp31u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000613 SkPath path, pathB;
614 path.setFillType(SkPath::kWinding_FillType);
615 path.moveTo(0,2);
616 path.cubicTo(0,3, 2,1, 4,0);
617 path.close();
618 pathB.setFillType(SkPath::kWinding_FillType);
619 pathB.moveTo(1,2);
620 pathB.cubicTo(0,4, 2,0, 3,0);
621 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000622 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000623}
624
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000625static void cubicOp31x(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000626 SkPath path, pathB;
627 path.setFillType(SkPath::kWinding_FillType);
628 path.moveTo(0,2);
629 path.cubicTo(0,3, 2,1, 4,0);
630 path.close();
631 pathB.setFillType(SkPath::kWinding_FillType);
632 pathB.moveTo(1,2);
633 pathB.cubicTo(0,4, 2,0, 3,0);
634 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000635 testPathOp(reporter, path, pathB, kXOR_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000636}
637
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000638static void cubicOp32d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000639 SkPath path, pathB;
640 path.setFillType(SkPath::kWinding_FillType);
641 path.moveTo(0,1);
642 path.cubicTo(1,2, 6,0, 3,1);
643 path.close();
644 pathB.setFillType(SkPath::kWinding_FillType);
645 pathB.moveTo(0,6);
646 pathB.cubicTo(1,3, 1,0, 2,1);
647 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000648 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000649}
650
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000651static void cubicOp33i(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000652 SkPath path, pathB;
653 path.setFillType(SkPath::kWinding_FillType);
654 path.moveTo(0,1);
655 path.cubicTo(1,2, 6,0, 3,1);
656 path.close();
657 pathB.setFillType(SkPath::kWinding_FillType);
658 pathB.moveTo(0,6);
659 pathB.cubicTo(1,3, 1,0, 2,1);
660 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000661 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000662}
663
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000664static void cubicOp34d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000665 SkPath path, pathB;
666 path.setFillType(SkPath::kWinding_FillType);
667 path.moveTo(0,1);
668 path.cubicTo(3,5, 2,1, 3,1);
669 path.close();
670 pathB.setFillType(SkPath::kWinding_FillType);
671 pathB.moveTo(1,2);
672 pathB.cubicTo(1,3, 1,0, 5,3);
673 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000674 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000675}
676
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000677static void cubicOp35d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000678 SkPath path, pathB;
679 path.setFillType(SkPath::kWinding_FillType);
680 path.moveTo(0,1);
681 path.cubicTo(1,5, 2,1, 4,0);
682 path.close();
683 pathB.setFillType(SkPath::kWinding_FillType);
684 pathB.moveTo(1,2);
685 pathB.cubicTo(0,4, 1,0, 5,1);
686 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000687 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000688}
689
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000690static void cubicOp36u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000691 SkPath path, pathB;
692 path.setFillType(SkPath::kWinding_FillType);
693 path.moveTo(0,1);
694 path.cubicTo(1,6, 2,0, 5,1);
695 path.close();
696 pathB.setFillType(SkPath::kWinding_FillType);
697 pathB.moveTo(0,2);
698 pathB.cubicTo(1,5, 1,0, 6,1);
699 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000700 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000701}
702
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000703static void cubicOp37d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000704 SkPath path, pathB;
705 path.setFillType(SkPath::kWinding_FillType);
706 path.moveTo(0,1);
707 path.cubicTo(2,6, 6,1, 4,3);
708 path.close();
709 pathB.setFillType(SkPath::kWinding_FillType);
710 pathB.moveTo(1,6);
711 pathB.cubicTo(3,4, 1,0, 6,2);
712 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000713 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000714}
715
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000716// this fails to detect a cubic/cubic intersection
717// the slight overlap is missed when the cubics are approximated by quadratics
718// and the subsequent line/cubic intersection also (correctly) misses the intersection
719// if the line/cubic was a matching line/approx.quadratic then the missing intersection
720// could have been detected
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000721static void cubicOp38d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000722 SkPath path, pathB;
723 path.setFillType(SkPath::kWinding_FillType);
724 path.moveTo(0,1);
725 path.cubicTo(0,6, 3,2, 4,1);
726 path.close();
727 pathB.setFillType(SkPath::kWinding_FillType);
728 pathB.moveTo(2,3);
729 pathB.cubicTo(1,4, 1,0, 6,0);
730 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000731 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000732}
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000733
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000734static void cubicOp39d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000735 SkPath path, pathB;
736 path.setFillType(SkPath::kWinding_FillType);
737 path.moveTo(0,1);
738 path.cubicTo(2,3, 5,1, 4,3);
739 path.close();
740 pathB.setFillType(SkPath::kWinding_FillType);
741 pathB.moveTo(1,5);
742 pathB.cubicTo(3,4, 1,0, 3,2);
743 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000744 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000745}
746
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000747static void cubicOp40d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000748 SkPath path, pathB;
749 path.setFillType(SkPath::kWinding_FillType);
750 path.moveTo(0,1);
751 path.cubicTo(1,5, 3,2, 4,2);
752 path.close();
753 pathB.setFillType(SkPath::kWinding_FillType);
754 pathB.moveTo(2,3);
755 pathB.cubicTo(2,4, 1,0, 5,1);
756 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000757 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000758}
759
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000760static void cubicOp41i(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000761 SkPath path, pathB;
762 path.setFillType(SkPath::kWinding_FillType);
763 path.moveTo(0,1);
764 path.cubicTo(2,6, 4,3, 6,4);
765 path.close();
766 pathB.setFillType(SkPath::kWinding_FillType);
767 pathB.moveTo(3,4);
768 pathB.cubicTo(4,6, 1,0, 6,2);
769 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000770 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000771}
772
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000773static void cubicOp42d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000774 SkPath path, pathB;
775 path.setFillType(SkPath::kWinding_FillType);
776 path.moveTo(0,1);
777 path.cubicTo(1,2, 6,5, 5,4);
778 path.close();
779 pathB.setFillType(SkPath::kWinding_FillType);
780 pathB.moveTo(5,6);
781 pathB.cubicTo(4,5, 1,0, 2,1);
782 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000783 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000784}
785
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000786static void cubicOp43d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000787 SkPath path, pathB;
788 path.setFillType(SkPath::kWinding_FillType);
789 path.moveTo(0,2);
790 path.cubicTo(1,2, 4,0, 3,1);
791 path.close();
792 pathB.setFillType(SkPath::kWinding_FillType);
793 pathB.moveTo(0,4);
794 pathB.cubicTo(1,3, 2,0, 2,1);
795 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000796 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000797}
798
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000799static void cubicOp44d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000800 SkPath path, pathB;
801 path.setFillType(SkPath::kWinding_FillType);
802 path.moveTo(0,2);
803 path.cubicTo(3,6, 4,0, 3,2);
804 path.close();
805 pathB.setFillType(SkPath::kWinding_FillType);
806 pathB.moveTo(0,4);
807 pathB.cubicTo(2,3, 2,0, 6,3);
808 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000809 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000810}
811
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000812static void cubicOp45d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000813 SkPath path, pathB;
814 path.setFillType(SkPath::kWinding_FillType);
815 path.moveTo(0,2);
816 path.cubicTo(2,4, 4,0, 3,2);
817 path.close();
818 pathB.setFillType(SkPath::kWinding_FillType);
819 pathB.moveTo(0,4);
820 pathB.cubicTo(2,3, 2,0, 4,2);
821 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000822 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000823}
824
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000825static void cubicOp46d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000826 SkPath path, pathB;
827 path.setFillType(SkPath::kWinding_FillType);
828 path.moveTo(0,2);
829 path.cubicTo(3,5, 5,0, 4,2);
830 path.close();
831 pathB.setFillType(SkPath::kWinding_FillType);
832 pathB.moveTo(0,5);
833 pathB.cubicTo(2,4, 2,0, 5,3);
834 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000835 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000836}
837
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000838static void cubicOp47d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000839 SkPath path, pathB;
840 path.setFillType(SkPath::kWinding_FillType);
841 path.moveTo(0,1);
842 path.cubicTo(1,6, 6,2, 5,4);
843 path.close();
844 pathB.setFillType(SkPath::kWinding_FillType);
845 pathB.moveTo(2,6);
846 pathB.cubicTo(4,5, 1,0, 6,1);
847 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000848 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000849}
850
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000851static void cubicOp48d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000852 SkPath path, pathB;
853 path.setFillType(SkPath::kWinding_FillType);
854 path.moveTo(0,2);
855 path.cubicTo(2,3, 5,1, 3,2);
856 path.close();
857 pathB.setFillType(SkPath::kWinding_FillType);
858 pathB.moveTo(1,5);
859 pathB.cubicTo(2,3, 2,0, 3,2);
860 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000861 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000862}
863
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000864static void cubicOp49d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000865 SkPath path, pathB;
866 path.setFillType(SkPath::kWinding_FillType);
867 path.moveTo(0,2);
868 path.cubicTo(1,5, 3,2, 4,1);
869 path.close();
870 pathB.setFillType(SkPath::kWinding_FillType);
871 pathB.moveTo(2,3);
872 pathB.cubicTo(1,4, 2,0, 5,1);
873 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000874 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000875}
876
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000877static void cubicOp50d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000878 SkPath path, pathB;
879 path.setFillType(SkPath::kWinding_FillType);
880 path.moveTo(0,3);
881 path.cubicTo(1,6, 5,0, 5,1);
882 path.close();
883 pathB.setFillType(SkPath::kWinding_FillType);
884 pathB.moveTo(0,5);
885 pathB.cubicTo(1,5, 3,0, 6,1);
886 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000887 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000888}
889
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000890static void cubicOp51d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000891 SkPath path, pathB;
892 path.setFillType(SkPath::kWinding_FillType);
893 path.moveTo(0,3);
894 path.cubicTo(1,2, 4,1, 6,0);
895 path.close();
896 pathB.setFillType(SkPath::kWinding_FillType);
897 pathB.moveTo(1,4);
898 pathB.cubicTo(0,6, 3,0, 2,1);
899 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000900 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000901}
902
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000903static void cubicOp52d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000904 SkPath path, pathB;
905 path.setFillType(SkPath::kWinding_FillType);
906 path.moveTo(0,2);
907 path.cubicTo(1,2, 5,4, 4,3);
908 path.close();
909 pathB.setFillType(SkPath::kWinding_FillType);
910 pathB.moveTo(4,5);
911 pathB.cubicTo(3,4, 2,0, 2,1);
912 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000913 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000914}
915
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000916static void cubicOp53d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000917 SkPath path, pathB;
918 path.setFillType(SkPath::kWinding_FillType);
919 path.moveTo(0,3);
920 path.cubicTo(1,2, 5,3, 2,1);
921 path.close();
922 pathB.setFillType(SkPath::kWinding_FillType);
923 pathB.moveTo(3,5);
924 pathB.cubicTo(1,2, 3,0, 2,1);
925 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000926 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000927}
928
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000929static void cubicOp54d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000930 SkPath path, pathB;
931 path.setFillType(SkPath::kWinding_FillType);
932 path.moveTo(0,4);
933 path.cubicTo(1,3, 5,4, 4,2);
934 path.close();
935 pathB.setFillType(SkPath::kWinding_FillType);
936 pathB.moveTo(4,5);
937 pathB.cubicTo(2,4, 4,0, 3,1);
938 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000939 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000940}
941
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000942static void cubicOp55d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000943 SkPath path, pathB;
944 path.setFillType(SkPath::kWinding_FillType);
945 path.moveTo(0,5);
946 path.cubicTo(1,3, 3,2, 5,0);
947 path.close();
948 pathB.setFillType(SkPath::kWinding_FillType);
949 pathB.moveTo(2,3);
950 pathB.cubicTo(0,5, 5,0, 3,1);
951 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000952 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000953}
954
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000955static void cubicOp56d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000956 SkPath path, pathB;
957 path.setFillType(SkPath::kWinding_FillType);
958 path.moveTo(0,1);
959 path.cubicTo(2,6, 5,0, 2,1);
960 path.close();
961 pathB.setFillType(SkPath::kWinding_FillType);
962 pathB.moveTo(0,5);
963 pathB.cubicTo(1,2, 1,0, 6,2);
964 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000965 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000966}
967
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000968static void cubicOp57d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000969 SkPath path, pathB;
970 path.setFillType(SkPath::kWinding_FillType);
971 path.moveTo(0,5);
972 path.cubicTo(0,5, 5,4, 6,4);
973 path.close();
974 pathB.setFillType(SkPath::kWinding_FillType);
975 pathB.moveTo(4,5);
976 pathB.cubicTo(4,6, 5,0, 5,0);
977 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000978 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000979}
980
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000981static void cubicOp58d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000982 SkPath path, pathB;
983 path.setFillType(SkPath::kWinding_FillType);
984 path.moveTo(0,5);
985 path.cubicTo(3,4, 6,5, 5,3);
986 path.close();
987 pathB.setFillType(SkPath::kWinding_FillType);
988 pathB.moveTo(5,6);
989 pathB.cubicTo(3,5, 5,0, 4,3);
990 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000991 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000992}
993
commit-bot@chromium.org4431e772014-04-14 17:08:59 +0000994static void cubicOp59d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +0000995 SkPath path, pathB;
996 path.setFillType(SkPath::kWinding_FillType);
997 path.moveTo(0,1);
998 path.cubicTo(5,6, 4,0, 4,1);
999 path.close();
1000 pathB.setFillType(SkPath::kWinding_FillType);
1001 pathB.moveTo(0,4);
1002 pathB.cubicTo(1,4, 1,0, 6,5);
1003 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001004 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001005}
1006
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001007static void cubicOp60d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001008 SkPath path, pathB;
1009 path.setFillType(SkPath::kWinding_FillType);
1010 path.moveTo(0,2);
1011 path.cubicTo(4,6, 6,0, 5,2);
1012 path.close();
1013 pathB.setFillType(SkPath::kWinding_FillType);
1014 pathB.moveTo(0,6);
1015 pathB.cubicTo(2,5, 2,0, 6,4);
1016 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001017 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001018}
1019
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001020static void cubicOp61d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001021 SkPath path, pathB;
1022 path.setFillType(SkPath::kWinding_FillType);
1023 path.moveTo(1,2);
1024 path.cubicTo(0,5, 3,2, 6,1);
1025 path.close();
1026 pathB.setFillType(SkPath::kWinding_FillType);
1027 pathB.moveTo(2,3);
1028 pathB.cubicTo(1,6, 2,1, 5,0);
1029 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001030 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001031}
1032
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001033static void cubicOp62d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001034 SkPath path, pathB;
1035 path.setFillType(SkPath::kWinding_FillType);
1036 path.moveTo(1,3);
1037 path.cubicTo(5,6, 5,3, 5,4);
1038 path.close();
1039 pathB.setFillType(SkPath::kWinding_FillType);
1040 pathB.moveTo(3,5);
1041 pathB.cubicTo(4,5, 3,1, 6,5);
1042 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001043 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001044}
1045
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001046static void cubicOp63d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001047 SkPath path, pathB;
1048 path.setFillType(SkPath::kWinding_FillType);
1049 path.moveTo(2,3);
1050 path.cubicTo(0,4, 3,2, 5,3);
1051 path.close();
1052 pathB.setFillType(SkPath::kWinding_FillType);
1053 pathB.moveTo(2,3);
1054 pathB.cubicTo(3,5, 3,2, 4,0);
1055 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001056 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001057}
1058
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001059static void cubicOp64d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001060 SkPath path, pathB;
1061 path.moveTo(0,1);
1062 path.cubicTo(0,1, 1,0, 3,0);
1063 path.lineTo(0,1);
1064 path.close();
1065 pathB.moveTo(0,1);
1066 pathB.cubicTo(0,3, 1,0, 1,0);
1067 pathB.lineTo(0,1);
1068 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001069 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001070}
1071
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001072static void cubicOp65d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001073 SkPath path, pathB;
1074 path.moveTo(0,1);
1075 path.cubicTo(1,5, 1,0, 1,0);
1076 path.lineTo(0,1);
1077 path.close();
1078 pathB.moveTo(0,1);
1079 pathB.cubicTo(0,1, 1,0, 5,1);
1080 pathB.lineTo(0,1);
1081 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001082 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001083}
1084
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001085static void rectOp1d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001086 SkPath path, pathB;
1087 path.moveTo(0,1);
1088 path.cubicTo(0,1, 1,0, 3,0);
1089 path.lineTo(0,1);
1090 path.close();
1091 pathB.moveTo(0,1);
1092 pathB.cubicTo(0,3, 1,0, 1,0);
1093 pathB.lineTo(0,1);
1094 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001095 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00001096}
1097
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001098static void cubicOp66u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.comb3f09212013-04-17 15:49:16 +00001099 SkPath path, pathB;
1100 path.setFillType(SkPath::kWinding_FillType);
1101 path.moveTo(0,1);
1102 path.cubicTo(2,6, 4,2, 5,3);
1103 path.close();
1104 pathB.setFillType(SkPath::kWinding_FillType);
1105 pathB.moveTo(2,4);
1106 pathB.cubicTo(3,5, 1,0, 6,2);
1107 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001108 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.comb3f09212013-04-17 15:49:16 +00001109}
1110
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001111static void cubicOp67u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.comb3f09212013-04-17 15:49:16 +00001112 SkPath path, pathB;
1113 path.moveTo(3,5);
1114 path.cubicTo(1,6, 5,0, 3,1);
1115 path.lineTo(3,5);
1116 path.close();
1117 pathB.moveTo(0,5);
1118 pathB.cubicTo(1,3, 5,3, 6,1);
1119 pathB.lineTo(0,5);
1120 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001121 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.comb3f09212013-04-17 15:49:16 +00001122}
1123
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001124static void cubicOp68u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com03610322013-04-18 15:58:21 +00001125 SkPath path, pathB;
1126 path.moveTo(0,5);
1127 path.cubicTo(4,5, 4,1, 5,0);
1128 path.close();
1129 pathB.moveTo(1,4);
1130 pathB.cubicTo(0,5, 5,0, 5,4);
1131 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001132 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com03610322013-04-18 15:58:21 +00001133}
1134
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001135static void cubicOp69d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com03610322013-04-18 15:58:21 +00001136 SkPath path, pathB;
1137 path.moveTo(1,3);
1138 path.cubicTo(0,1, 3,1, 2,0);
1139 path.close();
1140 pathB.moveTo(1,3);
1141 pathB.cubicTo(0,2, 3,1, 1,0);
1142 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001143 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com03610322013-04-18 15:58:21 +00001144}
1145
caryclark@google.com6dc7df62013-04-25 11:51:54 +00001146SkPathOp ops[] = {
1147 kUnion_PathOp,
1148 kXOR_PathOp,
1149 kReverseDifference_PathOp,
1150 kXOR_PathOp,
1151 kReverseDifference_PathOp,
1152};
1153
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001154static void rRect1(skiatest::Reporter* reporter, const char* filename) {
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +00001155 SkScalar xA = 0.65f;
1156 SkScalar xB = 10.65f;
1157 SkScalar xC = 20.65f;
1158 SkScalar xD = 30.65f;
1159 SkScalar xE = 40.65f;
1160 SkScalar xF = 50.65f;
caryclark@google.com6dc7df62013-04-25 11:51:54 +00001161
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +00001162 SkScalar yA = 0.65f;
1163 SkScalar yB = 10.65f;
1164 SkScalar yC = 20.65f;
1165 SkScalar yD = 30.65f;
1166 SkScalar yE = 40.65f;
1167 SkScalar yF = 50.65f;
caryclark@google.coma5e55922013-05-07 18:51:31 +00001168 SkPath paths[5];
1169 SkRect rects[5];
1170 rects[0].set(xB, yB, xE, yE);
1171 paths[0].addRoundRect(rects[0], SkIntToScalar(5), SkIntToScalar(5)); // red
1172 rects[1].set(xA, yA, xD, yD);
1173 paths[1].addRoundRect(rects[1], SkIntToScalar(5), SkIntToScalar(5)); // green
1174 rects[2].set(xC, yA, xF, yD);
1175 paths[2].addRoundRect(rects[2], SkIntToScalar(5), SkIntToScalar(5)); // blue
1176 rects[3].set(xA, yC, xD, yF);
1177 paths[3].addRoundRect(rects[3], SkIntToScalar(5), SkIntToScalar(5)); // yellow
1178 rects[4].set(xC, yC, xF, yF);
1179 paths[4].addRoundRect(rects[4], SkIntToScalar(5), SkIntToScalar(5)); // cyan
1180 SkPath path;
1181 path.setFillType(SkPath::kInverseEvenOdd_FillType);
1182 for (int index = 0; index < 5; ++index) {
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001183 testPathOp(reporter, path, paths[index], ops[index], filename);
caryclark@google.coma5e55922013-05-07 18:51:31 +00001184 Op(path, paths[index], ops[index], &path);
1185 }
1186}
1187
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001188static void skp1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.coma5e55922013-05-07 18:51:31 +00001189 SkPath path;
1190 path.setFillType(SkPath::kEvenOdd_FillType);
1191 path.moveTo(189,7);
1192 path.cubicTo(189,5.34314585f, 190.34314f,4, 192,4);
1193 path.lineTo(243,4);
1194 path.cubicTo(244.65686f,4, 246,5.34314585f, 246,7);
1195 path.lineTo(246,21);
1196 path.cubicTo(246,22.6568546f, 244.65686f,24, 243,24);
1197 path.lineTo(192,24);
1198 path.cubicTo(190.34314f,24, 189,22.6568546f, 189,21);
1199 path.lineTo(189,7);
1200 path.close();
1201 path.moveTo(191,8);
1202 path.cubicTo(191,6.89543009f, 191.895432f,6, 193,6);
1203 path.lineTo(242,6);
1204 path.cubicTo(243.104568f,6, 244,6.89543009f, 244,8);
1205 path.lineTo(244,20);
1206 path.cubicTo(244,21.1045704f, 243.104568f,22, 242,22);
1207 path.lineTo(193,22);
1208 path.cubicTo(191.895432f,22, 191,21.1045704f, 191,20);
1209 path.lineTo(191,8);
1210 path.close();
1211 SkPath pathB;
1212 pathB.setFillType(SkPath::kWinding_FillType);
1213 pathB.moveTo(189,4);
1214 pathB.lineTo(199,14);
1215 pathB.lineTo(236,14);
1216 pathB.lineTo(246,4);
1217 pathB.lineTo(189,4);
1218 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001219 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.coma5e55922013-05-07 18:51:31 +00001220}
1221
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001222static void skp2(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.coma5e55922013-05-07 18:51:31 +00001223 SkPath path;
1224 path.setFillType(SkPath::kEvenOdd_FillType);
1225 path.moveTo(253.000000f, 11757.0000f);
1226 path.lineTo(253.000000f, 222.000000f);
1227 path.lineTo(823.000000f, 222.000000f);
1228 path.lineTo(823.000000f, 11757.0000f);
1229 path.lineTo(253.000000f, 11757.0000f);
1230 path.close();
1231 SkPath pathB;
1232 pathB.setFillType(SkPath::kWinding_FillType);
1233 pathB.moveTo(258.000000f, 1028.00000f);
1234 pathB.lineTo(258.000000f, 1027.00000f);
1235 pathB.lineTo(823.000000f, 1027.00000f);
1236 pathB.lineTo(823.000000f, 1028.00000f);
1237 pathB.lineTo(258.000000f, 1028.00000f);
1238 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001239 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.coma5e55922013-05-07 18:51:31 +00001240}
1241
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001242static void skp3(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.coma5e55922013-05-07 18:51:31 +00001243 SkPath path;
1244 path.setFillType(SkPath::kEvenOdd_FillType);
1245 path.moveTo(717.000000f, 507.000000f);
1246 path.lineTo(717.000000f, 425.000000f);
1247 path.lineTo(973.000000f, 425.000000f);
1248 path.lineTo(973.000000f, 507.000000f);
1249 path.quadTo(973.000000f, 508.242645f, 972.121582f, 509.121613f);
1250 path.quadTo(971.242615f, 510.000000f, 970.000000f, 510.000000f);
1251 path.lineTo(720.000000f, 510.000000f);
1252 path.quadTo(718.757385f, 510.000000f, 717.878418f, 509.121613f);
1253 path.quadTo(717.000000f, 508.242645f, 717.000000f, 507.000000f);
1254 path.close();
1255 path.moveTo(719.000000f, 426.000000f);
1256 path.lineTo(971.000000f, 426.000000f);
1257 path.lineTo(971.000000f, 506.000000f);
1258 path.cubicTo(971.000000f, 507.104584f, 970.104553f, 508.000000f, 969.000000f, 508.000000f);
1259 path.lineTo(721.000000f, 508.000000f);
1260 path.cubicTo(719.895447f, 508.000000f, 719.000000f, 507.104584f, 719.000000f, 506.000000f);
1261 path.lineTo(719.000000f, 426.000000f);
1262 path.close();
1263 SkPath pathB;
1264 pathB.setFillType(SkPath::kWinding_FillType);
1265 pathB.moveTo(717.000000f, 510.000000f);
1266 pathB.lineTo(760.000000f, 467.000000f);
1267 pathB.lineTo(930.000000f, 467.000000f);
1268 pathB.lineTo(973.000000f, 510.000000f);
1269 pathB.lineTo(717.000000f, 510.000000f);
1270 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001271 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.coma5e55922013-05-07 18:51:31 +00001272}
1273
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001274static void skp4(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.coma5e55922013-05-07 18:51:31 +00001275 SkPath path;
1276 path.setFillType(SkPath::kEvenOdd_FillType);
1277 path.moveTo(230.756805f, 591.756775f);
1278 path.quadTo(232.514725f, 590.000000f, 235.000000f, 590.000000f);
1279 path.lineTo(300.000000f, 590.000000f);
1280 path.quadTo(302.485291f, 590.000000f, 304.243195f, 591.756775f);
1281 path.quadTo(306.000000f, 593.514709f, 306.000000f, 596.000000f);
1282 path.lineTo(306.000000f, 617.000000f);
1283 path.lineTo(229.000000f, 617.000000f);
1284 path.lineTo(229.000000f, 596.000000f);
1285 path.quadTo(229.000000f, 593.514709f, 230.756805f, 591.756775f);
1286 path.close();
1287 path.moveTo(231.000000f, 597.000000f);
1288 path.cubicTo(231.000000f, 594.238586f, 233.238571f, 592.000000f, 236.000000f, 592.000000f);
1289 path.lineTo(299.000000f, 592.000000f);
1290 path.cubicTo(301.761414f, 592.000000f, 304.000000f, 594.238586f, 304.000000f, 597.000000f);
1291 path.lineTo(304.000000f, 616.000000f);
1292 path.lineTo(231.000000f, 616.000000f);
1293 path.lineTo(231.000000f, 597.000000f);
1294 path.close();
1295 SkPath pathB;
1296 pathB.setFillType(SkPath::kWinding_FillType);
1297 pathB.moveTo(306.000000f, 590.000000f);
1298 pathB.lineTo(292.000000f, 604.000000f);
1299 pathB.lineTo(305.000000f, 617.000000f);
1300 pathB.lineTo(306.000000f, 617.000000f);
1301 pathB.lineTo(306.000000f, 590.000000f);
1302 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001303 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.coma5e55922013-05-07 18:51:31 +00001304}
1305
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001306static void skp5(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.coma5e55922013-05-07 18:51:31 +00001307 SkPath path;
1308 path.setFillType(SkPath::kEvenOdd_FillType);
1309 path.moveTo(18.0000000f, 226.000000f);
1310 path.quadTo(14.6862917f, 226.000000f, 12.3423996f, 228.342407f);
1311 path.quadTo(10.0000000f, 230.686295f, 10.0000000f, 234.000000f);
1312 path.lineTo(10.0000000f, 253.000000f);
1313 path.lineTo(1247.00000f, 253.000000f);
1314 path.lineTo(1247.00000f, 234.000000f);
1315 path.quadTo(1247.00000f, 230.686295f, 1244.65759f, 228.342407f);
1316 path.quadTo(1242.31372f, 226.000000f, 1239.00000f, 226.000000f);
1317 path.lineTo(18.0000000f, 226.000000f);
1318 path.close();
1319 SkPath pathB;
1320 pathB.setFillType(SkPath::kInverseWinding_FillType);
1321 pathB.moveTo(18.0000000f, 226.000000f);
1322 pathB.lineTo(1239.00000f, 226.000000f);
1323 pathB.cubicTo(1243.41833f, 226.000000f, 1247.00000f, 229.581726f, 1247.00000f, 234.000000f);
1324 pathB.lineTo(1247.00000f, 252.000000f);
1325 pathB.lineTo(10.0000000f, 252.000000f);
1326 pathB.lineTo(10.0000000f, 234.000000f);
1327 pathB.cubicTo(10.0000000f, 229.581726f, 13.5817204f, 226.000000f, 18.0000000f, 226.000000f);
1328 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001329 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.coma5e55922013-05-07 18:51:31 +00001330}
1331
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001332static void cubicOp70d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.coma5e55922013-05-07 18:51:31 +00001333 SkPath path, pathB;
1334 path.setFillType(SkPath::kWinding_FillType);
1335 path.moveTo(0,1);
1336 path.cubicTo(0,5, 4,0, 5,0);
1337 path.close();
1338 pathB.setFillType(SkPath::kWinding_FillType);
1339 pathB.moveTo(0,4);
1340 pathB.cubicTo(0,5, 1,0, 5,0);
1341 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001342 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com6dc7df62013-04-25 11:51:54 +00001343}
1344
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001345static void cubicOp71d(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001346 SkPath path, pathB;
1347 path.setFillType(SkPath::kWinding_FillType);
1348 path.moveTo(0,1);
1349 path.cubicTo(0,5, 4,1, 6,4);
1350 path.close();
1351 pathB.setFillType(SkPath::kWinding_FillType);
1352 pathB.moveTo(1,4);
1353 pathB.cubicTo(4,6, 1,0, 5,0);
1354 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001355 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001356}
1357
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001358static void cubicOp72i(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001359 SkPath path, pathB;
1360 path.setFillType(SkPath::kWinding_FillType);
1361 path.moveTo(0,1);
1362 path.cubicTo(0,5, 5,2, 5,4);
1363 path.close();
1364 pathB.setFillType(SkPath::kWinding_FillType);
1365 pathB.moveTo(2,5);
1366 pathB.cubicTo(4,5, 1,0, 5,0);
1367 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001368 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001369}
1370
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001371static void cubicOp73d(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001372 SkPath path, pathB;
1373 path.setFillType(SkPath::kWinding_FillType);
1374 path.moveTo(0,1);
1375 path.cubicTo(3,4, 4,0, 6,4);
1376 path.lineTo(0,1);
1377 path.close();
1378 pathB.setFillType(SkPath::kWinding_FillType);
1379 pathB.moveTo(0,4);
1380 pathB.cubicTo(4,6, 1,0, 4,3);
1381 pathB.lineTo(0,4);
1382 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001383 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001384}
1385
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001386static void cubicOp74d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001387 SkPath path, pathB;
1388 path.setFillType(SkPath::kWinding_FillType);
1389 path.moveTo(0,1);
1390 path.cubicTo(1,5, 5,1, 5,1);
1391 path.lineTo(0,1);
1392 path.close();
1393 pathB.setFillType(SkPath::kWinding_FillType);
1394 pathB.moveTo(1,5);
1395 pathB.cubicTo(1,5, 1,0, 5,1);
1396 pathB.lineTo(1,5);
1397 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001398 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001399}
1400
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001401static void cubicOp75d(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001402 SkPath path, pathB;
1403 path.setFillType(SkPath::kWinding_FillType);
1404 path.moveTo(0,1);
1405 path.cubicTo(0,4, 5,1, 6,4);
1406 path.lineTo(0,1);
1407 path.close();
1408 pathB.setFillType(SkPath::kWinding_FillType);
1409 pathB.moveTo(1,5);
1410 pathB.cubicTo(4,6, 1,0, 4,0);
1411 pathB.lineTo(1,5);
1412 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001413 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001414}
1415
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001416static void cubicOp76u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001417 SkPath path, pathB;
1418 path.setFillType(SkPath::kWinding_FillType);
1419 path.moveTo(0,1);
1420 path.cubicTo(0,2, 2,0, 5,3);
1421 path.close();
1422 pathB.setFillType(SkPath::kWinding_FillType);
1423 pathB.moveTo(0,2);
1424 pathB.cubicTo(3,5, 1,0, 2,0);
1425 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001426 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001427}
1428
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001429static void cubicOp77i(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001430 SkPath path, pathB;
1431 path.setFillType(SkPath::kEvenOdd_FillType);
1432 path.moveTo(0,1);
1433 path.cubicTo(1,3, 2,0, 3,2);
1434 path.lineTo(0,1);
1435 path.close();
1436 pathB.setFillType(SkPath::kEvenOdd_FillType);
1437 pathB.moveTo(0,2);
1438 pathB.cubicTo(2,3, 1,0, 3,1);
1439 pathB.lineTo(0,2);
1440 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001441 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001442}
1443
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001444static void cubicOp78u(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001445 SkPath path, pathB;
1446 path.setFillType(SkPath::kEvenOdd_FillType);
1447 path.moveTo(1,6);
1448 path.cubicTo(1,6, 5,0, 6,1);
1449 path.lineTo(1,6);
1450 path.close();
1451 pathB.setFillType(SkPath::kEvenOdd_FillType);
1452 pathB.moveTo(0,5);
1453 pathB.cubicTo(1,6, 6,1, 6,1);
1454 pathB.lineTo(0,5);
1455 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001456 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001457}
1458
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001459static void cubicOp79u(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001460 SkPath path, pathB;
1461 path.setFillType(SkPath::kWinding_FillType);
1462 path.moveTo(0,1);
1463 path.cubicTo(1,3, 1,0, 6,4);
1464 path.close();
1465 pathB.setFillType(SkPath::kWinding_FillType);
1466 pathB.moveTo(0,1);
1467 pathB.cubicTo(4,6, 1,0, 3,1);
1468 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001469 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001470}
1471
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001472static void cubicOp80i(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001473 SkPath path, pathB;
1474 path.setFillType(SkPath::kWinding_FillType);
1475 path.moveTo(0,1);
1476 path.cubicTo(2,3, 2,1, 4,3);
1477 path.lineTo(0,1);
1478 path.close();
1479 pathB.setFillType(SkPath::kWinding_FillType);
1480 pathB.moveTo(1,2);
1481 pathB.cubicTo(3,4, 1,0, 3,2);
1482 pathB.lineTo(1,2);
1483 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001484 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001485}
1486
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001487static void cubicOp81d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001488 SkPath path, pathB;
1489 path.setFillType(SkPath::kWinding_FillType);
1490 path.moveTo(0,1);
1491 path.cubicTo(4,6, 4,3, 5,4);
1492 path.close();
1493 pathB.setFillType(SkPath::kWinding_FillType);
1494 pathB.moveTo(3,4);
1495 pathB.cubicTo(4,5, 1,0, 6,4);
1496 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001497 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001498}
1499
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001500static void cubicOp82i(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001501 SkPath path, pathB;
1502 path.setFillType(SkPath::kEvenOdd_FillType);
1503 path.moveTo(0,1);
1504 path.cubicTo(2,3, 5,2, 3,0);
1505 path.lineTo(0,1);
1506 path.close();
1507 pathB.setFillType(SkPath::kWinding_FillType);
1508 pathB.moveTo(2,5);
1509 pathB.cubicTo(0,3, 1,0, 3,2);
1510 pathB.lineTo(2,5);
1511 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001512 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001513}
1514
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001515static void cubicOp83i(skiatest::Reporter* reporter, const char* filename) {
reed@google.com277c3f82013-05-31 15:17:50 +00001516 SkPath path, pathB;
1517 path.setFillType(SkPath::kWinding_FillType);
1518 path.moveTo(0,1);
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001519 path.cubicTo(0,3, 2,1, 4,1);
1520 path.lineTo(0,1);
reed@google.com277c3f82013-05-31 15:17:50 +00001521 path.close();
1522 pathB.setFillType(SkPath::kWinding_FillType);
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001523 pathB.moveTo(1,2);
1524 pathB.cubicTo(1,4, 1,0, 3,0);
1525 pathB.lineTo(1,2);
1526 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001527 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001528}
1529
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001530static void cubicOp84d(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001531 SkPath path, pathB;
1532 path.setFillType(SkPath::kWinding_FillType);
1533 path.moveTo(0,4);
1534 path.cubicTo(2,3, 6,3, 3,2);
1535 path.close();
1536 pathB.setFillType(SkPath::kWinding_FillType);
1537 pathB.moveTo(3,6);
1538 pathB.cubicTo(2,3, 4,0, 3,2);
reed@google.com277c3f82013-05-31 15:17:50 +00001539 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001540 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
reed@google.com277c3f82013-05-31 15:17:50 +00001541}
1542
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001543static void skpClip1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001544 SkPath path;
1545 path.setFillType(SkPath::kEvenOdd_FillType);
1546 path.moveTo(1126.17114f, 877.171204f);
1547 path.quadTo(1127.34314f, 876.000000f, 1129.00000f, 876.000000f);
1548 path.lineTo(1243.00000f, 876.000000f);
1549 path.quadTo(1244.65686f, 876.000000f, 1245.82886f, 877.171204f);
1550 path.quadTo(1247.00000f, 878.343140f, 1247.00000f, 880.000000f);
1551 path.lineTo(1247.00000f, 907.000000f);
1552 path.lineTo(1246.00000f, 907.000000f);
1553 path.lineTo(1246.00000f, 880.000000f);
1554 path.cubicTo(1246.00000f, 878.343140f, 1244.65686f, 877.000000f, 1243.00000f, 877.000000f);
1555 path.lineTo(1129.00000f, 877.000000f);
1556 path.cubicTo(1127.34314f, 877.000000f, 1126.00000f, 878.343140f, 1126.00000f, 880.000000f);
1557 path.lineTo(1126.00000f, 907.000000f);
1558 path.lineTo(1125.00000f, 907.000000f);
1559 path.lineTo(1125.00000f, 880.000000f);
1560 path.quadTo(1125.00000f, 878.343140f, 1126.17114f, 877.171204f);
1561 path.close();
1562 SkPath pathB;
1563 pathB.setFillType(SkPath::kWinding_FillType);
1564 pathB.moveTo(1247.00000f, 876.000000f);
1565 pathB.lineTo(1231.00000f, 892.000000f);
1566 pathB.lineTo(1246.00000f, 907.000000f);
1567 pathB.lineTo(1247.00000f, 907.000000f);
1568 pathB.lineTo(1247.00000f, 876.000000f);
1569 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001570 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001571}
1572
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001573static void skpClip2(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001574 SkPath path;
1575 path.setFillType(SkPath::kEvenOdd_FillType);
1576 path.moveTo(134.000000f, 11414.0000f);
1577 path.cubicTo(131.990234f, 11414.0000f, 130.326660f, 11415.4824f, 130.042755f, 11417.4131f);
1578 path.cubicTo(130.233124f, 11418.3193f, 131.037079f, 11419.0000f, 132.000000f, 11419.0000f);
1579 path.lineTo(806.000000f, 11419.0000f);
1580 path.cubicTo(806.962891f, 11419.0000f, 807.766907f, 11418.3193f, 807.957275f, 11417.4131f);
1581 path.cubicTo(807.673401f, 11415.4824f, 806.009766f, 11414.0000f, 804.000000f, 11414.0000f);
1582 path.lineTo(134.000000f, 11414.0000f);
1583 path.close();
1584 SkPath pathB;
1585 pathB.setFillType(SkPath::kInverseWinding_FillType);
1586 pathB.moveTo(132.000000f, 11415.0000f);
1587 pathB.lineTo(806.000000f, 11415.0000f);
1588 pathB.cubicTo(807.104553f, 11415.0000f, 808.000000f, 11415.4473f, 808.000000f, 11416.0000f);
1589 pathB.lineTo(808.000000f, 11417.0000f);
1590 pathB.cubicTo(808.000000f, 11418.1045f, 807.104553f, 11419.0000f, 806.000000f, 11419.0000f);
1591 pathB.lineTo(132.000000f, 11419.0000f);
1592 pathB.cubicTo(130.895432f, 11419.0000f, 130.000000f, 11418.1045f, 130.000000f, 11417.0000f);
1593 pathB.lineTo(130.000000f, 11416.0000f);
1594 pathB.cubicTo(130.000000f, 11415.4473f, 130.895432f, 11415.0000f, 132.000000f, 11415.0000f);
1595 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001596 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001597}
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001598
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001599static void skp96prezzi1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001600 SkPath path;
1601 path.setFillType(SkPath::kEvenOdd_FillType);
1602 path.moveTo(157.464005f, 670.463989f);
1603 path.quadTo(158.928925f, 669.000000f, 161.000000f, 669.000000f);
1604 path.lineTo(248.000000f, 669.000000f);
1605 path.quadTo(250.071075f, 669.000000f, 251.535995f, 670.463989f);
1606 path.quadTo(253.000000f, 671.928955f, 253.000000f, 674.000000f);
1607 path.lineTo(253.000000f, 706.000000f);
1608 path.lineTo(251.000000f, 706.000000f);
1609 path.lineTo(251.000000f, 675.000000f);
1610 path.cubicTo(251.000000f, 672.790833f, 249.209137f, 671.000000f, 247.000000f, 671.000000f);
1611 path.lineTo(162.000000f, 671.000000f);
1612 path.cubicTo(159.790863f, 671.000000f, 158.000000f, 672.790833f, 158.000000f, 675.000000f);
1613 path.lineTo(158.000000f, 706.000000f);
1614 path.lineTo(156.000000f, 706.000000f);
1615 path.lineTo(156.000000f, 674.000000f);
1616 path.quadTo(156.000000f, 671.928955f, 157.464005f, 670.463989f);
1617 path.close();
1618 SkPath pathB;
1619 pathB.setFillType(SkPath::kWinding_FillType);
1620 pathB.moveTo(156.000000f, 669.000000f);
1621 pathB.lineTo(178.500000f, 691.500000f);
1622 pathB.lineTo(230.500000f, 691.500000f);
1623 pathB.lineTo(253.000000f, 669.000000f);
1624 pathB.lineTo(156.000000f, 669.000000f);
1625 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001626 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001627}
1628
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001629static void skpancestry_com1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001630 SkPath path;
1631 path.setFillType(SkPath::kEvenOdd_FillType);
1632 path.moveTo(161.000000f, 925.000000f);
1633 path.cubicTo(159.874390f, 925.000000f, 158.835663f, 925.371948f, 158.000000f, 925.999634f);
1634 path.lineTo(158.000000f, 926.000000f);
1635 path.lineTo(1108.00000f, 926.000000f);
1636 path.lineTo(1108.00000f, 925.999634f);
1637 path.cubicTo(1107.16443f, 925.371948f, 1106.12561f, 925.000000f, 1105.00000f, 925.000000f);
1638 path.lineTo(161.000000f, 925.000000f);
1639 path.close();
1640 SkPath pathB;
1641 pathB.setFillType(SkPath::kEvenOdd_FillType);
1642 pathB.moveTo(161.000000f, 926.000000f);
1643 pathB.lineTo(1105.00000f, 926.000000f);
1644 pathB.cubicTo(1107.20911f, 926.000000f, 1109.00000f, 927.790833f, 1109.00000f, 930.000000f);
1645 pathB.lineTo(1109.00000f, 956.000000f);
1646 pathB.cubicTo(1109.00000f, 958.209167f, 1107.20911f, 960.000000f, 1105.00000f, 960.000000f);
1647 pathB.lineTo(161.000000f, 960.000000f);
1648 pathB.cubicTo(158.790863f, 960.000000f, 157.000000f, 958.209167f, 157.000000f, 956.000000f);
1649 pathB.lineTo(157.000000f, 930.000000f);
1650 pathB.cubicTo(157.000000f, 927.790833f, 158.790863f, 926.000000f, 161.000000f, 926.000000f);
1651 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001652 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001653}
1654
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001655static void skpeldorado_com_ua1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001656 SkPath path;
1657 path.setFillType(SkPath::kEvenOdd_FillType);
1658 path.moveTo(286.695129f, 291.000000f);
1659 path.lineTo(229.304855f, 561.000000f);
1660 path.lineTo(979.304871f, 561.000000f);
1661 path.lineTo(1036.69507f, 291.000000f);
1662 path.lineTo(286.695129f, 291.000000f);
1663 path.close();
1664 SkPath pathB;
1665 pathB.setFillType(SkPath::kWinding_FillType);
1666 pathB.moveTo(1006.69513f, 291.000000f);
1667 pathB.cubicTo(1023.26367f, 291.000000f, 1033.84021f, 304.431458f, 1030.31836f, 321.000000f);
1668 pathB.lineTo(985.681519f, 531.000000f);
1669 pathB.cubicTo(982.159790f, 547.568542f, 965.873413f, 561.000000f, 949.304871f, 561.000000f);
1670 pathB.lineTo(259.304871f, 561.000000f);
1671 pathB.cubicTo(242.736313f, 561.000000f, 232.159805f, 547.568542f, 235.681549f, 531.000000f);
1672 pathB.lineTo(280.318420f, 321.000000f);
1673 pathB.cubicTo(283.840179f, 304.431458f, 300.126587f, 291.000000f, 316.695129f, 291.000000f);
1674 pathB.lineTo(1006.69513f, 291.000000f);
1675 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001676 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001677}
1678
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001679static void skpbyte_com1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001680 SkPath path;
1681 path.setFillType(SkPath::kEvenOdd_FillType);
1682 path.moveTo(968.000000f, 14.0000000f);
1683 path.cubicTo(965.238586f, 14.0000000f, 963.000000f, 16.2385769f, 963.000000f, 19.0000000f);
1684 path.lineTo(963.000000f, 32.0000000f);
1685 path.cubicTo(963.000000f, 34.7614250f, 965.238586f, 37.0000000f, 968.000000f, 37.0000000f);
1686 path.lineTo(1034.00000f, 37.0000000f);
1687 path.cubicTo(1036.76147f, 37.0000000f, 1039.00000f, 34.7614250f, 1039.00000f, 32.0000000f);
1688 path.lineTo(1039.00000f, 19.0000000f);
1689 path.cubicTo(1039.00000f, 16.2385769f, 1036.76147f, 14.0000000f, 1034.00000f, 14.0000000f);
1690 path.lineTo(968.000000f, 14.0000000f);
1691 path.close();
1692 SkPath pathB;
1693 pathB.setFillType(SkPath::kInverseWinding_FillType);
1694 pathB.moveTo(968.000000f, 14.0000000f);
1695 pathB.lineTo(1034.00000f, 14.0000000f);
1696 pathB.cubicTo(1036.76147f, 14.0000000f, 1039.00000f, 16.2385750f, 1039.00000f, 19.0000000f);
1697 pathB.lineTo(1039.00000f, 32.0000000f);
1698 pathB.cubicTo(1039.00000f, 34.2091408f, 1036.76147f, 36.0000000f, 1034.00000f, 36.0000000f);
1699 pathB.lineTo(968.000000f, 36.0000000f);
1700 pathB.cubicTo(965.238586f, 36.0000000f, 963.000000f, 34.2091408f, 963.000000f, 32.0000000f);
1701 pathB.lineTo(963.000000f, 19.0000000f);
1702 pathB.cubicTo(963.000000f, 16.2385750f, 965.238586f, 14.0000000f, 968.000000f, 14.0000000f);
1703 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001704 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001705}
1706
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001707static void skphealth_com76(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001708 SkPath path;
1709 path.setFillType(SkPath::kEvenOdd_FillType);
1710 path.moveTo(708.099182f, 7.09919119f);
1711 path.lineTo(708.099182f, 7.09920025f);
1712 path.quadTo(704.000000f, 11.2010098f, 704.000000f, 17.0000000f);
1713 path.lineTo(704.000000f, 33.0000000f);
1714 path.lineTo(705.000000f, 33.0000000f);
1715 path.lineTo(705.000000f, 17.0000000f);
1716 path.cubicTo(705.000000f, 13.4101496f, 706.455078f, 10.1601505f, 708.807617f, 7.80761385f);
1717 path.lineTo(708.099182f, 7.09919119f);
1718 path.close();
1719 SkPath pathB;
1720 pathB.setFillType(SkPath::kWinding_FillType);
1721 pathB.moveTo(704.000000f, 3.00000000f);
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001722 pathB.lineTo(704.000000f, 33.0000000f);
1723 pathB.lineTo(705.000000f, 33.0000000f);
1724 pathB.lineTo(719.500000f, 3.00000000f);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001725 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com07e97fc2013-07-08 17:17:02 +00001726}
caryclark@google.comcffbcc32013-06-04 17:59:42 +00001727
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001728static void skpahrefs_com88(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001729 SkPath path;
1730 path.setFillType(SkPath::kEvenOdd_FillType);
1731 path.moveTo(1099.82886f, 7.17117119f);
1732 path.lineTo(1099.12134f, 7.87867832f);
1733 path.cubicTo(1099.66418f, 8.42157173f, 1100.00000f, 9.17157173f, 1100.00000f, 10.0000000f);
1734 path.lineTo(1100.00000f, 28.0000000f);
1735 path.cubicTo(1100.00000f, 29.6568546f, 1098.65686f, 31.0000000f, 1097.00000f, 31.0000000f);
1736 path.lineTo(1088.00000f, 31.0000000f);
1737 path.lineTo(1088.00000f, 32.0000000f);
1738 path.lineTo(1097.00000f, 32.0000000f);
1739 path.quadTo(1098.65686f, 32.0000000f, 1099.82886f, 30.8288002f);
1740 path.quadTo(1101.00000f, 29.6568546f, 1101.00000f, 28.0000000f);
1741 path.lineTo(1101.00000f, 10.0000000f);
1742 path.quadTo(1101.00000f, 8.34314537f, 1099.82886f, 7.17119980f);
1743 path.lineTo(1099.82886f, 7.17117119f);
1744 path.close();
1745 SkPath pathB;
1746 pathB.setFillType(SkPath::kWinding_FillType);
1747 pathB.moveTo(1101.00000f, 6.00000000f);
1748 pathB.lineTo(1088.00000f, 6.00000000f);
1749 pathB.lineTo(1088.00000f, 19.0000000f);
1750 pathB.lineTo(1101.00000f, 32.0000000f);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001751 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001752}
caryclark@google.comfa2aeee2013-07-15 13:29:13 +00001753
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001754static void skpahrefs_com29(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001755 SkPath path;
1756 path.setFillType(SkPath::kEvenOdd_FillType);
1757 path.moveTo(1037.17114f, 7.17119980f);
1758 path.quadTo(1038.34314f, 6.00000000f, 1040.00000f, 6.00000000f);
1759 path.lineTo(1074.00000f, 6.00000000f);
1760 path.lineTo(1074.00000f, 32.0000000f);
1761 path.lineTo(1040.00000f, 32.0000000f);
1762 path.quadTo(1038.34314f, 32.0000000f, 1037.17114f, 30.8288002f);
1763 path.quadTo(1036.00000f, 29.6568546f, 1036.00000f, 28.0000000f);
1764 path.lineTo(1036.00000f, 10.0000000f);
1765 path.quadTo(1036.00000f, 8.34314537f, 1037.17114f, 7.17119980f);
1766 path.close();
1767 path.moveTo(1037.00000f, 10.0000000f);
1768 path.cubicTo(1037.00000f, 8.34314537f, 1038.34314f, 7.00000000f, 1040.00000f, 7.00000000f);
1769 path.lineTo(1073.00000f, 7.00000000f);
1770 path.lineTo(1073.00000f, 31.0000000f);
1771 path.lineTo(1040.00000f, 31.0000000f);
1772 path.cubicTo(1038.34314f, 31.0000000f, 1037.00000f, 29.6568546f, 1037.00000f, 28.0000000f);
1773 path.lineTo(1037.00000f, 10.0000000f);
1774 path.close();
1775 SkPath pathB;
1776 pathB.setFillType(SkPath::kWinding_FillType);
1777 pathB.moveTo(1036.00000f, 32.0000000f);
1778 pathB.lineTo(1049.00000f, 19.0000000f);
1779 pathB.lineTo(1073.00000f, 31.0000000f);
1780 pathB.lineTo(1074.00000f, 32.0000000f);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001781 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001782}
caryclark@google.comfa2aeee2013-07-15 13:29:13 +00001783
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001784static void cubicOp85d(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001785 SkPath path;
1786 path.setFillType(SkPath::kWinding_FillType);
1787 path.moveTo(0,1);
1788 path.cubicTo(1,6, 1,0, 6,2);
1789 path.close();
1790 SkPath pathB;
1791 pathB.setFillType(SkPath::kWinding_FillType);
1792 pathB.moveTo(0,1);
1793 pathB.cubicTo(2,6, 1,0, 6,1);
1794 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001795 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.comfa2aeee2013-07-15 13:29:13 +00001796}
1797
caryclark@google.comfa2aeee2013-07-15 13:29:13 +00001798// this fails because the pair of nearly coincident cubics intersect at the ends
1799// but the line connected to one of the cubics at the same point does not intersect
1800// the other
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001801static void skpkkiste_to98(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001802 SkPath path;
1803 path.setFillType(SkPath::kEvenOdd_FillType);
1804 path.moveTo(96, 122);
1805 path.cubicTo(94.6192932f, 122, 93.3692932f, 122.559647f, 92.4644699f, 123.46447f);
1806 path.lineTo(94.1715698f, 125.17157f);
1807 path.cubicTo(94.8954315f, 124.447708f, 95.8954315f, 124, 97, 124);
1808 path.lineTo(257, 124);
1809 path.cubicTo(258.104553f, 124, 259.104584f, 124.447708f, 259.82843f, 125.17157f);
1810 path.lineTo(261.535522f, 123.46447f);
1811 path.cubicTo(260.630707f, 122.559647f, 259.380707f, 122, 258, 122);
1812 path.lineTo(96, 122);
1813 path.close();
1814 SkPath pathB;
1815 pathB.setFillType(SkPath::kWinding_FillType);
1816 pathB.moveTo(258, 122);
1817 pathB.cubicTo(260.761414f, 122, 263, 124.238579f, 263, 127);
1818 pathB.lineTo(263, 284);
1819 pathB.cubicTo(263, 286.761414f, 260.761414f, 289, 258, 289);
1820 pathB.lineTo(96, 289);
1821 pathB.cubicTo(93.2385788f, 289, 91, 286.761414f, 91, 284);
1822 pathB.lineTo(91, 127);
1823 pathB.cubicTo(91, 124.238579f, 93.2385788f, 122, 96, 122);
1824 pathB.lineTo(258, 122);
1825 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001826 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001827}
caryclark@google.comfa2aeee2013-07-15 13:29:13 +00001828
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001829static void issue1417(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.com7f1af502013-07-24 07:01:12 +00001830 SkPath path1;
1831 path1.moveTo(122.58908843994140625f, 82.2836456298828125f);
1832 path1.quadTo(129.8215789794921875f, 80, 138, 80);
1833 path1.quadTo(147.15692138671875f, 80, 155.1280364990234375f, 82.86279296875f);
1834 path1.lineTo(161.1764678955078125f, 100);
1835 path1.lineTo(161.1764678955078125f, 100);
1836 path1.lineTo(115.29412078857421875f, 100);
1837 path1.lineTo(115.29412078857421875f, 100);
1838 path1.lineTo(122.58908843994140625f, 82.2836456298828125f);
1839 path1.lineTo(122.58908843994140625f, 82.2836456298828125f);
1840 path1.close();
1841 path1.moveTo(98.68194580078125f, 140.343841552734375f);
1842 path1.lineTo(115.29412078857421875f, 100);
1843 path1.lineTo(115.29412078857421875f, 100);
1844 path1.lineTo(97.9337615966796875f, 100);
1845 path1.lineTo(97.9337615966796875f, 100);
1846 path1.quadTo(88, 112.94264984130859375f, 88, 130);
1847 path1.quadTo(88, 131.544830322265625f, 88.08148956298828125f, 133.0560302734375f);
1848 path1.lineTo(98.68194580078125f, 140.343841552734375f);
1849 path1.lineTo(98.68194580078125f, 140.343841552734375f);
1850 path1.close();
1851 path1.moveTo(136.969696044921875f, 166.6666717529296875f);
1852 path1.lineTo(98.68194580078125f, 140.343841552734375f);
1853 path1.lineTo(98.68194580078125f, 140.343841552734375f);
1854 path1.lineTo(93.45894622802734375f, 153.02825927734375f);
1855 path1.lineTo(93.45894622802734375f, 153.02825927734375f);
1856 path1.quadTo(96.94116973876953125f, 159.65185546875f, 102.64466094970703125f, 165.3553466796875f);
1857 path1.quadTo(110.7924652099609375f, 173.503143310546875f, 120.8179779052734375f, 177.1177825927734375f);
1858 path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1859 path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1860 path1.close();
1861 path1.moveTo(175.8309783935546875f, 141.5211334228515625f);
1862 path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1863 path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1864 path1.lineTo(153.15728759765625f, 177.7956390380859375f);
1865 path1.lineTo(153.15728759765625f, 177.7956390380859375f);
1866 path1.quadTo(164.392425537109375f, 174.318267822265625f, 173.3553466796875f, 165.3553466796875f);
1867 path1.quadTo(177.805816650390625f, 160.9048614501953125f, 180.90380859375f, 155.8941650390625f);
1868 path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1869 path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1870 path1.close();
1871 path1.moveTo(175.8309783935546875f, 141.5211334228515625f);
1872 path1.lineTo(187.8782806396484375f, 133.7258148193359375f);
1873 path1.lineTo(187.8782806396484375f, 133.7258148193359375f);
1874 path1.quadTo(188, 131.8880615234375f, 188, 130);
1875 path1.quadTo(188, 112.942657470703125f, 178.0662384033203125f, 100);
1876 path1.lineTo(161.1764678955078125f, 100);
1877 path1.lineTo(161.1764678955078125f, 100);
1878 path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1879 path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1880 path1.close();
1881
1882 SkPath path2;
1883 path2.moveTo(174.117645263671875f, 100);
1884 path2.lineTo(161.1764678955078125f, 100);
1885 path2.lineTo(161.1764678955078125f, 100);
1886 path2.lineTo(155.1280364990234375f, 82.86279296875f);
1887 path2.lineTo(155.1280364990234375f, 82.86279296875f);
1888 path2.quadTo(153.14971923828125f, 82.15229034423828125f, 151.098419189453125f, 81.618133544921875f);
1889 path2.lineTo(143.5294189453125f, 100);
1890 path2.lineTo(143.5294189453125f, 100);
1891 path2.lineTo(161.1764678955078125f, 100);
1892 path2.lineTo(161.1764678955078125f, 100);
1893 path2.lineTo(168.23529052734375f, 120);
1894 path2.lineTo(168.23529052734375f, 120);
1895 path2.lineTo(181.1764678955078125f, 120);
1896 path2.lineTo(181.1764678955078125f, 120);
1897 path2.lineTo(186.3661956787109375f, 134.7042236328125f);
1898 path2.lineTo(186.3661956787109375f, 134.7042236328125f);
1899 path2.lineTo(187.8782806396484375f, 133.7258148193359375f);
1900 path2.lineTo(187.8782806396484375f, 133.7258148193359375f);
1901 path2.quadTo(188, 131.8880615234375f, 188, 130);
1902 path2.quadTo(188, 124.80947113037109375f, 187.080169677734375f, 120);
1903 path2.lineTo(181.1764678955078125f, 120);
1904 path2.lineTo(181.1764678955078125f, 120);
1905 path2.lineTo(174.117645263671875f, 100);
1906 path2.lineTo(174.117645263671875f, 100);
1907 path2.close();
1908 path2.moveTo(88.91983795166015625f, 120);
1909 path2.lineTo(107.0588226318359375f, 120);
1910 path2.lineTo(107.0588226318359375f, 120);
1911 path2.lineTo(98.68194580078125f, 140.343841552734375f);
1912 path2.lineTo(98.68194580078125f, 140.343841552734375f);
1913 path2.lineTo(88.08148956298828125f, 133.0560302734375f);
1914 path2.lineTo(88.08148956298828125f, 133.0560302734375f);
1915 path2.quadTo(88, 131.544830322265625f, 88, 130);
1916 path2.quadTo(88, 124.80951690673828125f, 88.91983795166015625f, 120);
1917 path2.close();
1918 path2.moveTo(96.67621612548828125f, 145.21490478515625f);
1919 path2.lineTo(98.68194580078125f, 140.343841552734375f);
1920 path2.lineTo(98.68194580078125f, 140.343841552734375f);
1921 path2.lineTo(120.68767547607421875f, 155.4727783203125f);
1922 path2.lineTo(120.68767547607421875f, 155.4727783203125f);
1923 path2.lineTo(118.68194580078125f, 160.343841552734375f);
1924 path2.lineTo(118.68194580078125f, 160.343841552734375f);
1925 path2.lineTo(96.67621612548828125f, 145.21490478515625f);
1926 path2.lineTo(96.67621612548828125f, 145.21490478515625f);
1927 path2.close();
1928 path2.moveTo(113.232177734375f, 173.5789947509765625f);
1929 path2.quadTo(116.8802642822265625f, 175.69805908203125f, 120.8179779052734375f, 177.1177825927734375f);
1930 path2.lineTo(132.2864990234375f, 169.6969757080078125f);
1931 path2.lineTo(132.2864990234375f, 169.6969757080078125f);
1932 path2.lineTo(118.68194580078125f, 160.343841552734375f);
1933 path2.lineTo(118.68194580078125f, 160.343841552734375f);
1934 path2.lineTo(113.232177734375f, 173.5789947509765625f);
1935 path2.lineTo(113.232177734375f, 173.5789947509765625f);
1936 path2.close();
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001937
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001938 testPathOp(reporter, path1, path2, kUnion_PathOp, filename);
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001939}
caryclark@google.com3dd27842013-07-15 15:00:58 +00001940
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001941static void issue1418(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.com7f1af502013-07-24 07:01:12 +00001942 SkPath path1;
1943 path1.moveTo(0, 0);
1944 path1.lineTo(1, 0);
1945 path1.lineTo(1, 0);
1946 path1.lineTo(1, 1);
1947 path1.lineTo(1, 1);
1948 path1.lineTo(0, 1);
1949 path1.lineTo(0, 1);
1950 path1.lineTo(0, 0);
1951 path1.lineTo(0, 0);
1952 path1.close();
1953
1954 SkPath path2;
1955 path2.moveTo(0.64644664525985717773f, -0.35355341434478759766f);
1956 path2.quadTo(0.79289329051971435547f, -0.50000005960464477539f, 1.0000001192092895508f, -0.50000005960464477539f);
1957 path2.quadTo(1.2071068286895751953f, -0.50000005960464477539f, 1.3535535335540771484f, -0.35355341434478759766f);
1958 path2.quadTo(1.5000001192092895508f, -0.20710679888725280762f, 1.5000001192092895508f, 0);
1959 path2.quadTo(1.5000001192092895508f, 0.20710679888725280762f, 1.3535535335540771484f, 0.35355341434478759766f);
1960 path2.quadTo(1.2071068286895751953f, 0.50000005960464477539f, 1.0000001192092895508f, 0.50000005960464477539f);
1961 path2.quadTo(0.79289329051971435547f, 0.50000005960464477539f, 0.64644664525985717773f, 0.35355341434478759766f);
1962 path2.quadTo(0.50000005960464477539f, 0.20710679888725280762f, 0.50000005960464477539f, 0);
caryclark@google.com4fdbb222013-07-23 15:27:41 +00001963 path2.quadTo(0.50000005960464477539f, -0.20710679888725280762f, 0.64644664525985717773f, -0.35355341434478759766f);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001964 testPathOp(reporter, path1, path2, kIntersect_PathOp, filename);
skia.committer@gmail.com977409a2013-07-16 07:00:56 +00001965}
caryclark@google.com4fdbb222013-07-23 15:27:41 +00001966
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001967static void cubicOp85i(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.com7f1af502013-07-24 07:01:12 +00001968 SkPath path, pathB;
1969 path.setFillType(SkPath::kWinding_FillType);
1970 path.moveTo(3, 4);
1971 path.cubicTo(1, 5, 4, 3, 6, 4);
1972 path.close();
1973 pathB.setFillType(SkPath::kWinding_FillType);
1974 pathB.moveTo(3, 4);
1975 pathB.cubicTo(4, 6, 4, 3, 5, 1);
1976 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001977 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com4fdbb222013-07-23 15:27:41 +00001978}
1979
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00001980static void issue1418b(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00001981 SkPath path1;
1982 path1.moveTo(0, 0);
1983 path1.lineTo(1, 0);
1984 path1.lineTo(1, 1);
1985 path1.lineTo(0, 1);
1986 path1.lineTo(0, 0);
1987 path1.close();
1988 path1.setFillType(SkPath::kWinding_FillType);
1989 SkPath path2;
1990 path2.moveTo(0.646446645f, -0.353553414f);
1991 path2.quadTo(0.792893291f, -0.50000006f, 1.00000012f, -0.50000006f);
1992 path2.quadTo(1.20710683f, -0.50000006f, 1.35355353f, -0.353553414f);
1993 path2.quadTo(1.50000012f, -0.207106799f, 1.50000012f, 0);
1994 path2.quadTo(1.50000012f, 0.207106799f, 1.35355353f, 0.353553414f);
1995 path2.quadTo(1.20710683f, 0.50000006f, 1.00000012f, 0.50000006f);
1996 path2.quadTo(0.792893291f, 0.50000006f, 0.646446645f, 0.353553414f);
1997 path2.quadTo(0.50000006f, 0.207106799f, 0.50000006f, 0);
1998 path2.quadTo(0.50000006f, -0.207106799f, 0.646446645f, -0.353553414f);
1999 path2.close();
2000 path2.moveTo(1.00000012f, 0.50000006f);
2001 path2.lineTo(1.00000012f, 1.00000012f);
2002 path2.lineTo(0.50000006f, 1.00000012f);
2003 path2.quadTo(0.50000006f, 0.792893291f, 0.646446645f, 0.646446645f);
2004 path2.quadTo(0.792893291f, 0.50000006f, 1.00000012f, 0.50000006f);
2005 path2.close();
2006 path2.setFillType(SkPath::kEvenOdd_FillType);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002007 testPathOp(reporter, path1, path2, kIntersect_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002008}
2009
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002010static void rectOp1i(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002011 SkPath path, pathB;
2012 path.setFillType(SkPath::kWinding_FillType);
2013 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2014 path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
2015 pathB.setFillType(SkPath::kWinding_FillType);
2016 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2017 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002018 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002019}
2020
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002021static void rectOp2i(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002022 SkPath path, pathB;
2023 path.setFillType(SkPath::kEvenOdd_FillType);
2024 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2025 path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
2026 pathB.setFillType(SkPath::kWinding_FillType);
2027 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
2028 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002029 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002030}
2031
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002032static void rectOp3x(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002033 SkPath path, pathB;
2034 path.setFillType(SkPath::kEvenOdd_FillType);
2035 path.moveTo(0, 0);
2036 path.lineTo(3, 0);
2037 path.lineTo(3, 3);
2038 path.lineTo(0, 3);
2039 path.close();
2040 path.moveTo(2, 2);
2041 path.lineTo(3, 2);
2042 path.lineTo(3, 3);
2043 path.lineTo(2, 3);
2044 path.close();
2045 pathB.setFillType(SkPath::kWinding_FillType);
2046 pathB.moveTo(1, 1);
2047 pathB.lineTo(3, 1);
2048 pathB.lineTo(3, 3);
2049 pathB.lineTo(1, 3);
2050 pathB.close();
2051 pathB.moveTo(2, 2);
2052 pathB.lineTo(3, 2);
2053 pathB.lineTo(3, 3);
2054 pathB.lineTo(2, 3);
2055 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002056 testPathOp(reporter, path, pathB, kXOR_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002057}
2058
caryclarkdac1d172014-06-17 05:15:38 -07002059// this fails to generate two interior line segments
2060// an earlier pathops succeeded, but still failed to generate one interior line segment
2061// (but was saved by assemble, which works around a single line missing segment)
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002062static void issue1435(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002063 SkPath path1;
2064 path1.moveTo(160, 60);
2065 path1.lineTo(220, 230);
2066 path1.lineTo(60, 120);
2067 path1.lineTo(260, 120);
2068 path1.lineTo(90, 230);
2069 path1.lineTo(160, 60);
2070 path1.close();
2071 path1.setFillType(SkPath::kEvenOdd_FillType);
2072
caryclark@google.com570863f2013-09-16 15:55:01 +00002073 SkPath path2;
2074 path2.moveTo(142.589081f, 102.283646f);
2075 path2.quadTo(149.821579f, 100, 158, 100);
2076 path2.quadTo(167.156921f, 100, 175.128036f, 102.862793f);
2077 path2.lineTo(181.176468f, 120);
2078 path2.lineTo(135.294128f, 120);
2079 path2.lineTo(142.589081f, 102.283646f);
2080 path2.close();
2081 path2.moveTo(118.681946f, 160.343842f);
2082 path2.lineTo(135.294128f, 120);
2083 path2.lineTo(117.933762f, 120);
2084 path2.quadTo(108, 132.942657f, 108, 150);
2085 path2.quadTo(108, 151.54483f, 108.08149f, 153.05603f);
2086 path2.lineTo(118.681946f, 160.343842f);
2087 path2.close();
2088 path2.moveTo(156.969696f, 186.666672f);
2089 path2.lineTo(118.681946f, 160.343842f);
2090 path2.lineTo(113.458946f, 173.028259f);
2091 path2.quadTo(116.94117f, 179.651855f, 122.644661f, 185.355347f);
2092 path2.quadTo(130.792465f, 193.503143f, 140.817978f, 197.117783f);
2093 path2.lineTo(156.969696f, 186.666672f);
2094 path2.close();
2095 path2.moveTo(195.830978f, 161.521133f);
2096 path2.lineTo(156.969696f, 186.666672f);
2097 path2.lineTo(173.157288f, 197.795639f);
2098 path2.quadTo(184.392426f, 194.318268f, 193.355347f, 185.355347f);
2099 path2.quadTo(197.805817f, 180.904861f, 200.903809f, 175.894165f);
2100 path2.lineTo(195.830978f, 161.521133f);
2101 path2.close();
2102 path2.moveTo(195.830978f, 161.521133f);
2103 path2.lineTo(207.878281f, 153.725815f);
2104 path2.quadTo(208, 151.888062f, 208, 150);
2105 path2.quadTo(208, 132.942657f, 198.066238f, 120);
2106 path2.lineTo(181.176468f, 120);
2107 path2.lineTo(195.830978f, 161.521133f);
2108 path2.close();
2109 path2.setFillType(SkPath::kEvenOdd_FillType);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002110 testPathOp(reporter, path1, path2, kIntersect_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002111}
caryclark@google.com570863f2013-09-16 15:55:01 +00002112
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002113static void skpkkiste_to716(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.com7f1af502013-07-24 07:01:12 +00002114 SkPath path;
2115 path.setFillType(SkPath::kEvenOdd_FillType);
2116 path.moveTo(1173, 284);
2117 path.cubicTo(1173, 285.125824f, 1173.37207f, 286.164734f, 1174, 287.000488f);
2118 path.lineTo(1174, 123.999496f);
2119 path.cubicTo(1173.37207f, 124.835243f, 1173, 125.874168f, 1173, 127);
2120 path.lineTo(1173, 284);
2121 path.close();
2122 SkPath pathB;
2123 pathB.setFillType(SkPath::kWinding_FillType);
2124 pathB.moveTo(1340, 122);
2125 pathB.cubicTo(1342.76147f, 122, 1345, 124.238579f, 1345, 127);
2126 pathB.lineTo(1345, 284);
2127 pathB.cubicTo(1345, 286.761414f, 1342.76147f, 289, 1340, 289);
2128 pathB.lineTo(1178, 289);
2129 pathB.cubicTo(1175.23853f, 289, 1173, 286.761414f, 1173, 284);
2130 pathB.lineTo(1173, 127);
2131 pathB.cubicTo(1173, 124.238579f, 1175.23853f, 122, 1178, 122);
2132 pathB.lineTo(1340, 122);
2133 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002134 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.com7f1af502013-07-24 07:01:12 +00002135}
caryclark@google.com3dd27842013-07-15 15:00:58 +00002136
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002137static void loopEdge1(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002138 SkPath path;
2139 path.setFillType(SkPath::kEvenOdd_FillType);
2140 path.moveTo(0,0);
2141 path.lineTo(3,0);
2142 path.lineTo(3,2);
2143 path.lineTo(1,2);
2144 path.lineTo(1,1);
2145 path.lineTo(2,1);
2146 path.lineTo(2,3);
2147 path.lineTo(0,3);
2148 path.close();
2149 SkPath pathB;
2150 pathB.setFillType(SkPath::kEvenOdd_FillType);
2151 pathB.moveTo(1,2);
2152 pathB.lineTo(2,2);
2153 pathB.lineTo(2,4);
2154 pathB.lineTo(1,4);
2155 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002156 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002157}
2158
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002159static void loopEdge2(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002160 SkPath path;
2161 path.setFillType(SkPath::kEvenOdd_FillType);
2162 path.moveTo(0,0);
2163 path.lineTo(3,0);
2164 path.lineTo(3,2);
2165 path.lineTo(1,2);
2166 path.lineTo(1,1);
2167 path.lineTo(2,1);
2168 path.lineTo(2,3);
2169 path.lineTo(0,3);
2170 path.close();
2171 SkPath pathB;
2172 pathB.setFillType(SkPath::kEvenOdd_FillType);
2173 pathB.moveTo(1 - 1e-6f,2);
2174 pathB.lineTo(2 - 1e-6f,2);
2175 pathB.lineTo(2 - 1e-6f,4);
2176 pathB.lineTo(1 - 1e-6f,4);
2177 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002178 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002179}
2180
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002181static void cubicOp86i(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002182 SkPath path, pathB;
2183 path.setFillType(SkPath::kWinding_FillType);
2184 path.moveTo(0, 4);
2185 path.cubicTo(3, 4, 6, 2, 5, 2);
2186 path.close();
2187 pathB.setFillType(SkPath::kEvenOdd_FillType);
2188 pathB.moveTo(2, 6);
2189 pathB.cubicTo(2, 5, 4, 0, 4, 3);
2190 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002191 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002192}
2193
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002194static void cubicOp87u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002195 SkPath path, pathB;
2196 path.setFillType(SkPath::kWinding_FillType);
2197 path.moveTo(0,1);
2198 path.cubicTo(0,2, 2,0, 6,4);
2199 path.close();
2200 pathB.setFillType(SkPath::kWinding_FillType);
2201 pathB.moveTo(0,2);
2202 pathB.cubicTo(4,6, 1,0, 2,0);
2203 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002204 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002205}
2206
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002207static void cubicOp88u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002208 SkPath path, pathB;
2209 path.setFillType(SkPath::kWinding_FillType);
2210 path.moveTo(0,1);
2211 path.cubicTo(2,5, 5,0, 6,4);
2212 path.close();
2213 pathB.setFillType(SkPath::kWinding_FillType);
2214 pathB.moveTo(0,5);
2215 pathB.cubicTo(4,6, 1,0, 5,2);
2216 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002217 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002218}
2219
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002220static void cubicOp89u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002221 SkPath path, pathB;
2222 path.setFillType(SkPath::kWinding_FillType);
2223 path.moveTo(0, 3);
2224 path.cubicTo(1, 6, 5, 0, 6, 3);
2225 path.close();
2226 pathB.setFillType(SkPath::kWinding_FillType);
2227 pathB.moveTo(0, 5);
2228 pathB.cubicTo(3, 6, 3, 0, 6, 1);
2229 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002230 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002231}
2232
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002233static void cubicOp90u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002234 SkPath path, pathB;
2235 path.setFillType(SkPath::kEvenOdd_FillType);
2236 path.moveTo(0, 5);
2237 path.cubicTo(1, 2, 5, 2, 4, 1);
2238 path.close();
2239 pathB.setFillType(SkPath::kEvenOdd_FillType);
2240 pathB.moveTo(2, 5);
2241 pathB.cubicTo(1, 4, 5, 0, 2, 1);
2242 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002243 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002244}
2245
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002246static void cubicOp91u(skiatest::Reporter* reporter, const char* filename) {
caryclark@google.com570863f2013-09-16 15:55:01 +00002247 SkPath path, pathB;
2248 path.setFillType(SkPath::kWinding_FillType);
2249 path.moveTo(1, 6);
2250 path.cubicTo(0, 3, 6, 3, 5, 0);
2251 path.close();
2252 pathB.setFillType(SkPath::kWinding_FillType);
2253 pathB.moveTo(3, 6);
2254 pathB.cubicTo(0, 5, 6, 1, 3, 0);
2255 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002256 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
caryclark@google.com570863f2013-09-16 15:55:01 +00002257}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002258
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002259static void skpaaalgarve_org53(skiatest::Reporter* reporter, const char* filename) { // add t cancel
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002260 SkPath path;
2261 path.setFillType(SkPath::kEvenOdd_FillType);
2262 path.moveTo(-1.24344979e-014f, 348);
2263 path.lineTo(258, 348);
2264 path.lineTo(258, 322);
2265 path.quadTo(258, 317.857849f, 255.072006f, 314.928009f);
2266 path.quadTo(252.142136f, 312, 248, 312);
2267 path.lineTo(1.77635684e-015f, 312);
2268 path.lineTo(-1.24344979e-014f, 348);
2269 path.close();
2270 SkPath pathB;
2271 pathB.setFillType(SkPath::kWinding_FillType);
2272 pathB.moveTo(0, 312);
2273 pathB.lineTo(258, 312);
2274 pathB.lineTo(258, 348);
2275 pathB.lineTo(0, 348);
2276 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002277 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002278}
2279
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002280static void skpabcspark_ca103(skiatest::Reporter* reporter, const char* filename) { // add t cancel
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002281 SkPath path;
2282 path.setFillType(SkPath::kEvenOdd_FillType);
2283 path.moveTo(1.99840144e-015f, 494);
2284 path.lineTo(97, 494);
2285 path.quadTo(100.313705f, 494, 102.6576f, 491.657593f);
2286 path.quadTo(105, 489.313721f, 105, 486);
2287 path.lineTo(105, 425);
2288 path.quadTo(105, 421.686279f, 102.6576f, 419.342407f);
2289 path.quadTo(100.313705f, 417, 97, 417);
2290 path.lineTo(2.22044605e-016f, 417);
2291 path.lineTo(1.99840144e-015f, 494);
2292 path.close();
2293 SkPath pathB;
2294 pathB.setFillType(SkPath::kWinding_FillType);
2295 pathB.moveTo(0, 417);
2296 pathB.lineTo(105, 417);
2297 pathB.lineTo(105, 494);
2298 pathB.lineTo(0, 494);
2299 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002300 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002301}
2302
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002303static void skpacesoftech_com47(skiatest::Reporter* reporter, const char* filename) { // partial coincidence
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002304 SkPath path;
2305 path.setFillType(SkPath::kEvenOdd_FillType);
2306 path.moveTo(670.537415f, 285);
2307 path.lineTo(670.387451f, 285);
2308 path.lineTo(596.315186f, 314.850708f);
2309 path.lineTo(626.19696f, 389);
2310 path.lineTo(626.346863f, 389);
2311 path.lineTo(700.419189f, 359.149261f);
2312 path.lineTo(670.537415f, 285);
2313 path.close();
2314 SkPath pathB;
2315 pathB.setFillType(SkPath::kWinding_FillType);
2316 pathB.moveTo(663.318542f, 374.100616f);
2317 pathB.quadTo(647.950989f, 380.293671f, 632.705322f, 373.806305f);
2318 pathB.quadTo(617.459595f, 367.318909f, 611.266541f, 351.951355f);
2319 pathB.quadTo(605.073486f, 336.58374f, 611.560913f, 321.338074f);
2320 pathB.quadTo(618.048279f, 306.092407f, 633.415833f, 299.899353f);
2321 pathB.quadTo(648.783447f, 293.706299f, 664.029114f, 300.193665f);
2322 pathB.quadTo(679.27478f, 306.68103f, 685.467834f, 322.048645f);
2323 pathB.quadTo(691.660889f, 337.416199f, 685.173523f, 352.661896f);
2324 pathB.quadTo(678.686157f, 367.907562f, 663.318542f, 374.100616f);
2325 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002326 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002327}
2328
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002329static void skpact_com43(skiatest::Reporter* reporter, const char* filename) { // bridge op
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002330 SkPath path;
2331 path.setFillType(SkPath::kEvenOdd_FillType);
2332 path.moveTo(1.45716772e-016f, 924.336121f);
2333 path.lineTo(-1.11022302e-016f, 920);
2334 path.lineTo(6, 920);
2335 path.lineTo(6, 926);
2336 path.lineTo(1.66389287f, 926);
2337 path.quadTo(1.18842196f, 925.674561f, 0.756800175f, 925.243225f);
2338 path.quadTo(0.325406998f, 924.811523f, 1.45716772e-016f, 924.336121f);
2339 path.close();
2340 path.moveTo(1, 921);
2341 path.lineTo(5, 921);
2342 path.lineTo(5, 925);
2343 path.cubicTo(2.79086018f, 925, 1, 923.209167f, 1, 921);
2344 path.close();
2345 SkPath pathB;
2346 pathB.setFillType(SkPath::kWinding_FillType);
2347 pathB.moveTo(-1, 920);
2348 pathB.lineTo(0, 920);
2349 pathB.lineTo(3, 927);
2350 pathB.lineTo(-1, 927);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002351 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002352}
2353
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002354static void skpadbox_lt8(skiatest::Reporter* reporter, const char* filename) { // zero span
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002355 SkPath path;
2356 path.setFillType(SkPath::kEvenOdd_FillType);
2357 path.moveTo(320.097229f, 628.573669f);
2358 path.lineTo(610.227173f, 85.7786865f);
2359 path.lineTo(946.652588f, 265.601807f);
2360 path.lineTo(656.522644f, 808.39679f);
2361 path.lineTo(320.097229f, 628.573669f);
2362 path.close();
2363 SkPath pathB;
2364 pathB.setFillType(SkPath::kInverseWinding_FillType);
2365 pathB.moveTo(333.866608f, 623.496155f);
2366 pathB.lineTo(613.368042f, 100.585754f);
2367 pathB.cubicTo(613.685303f, 99.9921265f, 614.423767f, 99.7681885f, 615.017395f, 100.085449f);
2368 pathB.lineTo(932.633057f, 269.854553f);
2369 pathB.cubicTo(933.226685f, 270.171875f, 933.450623f, 270.910278f, 933.133301f, 271.503906f);
2370 pathB.lineTo(653.631897f, 794.414307f);
2371 pathB.cubicTo(653.314636f, 795.007935f, 652.576172f, 795.231934f, 651.982544f, 794.914612f);
2372 pathB.lineTo(334.366943f, 625.145508f);
2373 pathB.cubicTo(333.773315f, 624.828247f, 333.549286f, 624.089783f, 333.866608f, 623.496155f);
2374 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002375 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002376}
2377
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002378static void skpadindex_de4(skiatest::Reporter* reporter, const char* filename) { // find chase op
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002379 SkPath path;
2380 path.setFillType(SkPath::kEvenOdd_FillType);
2381 path.moveTo(0, 926);
2382 path.lineTo(0, 0);
2383 path.lineTo(1280, 0);
2384 path.lineTo(1280, 926);
2385 path.lineTo(0, 926);
2386 path.close();
2387 SkPath pathB;
2388 pathB.setFillType(SkPath::kWinding_FillType);
2389 pathB.moveTo(0, 312);
2390 pathB.lineTo(8.20486257e-015f, 178);
2391 pathB.lineTo(49, 178);
2392 pathB.lineTo(49, 312);
2393 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002394 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002395}
2396
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002397static void skpadithya_putr4_blogspot_com551(skiatest::Reporter* reporter, const char* filename) { // calc common
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002398 SkPath path;
2399 path.setFillType(SkPath::kEvenOdd_FillType);
2400 path.moveTo(205.605804f, 142.334625f);
2401 path.lineTo(254.665359f, 85.6058044f);
2402 path.lineTo(311.394196f, 134.665359f);
2403 path.lineTo(262.334625f, 191.39418f);
2404 path.lineTo(205.605804f, 142.334625f);
2405 path.close();
2406 SkPath pathB;
2407 pathB.setFillType(SkPath::kWinding_FillType);
2408 pathB.moveTo(283.407959f, 110.462646f);
2409 pathB.cubicTo(298.864319f, 123.829437f, 300.558258f, 147.195221f, 287.191467f, 162.651581f);
2410 pathB.lineTo(286.537354f, 163.407959f);
2411 pathB.cubicTo(273.170563f, 178.864334f, 249.804779f, 180.558258f, 234.348419f, 167.191467f);
2412 pathB.lineTo(233.592026f, 166.537338f);
2413 pathB.cubicTo(218.135666f, 153.170547f, 216.441727f, 129.804779f, 229.808517f, 114.348412f);
2414 pathB.lineTo(230.462646f, 113.592026f);
2415 pathB.cubicTo(243.829437f, 98.1356659f, 267.195221f, 96.4417267f, 282.651581f, 109.808517f);
2416 pathB.lineTo(283.407959f, 110.462646f);
2417 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002418 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002419}
2420
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002421static void skpadspert_de11(skiatest::Reporter* reporter, const char* filename) { // mark and chase winding
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002422 SkPath path;
2423 path.setFillType(SkPath::kEvenOdd_FillType);
2424 path.moveTo(-4.4408921e-016f, 682.5f);
2425 path.lineTo(30.5f, 682.5f);
2426 path.cubicTo(32.709137f, 682.5f, 34.5f, 680.709167f, 34.5f, 678.5f);
2427 path.lineTo(34.5f, 486.5f);
2428 path.cubicTo(34.5f, 484.290863f, 32.709137f, 482.5f, 30.5f, 482.5f);
2429 path.lineTo(0, 482.5f);
2430 path.lineTo(-4.4408921e-016f, 682.5f);
2431 path.close();
2432 SkPath pathB;
2433 pathB.setFillType(SkPath::kWinding_FillType);
2434 pathB.moveTo(0, 482);
2435 pathB.lineTo(35, 482);
2436 pathB.lineTo(35, 683);
2437 pathB.lineTo(0, 683);
2438 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002439 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002440}
2441
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002442static void skpaiaigames_com870(skiatest::Reporter* reporter, const char* filename) { // cubic/cubic intersect
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002443 SkPath path;
2444 path.setFillType(SkPath::kEvenOdd_FillType);
2445 path.moveTo(324.071075f, 845.071045f);
2446 path.cubicTo(324.405151f, 844.737f, 324.715668f, 844.379395f, 325, 844.000977f);
2447 path.lineTo(325, 842.127197f);
2448 path.cubicTo(324.571411f, 842.956238f, 324.017761f, 843.710144f, 323.363953f, 844.363953f);
2449 path.lineTo(324.071075f, 845.071045f);
2450 path.close();
2451 path.moveTo(323.363953f, 714.636047f);
2452 path.lineTo(324.071075f, 713.928955f);
2453 path.cubicTo(324.405151f, 714.263f, 324.715668f, 714.620605f, 325, 714.999023f);
2454 path.lineTo(325, 716.872803f);
2455 path.cubicTo(324.571411f, 716.043762f, 324.017761f, 715.289856f, 323.363953f, 714.636047f);
2456 path.close();
2457 SkPath pathB;
2458 pathB.setFillType(SkPath::kWinding_FillType);
2459 pathB.moveTo(317, 711);
2460 pathB.cubicTo(322.522858f, 711, 327, 715.477173f, 327, 721);
2461 pathB.lineTo(327, 838);
2462 pathB.cubicTo(327, 843.522827f, 322.522858f, 848, 317, 848);
2463 pathB.lineTo(155, 848);
2464 pathB.cubicTo(149.477158f, 848, 145, 843.522827f, 145, 838);
2465 pathB.lineTo(145, 721);
2466 pathB.cubicTo(145, 715.477173f, 149.477158f, 711, 155, 711);
2467 pathB.lineTo(317, 711);
2468 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002469 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002470}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002471
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002472static void cubicOp92i(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002473 SkPath path, pathB;
2474 path.setFillType(SkPath::kWinding_FillType);
2475 path.moveTo(0, 1);
2476 path.cubicTo(2, 6, 4, 1, 5, 4);
2477 path.close();
2478 pathB.setFillType(SkPath::kWinding_FillType);
2479 pathB.moveTo(1, 4);
2480 pathB.cubicTo(4, 5, 1, 0, 6, 2);
2481 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002482 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002483}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002484
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002485static void cubicOp93d(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002486 SkPath path, pathB;
2487 path.setFillType(SkPath::kWinding_FillType);
2488 path.moveTo(0, 1);
2489 path.cubicTo(1, 6, 4, 1, 4, 3);
2490 path.close();
2491 pathB.setFillType(SkPath::kWinding_FillType);
2492 pathB.moveTo(1, 4);
2493 pathB.cubicTo(3, 4, 1, 0, 6, 1);
2494 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002495 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002496}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002497
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002498static void cubicOp94u(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002499 SkPath path, pathB;
2500 path.setFillType(SkPath::kEvenOdd_FillType);
2501 path.moveTo(0, 3);
2502 path.cubicTo(2, 3, 5, 0, 5, 3);
2503 path.close();
2504 pathB.setFillType(SkPath::kEvenOdd_FillType);
2505 pathB.moveTo(0, 5);
2506 pathB.cubicTo(3, 5, 3, 0, 3, 2);
2507 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002508 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002509}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002510
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002511static void skpadbox_lt15(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002512 SkPath path;
2513 path.setFillType(SkPath::kEvenOdd_FillType);
2514 path.moveTo(333.292084f, 624.570984f);
2515 path.lineTo(614.229797f, 98.9735107f);
2516 path.lineTo(933.457764f, 269.604431f);
2517 path.lineTo(652.52002f, 795.201904f);
2518 path.lineTo(333.292084f, 624.570984f);
2519 path.close();
2520 SkPath pathB;
2521 pathB.setFillType(SkPath::kWinding_FillType);
2522 pathB.moveTo(613.368042f, 100.585754f);
2523 pathB.cubicTo(613.685303f, 99.9921265f, 614.423767f, 99.7681885f, 615.017395f, 100.085449f);
2524 pathB.lineTo(932.633057f, 269.854553f);
2525 pathB.cubicTo(933.226685f, 270.171875f, 933.450623f, 270.910278f, 933.133301f, 271.503906f);
2526 pathB.lineTo(653.631897f, 794.414307f);
2527 pathB.cubicTo(653.314636f, 795.007935f, 652.576172f, 795.231934f, 651.982544f, 794.914612f);
2528 pathB.lineTo(334.366943f, 625.145508f);
2529 pathB.cubicTo(333.773315f, 624.828247f, 333.549286f, 624.089783f, 333.866608f, 623.496155f);
2530 pathB.lineTo(613.368042f, 100.585754f);
2531 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002532 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002533}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002534
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002535static void skpadoption_org196(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002536 SkPath path;
2537 path.setFillType(SkPath::kEvenOdd_FillType);
2538 path.moveTo(802, 367);
2539 path.lineTo(802, 324);
2540 path.lineTo(956, 324);
2541 path.lineTo(956, 371);
2542 path.quadTo(956, 373.071075f, 954.536011f, 374.536011f);
2543 path.quadTo(953.071045f, 376, 951, 376);
2544 path.lineTo(811, 376);
2545 path.cubicTo(806.029419f, 376, 802, 371.970551f, 802, 367);
2546 path.close();
2547 SkPath pathB;
2548 pathB.setFillType(SkPath::kInverseWinding_FillType);
2549 pathB.moveTo(803, 326);
2550 pathB.lineTo(955, 326);
2551 pathB.lineTo(955, 370);
2552 pathB.cubicTo(955, 372.761414f, 952.761414f, 375, 950, 375);
2553 pathB.lineTo(808, 375);
2554 pathB.cubicTo(805.238586f, 375, 803, 372.761414f, 803, 370);
2555 pathB.lineTo(803, 326);
2556 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002557 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002558}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002559
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002560static void skpadspert_net23(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002561 SkPath path;
2562 path.setFillType(SkPath::kEvenOdd_FillType);
2563 path.moveTo(-2.220446e-018f, 483.5f);
2564 path.lineTo(0, 482.5f);
2565 path.lineTo(30.5f, 482.5f);
2566 path.cubicTo(32.709137f, 482.5f, 34.5f, 484.290863f, 34.5f, 486.5f);
2567 path.lineTo(34.5f, 678.5f);
2568 path.cubicTo(34.5f, 680.709167f, 32.709137f, 682.5f, 30.5f, 682.5f);
2569 path.lineTo(-4.4408921e-016f, 682.5f);
2570 path.lineTo(-4.41868766e-016f, 681.5f);
2571 path.lineTo(30.5f, 681.5f);
2572 path.cubicTo(32.1568565f, 681.5f, 33.5f, 680.15686f, 33.5f, 678.5f);
2573 path.lineTo(33.5f, 486.5f);
2574 path.cubicTo(33.5f, 484.84314f, 32.1568565f, 483.5f, 30.5f, 483.5f);
2575 path.lineTo(-2.220446e-018f, 483.5f);
2576 path.close();
2577 SkPath pathB;
2578 pathB.setFillType(SkPath::kWinding_FillType);
2579 pathB.moveTo(0, 482);
2580 pathB.lineTo(35, 482);
2581 pathB.lineTo(35, 683);
2582 pathB.lineTo(0, 683);
2583 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002584 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002585}
2586
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002587static void skpadventistmission_org572(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002588 SkPath path;
2589 path.setFillType(SkPath::kEvenOdd_FillType);
2590 path.moveTo(1182.00037f, 926);
2591 path.cubicTo(1181.08813f, 924.785583f, 1179.63586f, 924, 1178, 924);
2592 path.lineTo(938, 924);
2593 path.cubicTo(936.364197f, 924, 934.911865f, 924.785583f, 933.999634f, 926);
2594 path.lineTo(1182.00037f, 926);
2595 path.close();
2596 SkPath pathB;
2597 pathB.setFillType(SkPath::kWinding_FillType);
2598 pathB.moveTo(934, 924);
2599 pathB.lineTo(1182, 924);
2600 pathB.lineTo(1182, 926);
2601 pathB.lineTo(934, 926);
2602 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002603 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002604}
2605
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002606static void skpagentxsites_com55(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002607 SkPath path;
2608 path.setFillType(SkPath::kEvenOdd_FillType);
2609 path.moveTo(925, 27);
2610 path.cubicTo(924.447693f, 27, 924, 27.4477158f, 924, 28);
2611 path.lineTo(924, 55);
2612 path.cubicTo(924, 55.5522842f, 924.447693f, 56, 925, 56);
2613 path.lineTo(1103, 56);
2614 path.cubicTo(1103.55225f, 56, 1104, 55.5522842f, 1104, 55);
2615 path.lineTo(1104, 28);
2616 path.cubicTo(1104, 27.4477158f, 1103.55225f, 27, 1103, 27);
2617 path.lineTo(925, 27);
2618 path.close();
2619 SkPath pathB;
2620 pathB.setFillType(SkPath::kWinding_FillType);
2621 pathB.moveTo(1103, 27);
2622 pathB.cubicTo(1104.10461f, 27, 1105, 27.8954315f, 1105, 29);
2623 pathB.lineTo(1105, 54);
2624 pathB.cubicTo(1105, 55.1045685f, 1104.10461f, 56, 1103, 56);
2625 pathB.lineTo(926, 56);
2626 pathB.cubicTo(924.895447f, 56, 924, 55.1045685f, 924, 54);
2627 pathB.lineTo(924, 29);
2628 pathB.cubicTo(924, 27.8954315f, 924.895447f, 27, 926, 27);
2629 pathB.lineTo(1103, 27);
2630 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002631 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002632}
2633
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002634static void skpbakosoft_com10(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002635 SkPath path;
2636 path.setFillType(SkPath::kEvenOdd_FillType);
2637 path.moveTo(190, 170);
2638 path.cubicTo(178.9543f, 170, 170, 178.9543f, 170, 190);
2639 path.cubicTo(170, 201.0457f, 178.9543f, 210, 190, 210);
2640 path.lineTo(370, 210);
2641 path.cubicTo(381.045685f, 210, 390, 201.0457f, 390, 190);
2642 path.cubicTo(390, 178.9543f, 381.045685f, 170, 370, 170);
2643 path.lineTo(190, 170);
2644 path.close();
2645 SkPath pathB;
2646 pathB.setFillType(SkPath::kWinding_FillType);
2647 pathB.moveTo(210, 190);
2648 pathB.quadTo(210, 198.284271f, 204.142136f, 204.142136f);
2649 pathB.quadTo(198.284271f, 210, 190, 210);
2650 pathB.quadTo(181.715729f, 210, 175.857864f, 204.142136f);
2651 pathB.quadTo(170, 198.284271f, 170, 190);
2652 pathB.quadTo(170, 181.715729f, 175.857864f, 175.857864f);
2653 pathB.quadTo(181.715729f, 170, 190, 170);
2654 pathB.quadTo(198.284271f, 170, 204.142136f, 175.857864f);
2655 pathB.quadTo(210, 181.715729f, 210, 190);
2656 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002657 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002658}
2659
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002660static void skpbambootheme_com12(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002661 SkPath path;
2662 path.setFillType(SkPath::kEvenOdd_FillType);
2663 path.moveTo(47.8780937f, 58);
2664 path.lineTo(0, 58);
2665 path.lineTo(-8.65973959e-015f, 96.9914017f);
2666 path.quadTo(20.0654926f, 96.6451874f, 34.3553391f, 82.3553391f);
2667 path.quadTo(44.9466133f, 71.764061f, 47.8780937f, 58);
2668 path.close();
2669 SkPath pathB;
2670 pathB.setFillType(SkPath::kEvenOdd_FillType);
2671 pathB.moveTo(-1, -3);
2672 pathB.lineTo(-1, -3);
2673 pathB.cubicTo(26.6142502f, -3, 49, 19.3857498f, 49, 47);
2674 pathB.lineTo(49, 47);
2675 pathB.cubicTo(49, 74.6142502f, 26.6142502f, 97, -1, 97);
2676 pathB.lineTo(-1, 97);
2677 pathB.cubicTo(-28.6142502f, 97, -51, 74.6142502f, -51, 47);
2678 pathB.lineTo(-51, 47);
2679 pathB.cubicTo(-51, 19.3857498f, -28.6142502f, -3, -1, -3);
2680 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002681 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002682}
2683
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002684static void skpakmmos_ru100(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002685 SkPath path;
2686 path.setFillType(SkPath::kEvenOdd_FillType);
2687 path.moveTo(693.000488f, 926);
2688 path.cubicTo(692.164734f, 925.37207f, 691.125793f, 925, 690, 925);
2689 path.lineTo(578, 925);
2690 path.cubicTo(576.874207f, 925, 575.835266f, 925.37207f, 574.999512f, 926);
2691 path.lineTo(693.000488f, 926);
2692 path.close();
2693 SkPath pathB;
2694 pathB.setFillType(SkPath::kWinding_FillType);
2695 pathB.moveTo(575, 925);
2696 pathB.lineTo(693, 925);
2697 pathB.lineTo(693, 926);
2698 pathB.lineTo(575, 926);
2699 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002700 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002701}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002702
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002703static void skpcarpetplanet_ru22(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002704 SkPath path;
2705 path.setFillType(SkPath::kEvenOdd_FillType);
2706 path.moveTo(195, 785);
2707 path.cubicTo(124.307556f, 785, 67, 841.859863f, 67, 912);
2708 path.lineTo(67, 913);
2709 path.cubicTo(67, 917.388916f, 67.2243805f, 921.725769f, 67.662384f, 926);
2710 path.lineTo(322, 926);
2711 path.lineTo(322, 896.048035f);
2712 path.cubicTo(314.09201f, 833.437622f, 260.247131f, 785, 195, 785);
2713 path.close();
2714 SkPath pathB;
2715 pathB.setFillType(SkPath::kWinding_FillType);
2716 pathB.moveTo(195, 785);
2717 pathB.cubicTo(265.140167f, 785, 322, 842.307556f, 322, 913);
2718 pathB.cubicTo(322, 983.692444f, 265.140167f, 1041, 195, 1041);
2719 pathB.lineTo(194, 1041);
2720 pathB.cubicTo(123.85984f, 1041, 67, 983.692444f, 67, 913);
2721 pathB.cubicTo(67, 842.307556f, 123.85984f, 785, 194, 785);
2722 pathB.lineTo(195, 785);
2723 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002724 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002725}
2726
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002727// this fails because cubic/quad misses an intersection (failure is isolated in c/q int test)
2728static void skpcarrot_is24(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002729 SkPath path;
2730 path.setFillType(SkPath::kEvenOdd_FillType);
2731 path.moveTo(945, 597);
2732 path.quadTo(913.93396f, 597, 891.96698f, 618.96698f);
2733 path.quadTo(870, 640.93396f, 870, 672);
2734 path.quadTo(870, 703.06604f, 891.96698f, 725.03302f);
2735 path.quadTo(913.93396f, 747, 945, 747);
2736 path.quadTo(976.06604f, 747, 998.03302f, 725.03302f);
2737 path.quadTo(1020, 703.06604f, 1020, 672);
2738 path.quadTo(1020, 640.93396f, 998.03302f, 618.96698f);
2739 path.quadTo(976.06604f, 597, 945, 597);
2740 path.close();
2741 SkPath pathB;
2742 pathB.setFillType(SkPath::kWinding_FillType);
2743 pathB.moveTo(945.080994f, 597.161987f);
2744 pathB.cubicTo(903.659973f, 597.161987f, 870.080994f, 630.73999f, 870.080994f, 672.161987f);
2745 pathB.cubicTo(870.080994f, 676.096008f, 870.387024f, 679.957031f, 870.971008f, 683.726013f);
2746 pathB.cubicTo(876.53302f, 719.656006f, 907.593994f, 747.161987f, 945.080994f, 747.161987f);
2747 pathB.cubicTo(982.567993f, 747.161987f, 1013.62903f, 719.656006f, 1019.19104f, 683.726013f);
2748 pathB.cubicTo(1019.77502f, 679.955017f, 1020.08099f, 676.094971f, 1020.08099f, 672.161987f);
2749 pathB.cubicTo(1020.08002f, 630.73999f, 986.502014f, 597.161987f, 945.080994f, 597.161987f);
2750 pathB.close();
caryclark65f55312014-11-13 06:58:52 -08002751 testPathOpCheck(reporter, path, pathB, kIntersect_PathOp, filename, FLAGS_runFail);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002752}
2753
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002754static void skpbangalorenest_com4(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002755 SkPath path;
2756 path.setFillType(SkPath::kEvenOdd_FillType);
2757 path.moveTo(0, 926);
2758 path.lineTo(0, 0);
2759 path.lineTo(1265, 0);
2760 path.lineTo(1265, 926);
2761 path.lineTo(0, 926);
2762 path.close();
2763 SkPath pathB;
2764 pathB.setFillType(SkPath::kWinding_FillType);
2765 pathB.moveTo(0, 290);
2766 pathB.lineTo(-2.64514972e-014f, 146);
2767 pathB.lineTo(30, 146);
2768 pathB.lineTo(30, 290);
2769 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002770 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002771}
2772
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002773static void skpbenzoteh_ru152(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002774 SkPath path;
2775 path.setFillType(SkPath::kEvenOdd_FillType);
2776 path.moveTo(883, 23);
2777 path.lineTo(883, 0);
2778 path.lineTo(1122.5f, 0);
2779 path.lineTo(1122.5f, 25.2136822f);
2780 path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2781 path.quadTo(1120.07104f, 28, 1118, 28);
2782 path.lineTo(888, 28);
2783 path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2784 path.quadTo(883, 25.0710678f, 883, 23);
2785 path.close();
2786 SkPath pathB;
2787 pathB.setFillType(SkPath::kWinding_FillType);
2788 pathB.moveTo(883, 0);
2789 pathB.lineTo(1123, 0);
2790 pathB.lineTo(1123, 23);
2791 pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2792 pathB.quadTo(1120.07104f, 28, 1118, 28);
2793 pathB.lineTo(888, 28);
2794 pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2795 pathB.quadTo(883, 25.0710678f, 883, 23);
2796 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002797 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002798}
2799
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002800static void skpbestred_ru37(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002801 SkPath path;
2802 path.setFillType(SkPath::kEvenOdd_FillType);
2803 path.moveTo(883, 23);
2804 path.lineTo(883, 0);
2805 path.lineTo(1122.5f, 0);
2806 path.lineTo(1122.5f, 25.2136822f);
2807 path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2808 path.quadTo(1120.07104f, 28, 1118, 28);
2809 path.lineTo(888, 28);
2810 path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2811 path.quadTo(883, 25.0710678f, 883, 23);
2812 path.close();
2813 SkPath pathB;
2814 pathB.setFillType(SkPath::kWinding_FillType);
2815 pathB.moveTo(883, 0);
2816 pathB.lineTo(1123, 0);
2817 pathB.lineTo(1123, 23);
2818 pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2819 pathB.quadTo(1120.07104f, 28, 1118, 28);
2820 pathB.lineTo(888, 28);
2821 pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2822 pathB.quadTo(883, 25.0710678f, 883, 23);
2823 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002824 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002825}
2826
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002827static void skpbingoentertainment_net189(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002828 SkPath path;
2829 path.setFillType(SkPath::kEvenOdd_FillType);
2830 path.moveTo(896, 745.38678f);
2831 path.lineTo(896, 873.38678f);
2832 path.lineTo(922.567993f, 876.683716f);
2833 path.lineTo(922.567993f, 748.683716f);
2834 path.lineTo(896, 745.38678f);
2835 path.close();
2836 SkPath pathB;
2837 pathB.setFillType(SkPath::kWinding_FillType);
2838 pathB.moveTo(899.200928f, 745.783997f);
2839 pathB.cubicTo(897.119385f, 745.525696f, 895.432007f, 752.031982f, 895.432007f, 760.316284f);
2840 pathB.lineTo(895.432007f, 858.316284f);
2841 pathB.cubicTo(895.432007f, 866.600586f, 897.119385f, 873.525696f, 899.200928f, 873.783997f);
2842 pathB.lineTo(918.799133f, 876.216003f);
2843 pathB.cubicTo(920.880615f, 876.474304f, 922.567993f, 869.968018f, 922.567993f, 861.683716f);
2844 pathB.lineTo(922.567993f, 763.683716f);
2845 pathB.cubicTo(922.567993f, 755.399414f, 920.880615f, 748.474304f, 918.799133f, 748.216003f);
2846 pathB.lineTo(899.200928f, 745.783997f);
2847 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002848 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002849}
2850
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002851static void skpcarrefour_ro62(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002852 SkPath path;
2853 path.setFillType(SkPath::kEvenOdd_FillType);
2854 path.moveTo(1104, 453);
2855 path.lineTo(399, 453);
2856 path.lineTo(399, 657);
2857 path.cubicTo(399, 661.970581f, 403.029449f, 666, 408, 666);
2858 path.lineTo(1095, 666);
2859 path.cubicTo(1099.97058f, 666, 1104, 661.970581f, 1104, 657);
2860 path.lineTo(1104, 453);
2861 path.close();
2862 SkPath pathB;
2863 pathB.setFillType(SkPath::kInverseWinding_FillType);
2864 pathB.moveTo(400, 453);
2865 pathB.lineTo(1103, 453);
2866 pathB.lineTo(1103, 666);
2867 pathB.lineTo(406, 666);
2868 pathB.cubicTo(402.686279f, 666, 400, 663.313721f, 400, 660);
2869 pathB.lineTo(400, 453);
2870 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002871 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002872}
2873
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002874static void skpcaffelavazzait_com_ua21(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002875 SkPath path;
2876 path.setFillType(SkPath::kEvenOdd_FillType);
2877 path.moveTo(883, 23);
2878 path.lineTo(883, 0);
2879 path.lineTo(1122.5f, 0);
2880 path.lineTo(1122.5f, 25.2136822f);
2881 path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2882 path.quadTo(1120.07104f, 28, 1118, 28);
2883 path.lineTo(888, 28);
2884 path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2885 path.quadTo(883, 25.0710678f, 883, 23);
2886 path.close();
2887 SkPath pathB;
2888 pathB.setFillType(SkPath::kWinding_FillType);
2889 pathB.moveTo(883, 0);
2890 pathB.lineTo(1123, 0);
2891 pathB.lineTo(1123, 23);
2892 pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2893 pathB.quadTo(1120.07104f, 28, 1118, 28);
2894 pathB.lineTo(888, 28);
2895 pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2896 pathB.quadTo(883, 25.0710678f, 883, 23);
2897 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002898 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002899}
2900
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002901static void skpcamcorder_kz21(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002902 SkPath path;
2903 path.setFillType(SkPath::kEvenOdd_FillType);
2904 path.moveTo(883, 23);
2905 path.lineTo(883, 0);
2906 path.lineTo(1122.5f, 0);
2907 path.lineTo(1122.5f, 25.2136822f);
2908 path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2909 path.quadTo(1120.07104f, 28, 1118, 28);
2910 path.lineTo(888, 28);
2911 path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2912 path.quadTo(883, 25.0710678f, 883, 23);
2913 path.close();
2914 SkPath pathB;
2915 pathB.setFillType(SkPath::kWinding_FillType);
2916 pathB.moveTo(883, 0);
2917 pathB.lineTo(1123, 0);
2918 pathB.lineTo(1123, 23);
2919 pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2920 pathB.quadTo(1120.07104f, 28, 1118, 28);
2921 pathB.lineTo(888, 28);
2922 pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2923 pathB.quadTo(883, 25.0710678f, 883, 23);
2924 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002925 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002926}
2927
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002928static void skpcavablar_net563(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002929 SkPath path;
2930 path.setFillType(SkPath::kEvenOdd_FillType);
2931 path.moveTo(160.000488f, 918);
2932 path.cubicTo(159.164749f, 917.37207f, 158.125824f, 917, 157, 917);
2933 path.lineTo(94, 917);
2934 path.cubicTo(92.874176f, 917, 91.8352661f, 917.37207f, 90.9995193f, 918);
2935 path.lineTo(160.000488f, 918);
2936 path.close();
2937 SkPath pathB;
2938 pathB.setFillType(SkPath::kWinding_FillType);
2939 pathB.moveTo(91, 917);
2940 pathB.lineTo(160, 917);
2941 pathB.lineTo(160, 918);
2942 pathB.lineTo(91, 918);
2943 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002944 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002945}
2946
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002947static void skpinsomnia_gr72(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002948 SkPath path;
2949 path.setFillType(SkPath::kEvenOdd_FillType);
2950 path.moveTo(1138, 231);
2951 path.lineTo(1137, 243.625748f);
2952 path.lineTo(1137, 926);
2953 path.lineTo(1139, 926);
2954 path.lineTo(1139, 231);
2955 path.lineTo(1138, 231);
2956 path.close();
2957 SkPath pathB;
2958 pathB.setFillType(SkPath::kWinding_FillType);
2959 pathB.moveTo(1139, 231);
2960 pathB.lineTo(1138, 231);
2961 pathB.lineTo(633, 6101);
2962 pathB.lineTo(1139, 6607);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002963 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002964}
2965
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002966static void cubicOp95u(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002967 SkPath path, pathB;
2968 path.setFillType(SkPath::kEvenOdd_FillType);
2969 path.moveTo(0, 2);
2970 path.cubicTo(2, 3, 5, 1, 3, 2);
2971 path.close();
2972 pathB.setFillType(SkPath::kEvenOdd_FillType);
2973 pathB.moveTo(1, 5);
2974 pathB.cubicTo(2, 3, 2, 0, 3, 2);
2975 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002976 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002977}
2978
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002979static void cubicOp96d(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comb0a05892013-10-03 07:01:37 +00002980 SkPath path, pathB;
2981 path.setFillType(SkPath::kEvenOdd_FillType);
2982 path.moveTo(1, 6);
2983 path.cubicTo(0, 3, 6, 3, 5, 0);
2984 path.close();
2985 pathB.setFillType(SkPath::kEvenOdd_FillType);
2986 pathB.moveTo(3, 6);
2987 pathB.cubicTo(0, 5, 6, 1, 3, 0);
2988 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002989 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00002990}
2991
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00002992static void cubicOp97x(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comf54ad6f2013-11-02 07:02:02 +00002993 SkPath path, pathB;
2994 path.setFillType(SkPath::kEvenOdd_FillType);
2995 path.moveTo(0, 2);
2996 path.cubicTo(0, 6, 2, 1, 2, 1);
2997 path.close();
2998 pathB.setFillType(SkPath::kEvenOdd_FillType);
2999 pathB.moveTo(1, 2);
3000 pathB.cubicTo(1, 2, 2, 0, 6, 0);
3001 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003002 testPathOp(reporter, path, pathB, kXOR_PathOp, filename);
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00003003}
3004
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003005static void cubicOp98x(skiatest::Reporter* reporter, const char* filename) {
skia.committer@gmail.comf54ad6f2013-11-02 07:02:02 +00003006 SkPath path, pathB;
3007 path.setFillType(SkPath::kEvenOdd_FillType);
3008 path.moveTo(0, 3);
3009 path.cubicTo(3, 6, 4, 1, 6, 3);
3010 path.close();
3011 pathB.setFillType(SkPath::kEvenOdd_FillType);
3012 pathB.moveTo(1, 4);
3013 pathB.cubicTo(3, 6, 3, 0, 6, 3);
3014 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003015 testPathOp(reporter, path, pathB, kXOR_PathOp, filename);
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00003016}
3017
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003018static void cubicOp99(skiatest::Reporter* reporter, const char* filename) {
commit-bot@chromium.org866f4e32013-11-21 17:04:29 +00003019 SkPath path, pathB;
3020 path.setFillType(SkPath::kWinding_FillType);
3021 path.moveTo(3,6);
3022 path.cubicTo(0,3, 6,5, 5,4);
3023 path.close();
3024 pathB.setFillType(SkPath::kWinding_FillType);
3025 pathB.moveTo(5,6);
3026 pathB.cubicTo(4,5, 6,3, 3,0);
3027 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003028 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
commit-bot@chromium.org866f4e32013-11-21 17:04:29 +00003029}
3030
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003031static void cubicOp100(skiatest::Reporter* reporter, const char* filename) {
commit-bot@chromium.org866f4e32013-11-21 17:04:29 +00003032 SkPath path, pathB;
3033 path.setFillType(SkPath::kWinding_FillType);
3034 path.moveTo(0,1);
3035 path.cubicTo(0,2, 2,1, 4,2);
3036 path.close();
3037 pathB.setFillType(SkPath::kWinding_FillType);
3038 pathB.moveTo(1,2);
3039 pathB.cubicTo(2,4, 1,0, 2,0);
3040 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003041 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
commit-bot@chromium.org866f4e32013-11-21 17:04:29 +00003042}
3043
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003044static void cubicOp101(skiatest::Reporter* reporter, const char* filename) {
commit-bot@chromium.org866f4e32013-11-21 17:04:29 +00003045 SkPath path, pathB;
3046 path.setFillType(SkPath::kWinding_FillType);
3047 path.moveTo(0, 1);
3048 path.cubicTo(2, 3, 2, 1, 5, 3);
3049 path.close();
3050 pathB.setFillType(SkPath::kWinding_FillType);
3051 pathB.moveTo(1, 2);
3052 pathB.cubicTo(3, 5, 1, 0, 3, 2);
3053 pathB.close();
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003054 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
commit-bot@chromium.org866f4e32013-11-21 17:04:29 +00003055}
3056
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003057static void cubicOp102(skiatest::Reporter* reporter, const char* filename) {
3058 SkPath path, pathB;
3059 path.setFillType(SkPath::kWinding_FillType);
3060 path.moveTo(0,1);
3061 path.cubicTo(1,2, 1,0, 3,0);
3062 path.close();
3063 pathB.setFillType(SkPath::kWinding_FillType);
3064 pathB.moveTo(0,1);
3065 pathB.cubicTo(0,3, 1,0, 2,1);
3066 pathB.close();
3067 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
3068}
3069
3070static void cubicOp103(skiatest::Reporter* reporter, const char* filename) {
3071 SkPath path, pathB;
3072 path.setFillType(SkPath::kWinding_FillType);
3073 path.moveTo(0,1);
3074 path.cubicTo(1,5, 2,0, 2,1);
3075 path.close();
3076 pathB.setFillType(SkPath::kWinding_FillType);
3077 pathB.moveTo(0,2);
3078 pathB.cubicTo(1,2, 1,0, 5,1);
3079 pathB.close();
3080 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3081}
3082
3083static void cubicOp104(skiatest::Reporter* reporter, const char* filename) {
3084 SkPath path, pathB;
3085 path.setFillType(SkPath::kWinding_FillType);
3086 path.moveTo(0,1);
3087 path.cubicTo(0,6, 4,0, 6,1);
3088 path.close();
3089 pathB.setFillType(SkPath::kWinding_FillType);
3090 pathB.moveTo(0,4);
3091 pathB.cubicTo(1,6, 1,0, 6,0);
3092 pathB.close();
3093 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3094}
3095
3096static void cubicOp105(skiatest::Reporter* reporter, const char* filename) {
3097 SkPath path, pathB;
3098 path.setFillType(SkPath::kWinding_FillType);
3099 path.moveTo(0,1);
3100 path.cubicTo(0,4, 6,5, 2,0);
3101 path.close();
3102 pathB.setFillType(SkPath::kWinding_FillType);
3103 pathB.moveTo(5,6);
3104 pathB.cubicTo(0,2, 1,0, 4,0);
3105 pathB.close();
3106 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3107}
3108
3109static void cubicOp106(skiatest::Reporter* reporter, const char* filename) {
3110 SkPath path, pathB;
3111 path.setFillType(SkPath::kWinding_FillType);
3112 path.moveTo(0, 1);
3113 path.cubicTo(4, 6, 2, 1, 2, 0);
3114 path.close();
3115 pathB.setFillType(SkPath::kWinding_FillType);
3116 pathB.moveTo(1, 2);
3117 pathB.cubicTo(0, 2, 1, 0, 6, 4);
3118 pathB.close();
3119 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3120}
3121
3122static void cubicOp107(skiatest::Reporter* reporter, const char* filename) {
3123 SkPath path, pathB;
3124 path.setFillType(SkPath::kWinding_FillType);
3125 path.moveTo(0, 1);
3126 path.cubicTo(4, 6, 2, 1, 2, 0);
3127 path.close();
3128 pathB.setFillType(SkPath::kWinding_FillType);
3129 pathB.moveTo(1, 2);
3130 pathB.cubicTo(0, 2, 1, 0, 6, 4);
3131 pathB.close();
3132 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
3133}
3134
3135static void cubicOp108(skiatest::Reporter* reporter, const char* filename) {
3136 SkPath path, pathB;
3137 path.setFillType(SkPath::kWinding_FillType);
3138 path.moveTo(0, 1);
3139 path.cubicTo(4, 6, 2, 1, 2, 0);
3140 path.close();
3141 pathB.setFillType(SkPath::kWinding_FillType);
3142 pathB.moveTo(1, 2);
3143 pathB.cubicTo(0, 2, 1, 0, 6, 4);
3144 pathB.close();
3145 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
3146}
3147
3148static void cubicOp109(skiatest::Reporter* reporter, const char* filename) {
3149 SkPath path, pathB;
3150 path.setFillType(SkPath::kWinding_FillType);
3151 path.moveTo(0,1);
3152 path.cubicTo(4,5, 6,3, 5,4);
3153 path.close();
3154 pathB.setFillType(SkPath::kWinding_FillType);
3155 pathB.moveTo(3,6);
3156 pathB.cubicTo(4,5, 1,0, 5,4);
3157 pathB.close();
3158 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3159}
3160
3161static void cubicOp110(skiatest::Reporter* reporter, const char* filename) {
3162 SkPath path, pathB;
3163 path.setFillType(SkPath::kEvenOdd_FillType);
3164 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
3165 path.addRect(0, 0, 4, 4, SkPath::kCW_Direction);
3166 pathB.setFillType(SkPath::kEvenOdd_FillType);
3167 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3168 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3169 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
3170}
3171
3172static void cubicOp111(skiatest::Reporter* reporter, const char* filename) {
3173 SkPath path, pathB;
3174 path.setFillType(SkPath::kWinding_FillType);
3175 path.moveTo(1,4);
3176 path.cubicTo(0,5, 4,1, 3,1);
3177 path.close();
3178 pathB.setFillType(SkPath::kWinding_FillType);
3179 pathB.moveTo(1,4);
3180 pathB.cubicTo(1,3, 4,1, 5,0);
3181 pathB.close();
3182 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
3183}
3184
3185static void xOp1u(skiatest::Reporter* reporter, const char* filename) {
3186 SkPath path, pathB;
3187 path.setFillType(SkPath::kEvenOdd_FillType);
3188 path.moveTo(1, 4);
3189 path.cubicTo(4, 5, 3, 2, 6, 3);
3190 path.close();
3191 pathB.setFillType(SkPath::kEvenOdd_FillType);
3192 pathB.moveTo(2, 3);
3193 pathB.cubicTo(3, 6, 4, 1, 5, 4);
3194 pathB.close();
3195 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
3196}
3197
3198static void xOp1i(skiatest::Reporter* reporter, const char* filename) {
3199 SkPath path, pathB;
3200 path.setFillType(SkPath::kEvenOdd_FillType);
3201 path.moveTo(1, 4);
3202 path.cubicTo(1, 5, 6, 0, 5, 1);
3203 path.close();
3204 pathB.setFillType(SkPath::kEvenOdd_FillType);
3205 pathB.moveTo(0, 6);
3206 pathB.cubicTo(1, 5, 4, 1, 5, 1);
3207 pathB.close();
3208 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
3209}
3210
3211static void xOp2i(skiatest::Reporter* reporter, const char* filename) {
3212 SkPath path, pathB;
3213 path.setFillType(SkPath::kEvenOdd_FillType);
3214 path.moveTo(1, 5);
3215 path.cubicTo(0, 4, 3, 2, 6, 1);
3216 path.close();
3217 pathB.setFillType(SkPath::kEvenOdd_FillType);
3218 pathB.moveTo(2, 3);
3219 pathB.cubicTo(1, 6, 5, 1, 4, 0);
3220 pathB.close();
3221 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
3222}
3223
3224static void xOp3i(skiatest::Reporter* reporter, const char* filename) {
3225 SkPath path, pathB;
3226 path.setFillType(SkPath::kWinding_FillType);
3227 path.moveTo(1,4);
3228 path.cubicTo(0,5, 4,1, 3,1);
3229 path.close();
3230 pathB.setFillType(SkPath::kWinding_FillType);
3231 pathB.moveTo(1,4);
3232 pathB.cubicTo(1,3, 4,1, 5,0);
3233 pathB.close();
3234 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
3235}
3236
3237static void findFirst1(skiatest::Reporter* reporter, const char* filename) {
3238 SkPath path, pathB;
3239 path.setFillType(SkPath::kWinding_FillType);
3240 path.moveTo(0,1);
3241 path.cubicTo(1,6, 5,0, 2,1);
3242 path.close();
3243 pathB.setFillType(SkPath::kWinding_FillType);
3244 pathB.moveTo(0,5);
3245 pathB.cubicTo(1,2, 1,0, 6,1);
3246 pathB.close();
3247 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3248}
3249
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003250// triggers addSimpleAngle with non-zero argument
3251static void cubicOp112(skiatest::Reporter* reporter, const char* filename) {
3252 SkPath path, pathB;
3253 path.setFillType(SkPath::kWinding_FillType);
3254 path.moveTo(2,4);
3255 path.cubicTo(2,3, 6,4, 1,0);
3256 path.close();
3257 pathB.setFillType(SkPath::kWinding_FillType);
3258 pathB.moveTo(4,6);
3259 pathB.cubicTo(0,1, 4,2, 3,2);
3260 pathB.close();
3261 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3262}
3263
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003264static void cubicOp113(skiatest::Reporter* reporter, const char* filename) {
3265 SkPath path, pathB;
3266 path.moveTo(2,4);
3267 path.cubicTo(3,5, 2.33333325f,4.33333349f, 3.83333325f,3.83333349f);
3268 path.close();
3269 pathB.moveTo(3,5);
3270 pathB.cubicTo(2.33333325f,4.33333349f, 3.83333325f,3.83333349f, 2,4);
3271 pathB.close();
3272 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3273}
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003274
3275static void cubicOp114(skiatest::Reporter* reporter, const char* filename) {
3276 SkPath path, pathB;
3277 path.setFillType(SkPath::kWinding_FillType);
3278 path.moveTo(0, 1);
3279 path.cubicTo(1, 3, -1, 2, 3.5f, 1.33333337f);
3280 path.close();
3281 pathB.setFillType(SkPath::kWinding_FillType);
3282 pathB.moveTo(1, 3);
3283 pathB.cubicTo(-1, 2, 3.5f, 1.33333337f, 0, 1);
3284 pathB.close();
caryclark65f55312014-11-13 06:58:52 -08003285 testPathOpCheck(reporter, path, pathB, kIntersect_PathOp, filename, FLAGS_runFail);
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003286}
caryclarke4097e32014-06-18 07:24:19 -07003287
3288static void cubicOp114asQuad(skiatest::Reporter* reporter, const char* filename) {
3289 SkPath path, pathB;
3290 path.setFillType(SkPath::kWinding_FillType);
3291 path.moveTo(0, 1);
3292 path.cubicTo(1, 3, -1, 2, 3.5f, 1.33333337f);
3293 path.close();
3294 pathB.setFillType(SkPath::kWinding_FillType);
3295 pathB.moveTo(1, 3);
3296 pathB.cubicTo(-1, 2, 3.5f, 1.33333337f, 0, 1);
3297 pathB.close();
3298 SkPath qPath, qPathB;
3299 CubicPathToQuads(path, &qPath);
3300 CubicPathToQuads(pathB, &qPathB);
3301 testPathOp(reporter, qPath, qPathB, kIntersect_PathOp, filename);
3302}
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003303
3304static void quadOp10i(skiatest::Reporter* reporter, const char* filename) {
3305 SkPath path, pathB;
3306 path.moveTo(0, 0);
3307 path.quadTo(1, 8, 3, 5);
3308 path.lineTo(8, 1);
3309 path.close();
3310 pathB.moveTo(0, 0);
3311 pathB.quadTo(8, 1, 4, 8);
3312 pathB.close();
3313 testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
3314}
3315
commit-bot@chromium.org91fc81c2014-04-30 13:37:48 +00003316static void kari1(skiatest::Reporter* reporter, const char* filename) {
3317 SkPath path1;
3318 path1.moveTo(39.9375, -5.8359375);
3319 path1.lineTo(40.625, -5.7890625);
3320 path1.lineTo(37.7109375, 1.3515625);
3321 path1.lineTo(37.203125, 0.9609375);
3322 path1.close();
3323
3324 SkPath path2;
3325 path2.moveTo(37.52734375f, -1.44140625f);
3326 path2.cubicTo(37.8736991882324f, -1.69921875f, 38.1640625f, -2.140625f, 38.3984375f, -2.765625f);
3327 path2.lineTo(38.640625f, -2.609375f);
3328 path2.cubicTo(38.53125f, -1.89583337306976f, 38.0664443969727f, -0.154893040657043f, 38.0664443969727f, -0.154893040657043f);
3329 path2.cubicTo(38.0664443969727f, -0.154893040657043f, 37.1809883117676f, -1.18359375f, 37.52734375, -1.44140625f);
3330 path2.close();
3331
3332 testPathOp(reporter, path1, path2, kDifference_PathOp, filename);
3333}
3334
commit-bot@chromium.org2db7fe72014-05-07 15:31:40 +00003335static void issue2504(skiatest::Reporter* reporter, const char* filename) {
3336 SkPath path1;
3337 path1.moveTo(34.2421875, -5.976562976837158203125);
3338 path1.lineTo(35.453121185302734375, 0);
3339 path1.lineTo(31.9375, 0);
3340 path1.close();
3341
3342 SkPath path2;
3343 path2.moveTo(36.71843719482421875, 0.8886508941650390625);
3344 path2.cubicTo(36.71843719482421875, 0.8886508941650390625,
3345 35.123386383056640625, 0.554015457630157470703125,
3346 34.511409759521484375, -0.1152553558349609375);
3347 path2.cubicTo(33.899425506591796875, -0.7845261096954345703125,
3348 34.53484344482421875, -5.6777553558349609375,
3349 34.53484344482421875, -5.6777553558349609375);
3350 path2.close();
3351 testPathOp(reporter, path1, path2, kUnion_PathOp, filename);
3352}
3353
caryclarkdac1d172014-06-17 05:15:38 -07003354static void issue2540(skiatest::Reporter* reporter, const char* filename) {
3355 SkPath path1;
3356 path1.moveTo(26.5054988861083984375, 85.73960113525390625);
3357 path1.cubicTo(84.19739532470703125, 17.77140045166015625, 16.93920135498046875, 101.86199951171875, 12.631000518798828125, 105.24700164794921875);
3358 path1.cubicTo(11.0819997787475585937500000, 106.46399688720703125, 11.5260000228881835937500000, 104.464996337890625, 11.5260000228881835937500000, 104.464996337890625);
3359 path1.lineTo(23.1654987335205078125, 89.72879791259765625);
3360 path1.cubicTo(23.1654987335205078125, 89.72879791259765625, -10.1713008880615234375, 119.9160003662109375, -17.1620006561279296875, 120.8249969482421875);
3361 path1.cubicTo(-19.1149997711181640625, 121.07900238037109375, -18.0380001068115234375, 119.79299163818359375, -18.0380001068115234375, 119.79299163818359375);
3362 path1.cubicTo(-18.0380001068115234375, 119.79299163818359375, 14.22100067138671875, 90.60700225830078125, 26.5054988861083984375, 85.73960113525390625);
3363 path1.close();
3364
3365 SkPath path2;
3366 path2.moveTo(-25.077999114990234375, 124.9120025634765625);
3367 path2.cubicTo(-25.077999114990234375, 124.9120025634765625, -25.9509983062744140625, 125.95400238037109375, -24.368999481201171875, 125.7480010986328125);
3368 path2.cubicTo(-16.06999969482421875, 124.66899871826171875, 1.2680000066757202148437500, 91.23999786376953125, 37.264003753662109375, 95.35400390625);
3369 path2.cubicTo(37.264003753662109375, 95.35400390625, 11.3710002899169921875, 83.7339935302734375, -25.077999114990234375, 124.9120025634765625);
3370 path2.close();
3371 testPathOp(reporter, path1, path2, kUnion_PathOp, filename);
3372}
caryclarkdac1d172014-06-17 05:15:38 -07003373
3374static void rects1(skiatest::Reporter* reporter, const char* filename) {
3375 SkPath path, pathB;
3376 path.setFillType(SkPath::kEvenOdd_FillType);
3377 path.moveTo(0, 0);
3378 path.lineTo(1, 0);
3379 path.lineTo(1, 1);
3380 path.lineTo(0, 1);
3381 path.close();
3382 path.moveTo(0, 0);
3383 path.lineTo(6, 0);
3384 path.lineTo(6, 6);
3385 path.lineTo(0, 6);
3386 path.close();
3387 pathB.setFillType(SkPath::kEvenOdd_FillType);
3388 pathB.moveTo(0, 0);
3389 pathB.lineTo(1, 0);
3390 pathB.lineTo(1, 1);
3391 pathB.lineTo(0, 1);
3392 pathB.close();
3393 pathB.moveTo(0, 0);
3394 pathB.lineTo(2, 0);
3395 pathB.lineTo(2, 2);
3396 pathB.lineTo(0, 2);
3397 pathB.close();
3398 testPathOp(reporter, path, pathB, kUnion_PathOp, filename);
3399}
3400
3401static void rects2(skiatest::Reporter* reporter, const char* filename) {
3402 SkPath path, pathB;
3403 path.setFillType(SkPath::kEvenOdd_FillType);
3404 path.moveTo(0, 0);
3405 path.lineTo(4, 0);
3406 path.lineTo(4, 4);
3407 path.lineTo(0, 4);
3408 path.close();
3409 path.moveTo(3, 3);
3410 path.lineTo(4, 3);
3411 path.lineTo(4, 4);
3412 path.lineTo(3, 4);
3413 path.close();
3414 pathB.setFillType(SkPath::kWinding_FillType);
3415 pathB.moveTo(3, 3);
3416 pathB.lineTo(6, 3);
3417 pathB.lineTo(6, 6);
3418 pathB.lineTo(3, 6);
3419 pathB.close();
3420 pathB.moveTo(3, 3);
3421 pathB.lineTo(4, 3);
3422 pathB.lineTo(4, 4);
3423 pathB.lineTo(3, 4);
3424 pathB.close();
3425 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3426}
3427
3428static void rects3(skiatest::Reporter* reporter, const char* filename) {
3429 SkPath path, pathB;
3430 path.setFillType(SkPath::kEvenOdd_FillType);
3431 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
3432 path.addRect(0, 0, 4, 4, SkPath::kCW_Direction);
3433 pathB.setFillType(SkPath::kWinding_FillType);
3434 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3435 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3436 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3437}
3438
3439static void rects4(skiatest::Reporter* reporter, const char* filename) {
3440 SkPath path, pathB;
3441 path.setFillType(SkPath::kEvenOdd_FillType);
3442 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
3443 path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3444 pathB.setFillType(SkPath::kWinding_FillType);
3445 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3446 pathB.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
3447 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3448}
3449
caryclark19eb3b22014-07-18 05:08:14 -07003450static void issue2753(skiatest::Reporter* reporter, const char* filename) {
3451 SkPath path1;
3452 path1.moveTo(142.701f, 110.568f);
3453 path1.lineTo(142.957f, 100);
3454 path1.lineTo(153.835f, 100);
3455 path1.lineTo(154.592f, 108.188f);
3456 path1.cubicTo(154.592f, 108.188f, 153.173f, 108.483f, 152.83f, 109.412f);
3457 path1.cubicTo(152.83f, 109.412f, 142.701f, 110.568f, 142.701f, 110.568f);
3458 path1.close();
3459
3460 SkPath path2;
3461 path2.moveTo(39, 124.001f);
3462 path2.cubicTo(39, 124.001f, 50.6f, 117.001f, 50.6f, 117.001f);
3463 path2.cubicTo(50.6f, 117.001f, 164.601f, 85.2f, 188.201f, 117.601f);
3464 path2.cubicTo(188.201f, 117.601f, 174.801f, 93, 39, 124.001f);
3465 path2.close();
3466
caryclark65f55312014-11-13 06:58:52 -08003467 testPathOpCheck(reporter, path1, path2, kUnion_PathOp, filename, FLAGS_runFail);
caryclark19eb3b22014-07-18 05:08:14 -07003468}
caryclark19eb3b22014-07-18 05:08:14 -07003469
caryclark80a83ad2014-08-12 05:49:37 -07003470static void issue2808(skiatest::Reporter* reporter, const char* filename) {
3471 SkPath path1, path2;
3472
3473 path1.moveTo(509.20300293f, 385.601989746f);
3474 path1.quadTo(509.20300293f, 415.68838501f, 487.928710938f, 436.96270752f);
3475 path1.quadTo(466.654388428f, 458.236999512f, 436.567993164f, 458.236999512f);
3476 path1.quadTo(406.4815979f, 458.236999512f, 385.207275391f, 436.96270752f);
3477 path1.quadTo(363.932983398f, 415.68838501f, 363.932983398f, 385.601989746f);
3478 path1.quadTo(363.932983398f, 355.515594482f, 385.207275391f, 334.241271973f);
3479 path1.quadTo(406.4815979f, 312.96697998f, 436.567993164f, 312.96697998f);
3480 path1.quadTo(466.654388428f, 312.96697998f, 487.928710938f, 334.241271973f);
3481 path1.quadTo(509.20300293f, 355.515594482f, 509.20300293f, 385.601989746f);
3482 path1.close();
3483
3484 path2.moveTo(449.033996582f, 290.87298584f);
3485 path2.quadTo(449.033996582f, 301.028259277f, 441.853149414f, 308.209106445f);
3486 path2.quadTo(434.672271729f, 315.389984131f, 424.516998291f, 315.389984131f);
3487 path2.quadTo(414.361724854f, 315.389984131f, 407.180847168f, 308.209106445f);
3488 path2.quadTo(400, 301.028259277f, 400, 290.87298584f);
3489 path2.quadTo(400, 280.717712402f, 407.180847168f, 273.536865234f);
3490 path2.quadTo(414.361724854f, 266.355987549f, 424.516998291f, 266.355987549f);
3491 path2.quadTo(434.672271729f, 266.355987549f, 441.853149414f, 273.536865234f);
3492 path2.quadTo(449.033996582f, 280.717712402f, 449.033996582f, 290.87298584f);
3493 path2.close();
3494
3495 testPathOp(reporter, path1, path2, kUnion_PathOp, filename);
3496}
3497
caryclark65f55312014-11-13 06:58:52 -08003498static void cubicOp115(skiatest::Reporter* reporter, const char* filename) {
3499 SkPath path, pathB;
3500 path.setFillType(SkPath::kWinding_FillType);
3501 path.moveTo(0,1);
3502 path.cubicTo(3,4, 2,1, 5,3);
3503 path.close();
3504 pathB.setFillType(SkPath::kWinding_FillType);
3505 pathB.moveTo(1,2);
3506 pathB.cubicTo(3,5, 1,0, 4,3);
3507 pathB.close();
3508 SkPath path2(path);
3509 testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
3510}
3511
caryclark630240d2014-09-19 06:33:31 -07003512static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003513static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003514
3515static struct TestDesc tests[] = {
caryclark65f55312014-11-13 06:58:52 -08003516 TEST(cubicOp115),
caryclark65b427c2014-09-18 10:32:57 -07003517 TEST(issue2753), // FIXME: pair of cubics miss intersection
3518 TEST(cubicOp114), // FIXME: curve with inflection is ordered the wrong way
caryclark80a83ad2014-08-12 05:49:37 -07003519 TEST(issue2808),
caryclarke4097e32014-06-18 07:24:19 -07003520 TEST(cubicOp114asQuad),
caryclarkdac1d172014-06-17 05:15:38 -07003521 TEST(rects4),
3522 TEST(rects3),
3523 TEST(rects2),
3524 TEST(rects1),
caryclarkdac1d172014-06-17 05:15:38 -07003525 TEST(issue2540),
commit-bot@chromium.org2db7fe72014-05-07 15:31:40 +00003526 TEST(issue2504),
commit-bot@chromium.org91fc81c2014-04-30 13:37:48 +00003527 TEST(kari1),
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003528 TEST(quadOp10i),
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003529 TEST(cubicOp113),
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003530 // fails because a cubic/quadratic intersection is missed
3531 // the internal quad/quad is far enough away from the real cubic/quad that it is rejected
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00003532 TEST(skpcarrot_is24),
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00003533 TEST(issue1417),
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003534 TEST(cubicOp112),
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003535 TEST(skpadspert_net23),
3536 TEST(skpadspert_de11),
3537 TEST(findFirst1),
3538 TEST(xOp2i),
3539 TEST(xOp3i),
3540 TEST(xOp1u),
3541 TEST(xOp1i),
3542 TEST(cubicOp111),
3543 TEST(cubicOp110),
3544 TEST(cubicOp109),
3545 TEST(cubicOp108),
3546 TEST(cubicOp107),
3547 TEST(cubicOp106),
3548 TEST(cubicOp105),
3549 TEST(cubicOp104),
3550 TEST(cubicOp103),
3551 TEST(cubicOp102),
3552 TEST(cubicOp101),
3553 TEST(cubicOp100),
3554 TEST(cubicOp99),
3555 TEST(issue1435),
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00003556 TEST(cubicOp98x),
3557 TEST(cubicOp97x),
3558 TEST(skpcarpetplanet_ru22), // cubic/cubic intersect detects unwanted coincidence
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00003559 TEST(cubicOp96d),
3560 TEST(cubicOp95u),
3561 TEST(skpadbox_lt15),
3562 TEST(skpagentxsites_com55),
3563 TEST(skpadventistmission_org572),
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00003564 TEST(skpadoption_org196),
3565 TEST(skpbambootheme_com12),
3566 TEST(skpbakosoft_com10),
3567 TEST(skpakmmos_ru100),
3568 TEST(skpbangalorenest_com4),
3569 TEST(skpbingoentertainment_net189),
3570 TEST(skpbestred_ru37),
3571 TEST(skpbenzoteh_ru152),
3572 TEST(skpcamcorder_kz21),
3573 TEST(skpcaffelavazzait_com_ua21),
3574 TEST(skpcarrefour_ro62),
3575 TEST(skpcavablar_net563),
3576 TEST(skpinsomnia_gr72),
3577 TEST(skpadbox_lt8),
3578 TEST(skpact_com43),
3579 TEST(skpacesoftech_com47),
3580 TEST(skpabcspark_ca103),
3581 TEST(cubicOp94u),
3582 TEST(cubicOp93d),
3583 TEST(cubicOp92i),
3584 TEST(skpadithya_putr4_blogspot_com551),
3585 TEST(skpadindex_de4),
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00003586 TEST(skpaiaigames_com870),
3587 TEST(skpaaalgarve_org53),
3588 TEST(skpkkiste_to716),
caryclark@google.com570863f2013-09-16 15:55:01 +00003589 TEST(cubicOp91u),
3590 TEST(cubicOp90u),
3591 TEST(cubicOp89u),
3592 TEST(cubicOp88u),
3593 TEST(cubicOp87u),
3594 TEST(cubicOp86i),
3595 TEST(loopEdge2),
3596 TEST(loopEdge1),
3597 TEST(rectOp3x),
3598 TEST(rectOp2i),
3599 TEST(rectOp1i),
3600 TEST(issue1418b),
caryclark@google.com4fdbb222013-07-23 15:27:41 +00003601 TEST(cubicOp85i),
caryclark@google.com4fdbb222013-07-23 15:27:41 +00003602 TEST(issue1418),
3603 TEST(skpkkiste_to98),
caryclark@google.comfa2aeee2013-07-15 13:29:13 +00003604 TEST(skpahrefs_com29),
3605 TEST(cubicOp85d),
3606 TEST(skpahrefs_com88),
caryclark@google.com07e97fc2013-07-08 17:17:02 +00003607 TEST(skphealth_com76),
3608 TEST(skpancestry_com1),
3609 TEST(skpbyte_com1),
3610 TEST(skpeldorado_com_ua1),
3611 TEST(skp96prezzi1),
caryclark@google.comcffbcc32013-06-04 17:59:42 +00003612 TEST(skpClip2),
caryclark@google.comcffbcc32013-06-04 17:59:42 +00003613 TEST(skpClip1),
3614 TEST(cubicOp84d),
3615 TEST(cubicOp83i),
reed@google.com277c3f82013-05-31 15:17:50 +00003616 TEST(cubicOp82i),
3617 TEST(cubicOp81d),
3618 TEST(cubicOp80i),
3619 TEST(cubicOp79u),
reed@google.com277c3f82013-05-31 15:17:50 +00003620 TEST(cubicOp78u),
3621 TEST(cubicOp77i),
caryclark@google.comcffbcc32013-06-04 17:59:42 +00003622 TEST(cubicOp76u),
reed@google.com277c3f82013-05-31 15:17:50 +00003623 TEST(cubicOp75d),
caryclark@google.comcffbcc32013-06-04 17:59:42 +00003624 TEST(cubicOp74d),
reed@google.com277c3f82013-05-31 15:17:50 +00003625 TEST(cubicOp73d),
3626 TEST(cubicOp72i),
3627 TEST(cubicOp71d),
caryclark@google.coma5e55922013-05-07 18:51:31 +00003628 TEST(skp5),
3629 TEST(skp4),
3630 TEST(skp3),
3631 TEST(skp2),
3632 TEST(skp1),
caryclark@google.com6dc7df62013-04-25 11:51:54 +00003633 TEST(rRect1),
caryclark@google.coma5e55922013-05-07 18:51:31 +00003634 TEST(cubicOp70d),
caryclark@google.com03610322013-04-18 15:58:21 +00003635 TEST(cubicOp69d),
3636 TEST(cubicOp68u),
caryclark@google.comb3f09212013-04-17 15:49:16 +00003637 TEST(cubicOp67u),
3638 TEST(cubicOp66u),
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003639 TEST(rectOp1d),
3640 TEST(cubicOp65d),
3641 TEST(cubicOp64d),
3642 TEST(cubicOp63d),
3643 TEST(cubicOp62d),
3644 TEST(cubicOp61d),
3645 TEST(cubicOp60d),
3646 TEST(cubicOp59d),
3647 TEST(cubicOp58d),
3648 TEST(cubicOp57d),
3649 TEST(cubicOp56d),
3650 TEST(cubicOp55d),
3651 TEST(cubicOp54d),
3652 TEST(cubicOp53d),
3653 TEST(cubicOp52d),
3654 TEST(cubicOp51d),
3655 TEST(cubicOp50d),
3656 TEST(cubicOp49d),
3657 TEST(cubicOp48d),
3658 TEST(cubicOp47d),
3659 TEST(cubicOp46d),
3660 TEST(cubicOp45d),
3661 TEST(cubicOp44d),
3662 TEST(cubicOp43d),
3663 TEST(cubicOp42d),
3664 TEST(cubicOp41i),
3665 TEST(cubicOp40d),
3666 TEST(cubicOp39d),
3667 TEST(cubicOp38d),
3668 TEST(cubicOp37d),
3669 TEST(cubicOp36u),
3670 TEST(cubicOp35d),
3671 TEST(cubicOp34d),
3672 TEST(cubicOp33i),
3673 TEST(cubicOp32d),
3674 TEST(cubicOp31d),
3675 TEST(cubicOp31x),
3676 TEST(cubicOp31u),
3677 TEST(cubicOp30d),
3678 TEST(cubicOp29d),
3679 TEST(cubicOp28u),
3680 TEST(cubicOp27d),
3681 TEST(cubicOp26d),
3682 TEST(cubicOp25i),
3683 TEST(testOp8d),
3684 TEST(testDiff1),
3685 TEST(testIntersect1),
3686 TEST(testUnion1),
3687 TEST(testXor1),
3688 TEST(testDiff2),
3689 TEST(testIntersect2),
3690 TEST(testUnion2),
3691 TEST(testXor2),
3692 TEST(testOp1d),
3693 TEST(testOp2d),
3694 TEST(testOp3d),
3695 TEST(testOp1u),
3696 TEST(testOp4d),
3697 TEST(testOp5d),
3698 TEST(testOp6d),
3699 TEST(testOp7d),
3700 TEST(testOp2u),
3701
3702 TEST(cubicOp24d),
3703 TEST(cubicOp23d),
3704 TEST(cubicOp22d),
3705 TEST(cubicOp21d),
3706 TEST(cubicOp20d),
3707 TEST(cubicOp19i),
3708 TEST(cubicOp18d),
3709 TEST(cubicOp17d),
3710 TEST(cubicOp16d),
3711 TEST(cubicOp15d),
3712 TEST(cubicOp14d),
3713 TEST(cubicOp13d),
3714 TEST(cubicOp12d),
3715 TEST(cubicOp11d),
3716 TEST(cubicOp10d),
3717 TEST(cubicOp1i),
3718 TEST(cubicOp9d),
3719 TEST(quadOp9d),
3720 TEST(lineOp9d),
3721 TEST(cubicOp8d),
3722 TEST(cubicOp7d),
3723 TEST(cubicOp6d),
3724 TEST(cubicOp5d),
3725 TEST(cubicOp3d),
3726 TEST(cubicOp2d),
3727 TEST(cubicOp1d),
3728};
3729
caryclark@google.comad65a3e2013-04-15 19:13:59 +00003730static const size_t testCount = SK_ARRAY_COUNT(tests);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003731
3732static struct TestDesc subTests[] = {
commit-bot@chromium.org8cb1daa2014-04-25 12:59:11 +00003733 TEST(cubicOp58d),
3734 TEST(cubicOp53d),
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003735};
3736
caryclark@google.comad65a3e2013-04-15 19:13:59 +00003737static const size_t subTestCount = SK_ARRAY_COUNT(subTests);
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003738
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003739static void (*firstSubTest)(skiatest::Reporter* , const char* filename) = 0;
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003740
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003741static bool runSubTests = false;
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003742static bool runSubTestsFirst = false;
3743static bool runReverse = false;
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003744
tfarina@chromium.org78e7b4e2014-01-02 21:45:03 +00003745DEF_TEST(PathOpsOp, reporter) {
caryclark@google.com07e97fc2013-07-08 17:17:02 +00003746#if DEBUG_SHOW_TEST_NAME
3747 strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
3748#endif
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003749 if (runSubTests && runSubTestsFirst) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003750 RunTestSet(reporter, subTests, subTestCount, firstSubTest, stopTest, runReverse);
3751 }
3752 RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse);
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003753 if (runSubTests && !runSubTestsFirst) {
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003754 RunTestSet(reporter, subTests, subTestCount, firstSubTest, stopTest, runReverse);
3755 }
caryclark@google.com818b0cc2013-04-08 11:50:46 +00003756}
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003757
3758static void bufferOverflow(skiatest::Reporter* reporter, const char* filename) {
3759 SkPath path;
3760 path.addRect(0,0, 300,170141183460469231731687303715884105728.f);
3761 SkPath pathB;
3762 pathB.addRect(0,0, 300,16);
3763 testPathFailOp(reporter, path, pathB, kUnion_PathOp, filename);
3764}
3765
caryclark361b8b02014-09-08 10:25:38 -07003766// m 100,0 60,170 -160,-110 200,0 -170,11000000000 z
3767static void fuzz433(skiatest::Reporter* reporter, const char* filename) {
3768 SkPath path1, path2;
3769 path1.moveTo(100,0);
3770 path1.lineTo(60,170);
3771 path1.lineTo(-160,-110);
3772 path1.lineTo(200,0);
3773 path1.lineTo(-170,11000000000.0f);
3774 path1.close();
3775
3776 path2.moveTo(100 + 20,0 + 20);
3777 path2.lineTo(60 + 20,170 + 20);
3778 path2.lineTo(-160 + 20,-110 + 20);
3779 path2.lineTo(200 + 20,0 + 20);
3780 path2.lineTo(-170 + 20,11000000000.0f + 20);
3781 path2.close();
3782
3783 testPathFailOp(reporter, path1, path2, kIntersect_PathOp, filename);
3784}
3785
3786static void fuzz433b(skiatest::Reporter* reporter, const char* filename) {
3787 SkPath path1, path2;
3788 path1.setFillType(SkPath::kEvenOdd_FillType);
3789 path1.moveTo(140, 40);
3790 path1.lineTo(200, 210);
3791 path1.lineTo(40, 100);
3792 path1.lineTo(240, 100);
3793 path1.lineTo(70, 1.1e+10f);
3794 path1.lineTo(140, 40);
3795 path1.close();
3796
3797 path1.setFillType(SkPath::kWinding_FillType);
3798 path2.moveTo(190, 60);
3799 path2.lineTo(250, 230);
3800 path2.lineTo(90, 120);
3801 path2.lineTo(290, 120);
3802 path2.lineTo(120, 1.1e+10f);
3803 path2.lineTo(190, 60);
3804 path2.close();
3805
3806 testPathFailOp(reporter, path1, path2, kUnion_PathOp, filename);
3807}
3808
caryclark630240d2014-09-19 06:33:31 -07003809static void fuzz487a(skiatest::Reporter* reporter, const char* filename) {
3810 SkPath path;
3811 path.setFillType((SkPath::FillType) 0);
3812path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
3813path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
3814path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x429a6666), SkBits2Float(0x42f9999a), SkBits2Float(0x4275999a), SkBits2Float(0x42d70001), SkBits2Float(0x42633333));
3815path.lineTo(SkBits2Float(0x42e90001), SkBits2Float(0x41b8cccc));
3816path.cubicTo(SkBits2Float(0x42dc6667), SkBits2Float(0x41ab3332), SkBits2Float(0x42cf3334), SkBits2Float(0x41a3ffff), SkBits2Float(0x42c20001), SkBits2Float(0x41a3ffff));
3817path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
3818path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
3819path.cubicTo(SkBits2Float(0x429c6668), SkBits2Float(0x425d999a), SkBits2Float(0x4279999c), SkBits2Float(0x42886667), SkBits2Float(0x42673335), SkBits2Float(0x42ab0000));
3820path.lineTo(SkBits2Float(0x41c0ccd0), SkBits2Float(0x42990000));
3821path.cubicTo(SkBits2Float(0x41b33336), SkBits2Float(0x42a5999a), SkBits2Float(0x41ac0003), SkBits2Float(0x42b2cccd), SkBits2Float(0x41ac0003), SkBits2Float(0x42c00000));
3822path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
3823path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
3824path.cubicTo(SkBits2Float(0x4261999c), SkBits2Float(0x434d3333), SkBits2Float(0x4364e667), SkBits2Float(0x4346b333), SkBits2Float(0x4364e667), SkBits2Float(0x43400000));
3825path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
3826path.close();
3827
3828 SkPath path1(path);
3829 path.reset();
3830 path.setFillType((SkPath::FillType) 0);
3831path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
3832path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
3833path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x42a20000), SkBits2Float(0x43016667), SkBits2Float(0x4287cccd), SkBits2Float(0x42ea999a), SkBits2Float(0x4273999a));
3834path.lineTo(SkBits2Float(0x4306cccd), SkBits2Float(0x41f5999a));
3835path.cubicTo(SkBits2Float(0x42f76667), SkBits2Float(0x41c26667), SkBits2Float(0x42dd999a), SkBits2Float(0x41a4cccd), SkBits2Float(0x42c23334), SkBits2Float(0x41a4cccd));
3836path.lineTo(SkBits2Float(0x42c23334), SkBits2Float(0x425e0000));
3837path.cubicTo(SkBits2Float(0x42a43334), SkBits2Float(0x425e0000), SkBits2Float(0x428a0001), SkBits2Float(0x427ecccd), SkBits2Float(0x42780002), SkBits2Float(0x4297999a));
3838path.lineTo(SkBits2Float(0x41fccccd), SkBits2Float(0x42693333));
3839path.cubicTo(SkBits2Float(0x41c9999a), SkBits2Float(0x428acccd), SkBits2Float(0x41ac0000), SkBits2Float(0x42a4999a), SkBits2Float(0x41ac0000), SkBits2Float(0x42c00000));
3840path.lineTo(SkBits2Float(0x4261999a), SkBits2Float(0x42c00000));
3841path.cubicTo(SkBits2Float(0x4261999a), SkBits2Float(0x42de0000), SkBits2Float(0x42813333), SkBits2Float(0x42f83333), SkBits2Float(0x42996666), SkBits2Float(0x4303199a));
3842path.cubicTo(SkBits2Float(0x4272cccc), SkBits2Float(0x4303199a), SkBits2Float(0x423d3332), SkBits2Float(0x430de667), SkBits2Float(0x422d9999), SkBits2Float(0x431cb334));
3843path.lineTo(SkBits2Float(0x7086a1dc), SkBits2Float(0x42eecccd));
3844path.lineTo(SkBits2Float(0x41eb3333), SkBits2Float(0xc12ccccd));
3845path.lineTo(SkBits2Float(0x42053333), SkBits2Float(0xc1cccccd));
3846path.lineTo(SkBits2Float(0x42780000), SkBits2Float(0xc18f3334));
3847path.cubicTo(SkBits2Float(0x43206666), SkBits2Float(0x43134ccd), SkBits2Float(0x43213333), SkBits2Float(0x430db333), SkBits2Float(0x43213333), SkBits2Float(0x43080000));
3848path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
3849path.close();
3850
3851 SkPath path2(path);
3852 testPathFailOp(reporter, path1, path2, (SkPathOp) 2, filename);
3853}
3854
3855static void fuzz487b(skiatest::Reporter* reporter, const char* filename) {
3856 SkPath path;
3857 path.setFillType((SkPath::FillType) 0);
3858path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
3859path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
3860path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x429a6666), SkBits2Float(0x42f9999a), SkBits2Float(0x4275999a), SkBits2Float(0x42d70001), SkBits2Float(0x42633333));
3861path.lineTo(SkBits2Float(0x42e90001), SkBits2Float(0x41b8cccc));
3862path.cubicTo(SkBits2Float(0x42dc6667), SkBits2Float(0x41ab3332), SkBits2Float(0x42cf3334), SkBits2Float(0x41a3ffff), SkBits2Float(0x42c20001), SkBits2Float(0x41a3ffff));
3863path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
3864path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
3865path.cubicTo(SkBits2Float(0x429c6668), SkBits2Float(0x425d999a), SkBits2Float(0x4279999c), SkBits2Float(0x42886667), SkBits2Float(0x42673335), SkBits2Float(0x42ab0000));
3866path.lineTo(SkBits2Float(0x41c0ccd0), SkBits2Float(0x42990000));
3867path.cubicTo(SkBits2Float(0x41b33336), SkBits2Float(0x42a5999a), SkBits2Float(0x41ac0003), SkBits2Float(0x42b2cccd), SkBits2Float(0x41ac0003), SkBits2Float(0x42c00000));
3868path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
3869path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
3870path.cubicTo(SkBits2Float(0x4261999c), SkBits2Float(0x434d3333), SkBits2Float(0x4364e667), SkBits2Float(0x4346b333), SkBits2Float(0x4364e667), SkBits2Float(0x43400000));
3871path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
3872path.close();
3873
3874 SkPath path1(path);
3875 path.reset();
3876 path.setFillType((SkPath::FillType) 0);
3877path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
3878path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
3879path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x42a20000), SkBits2Float(0x43016667), SkBits2Float(0x4287cccd), SkBits2Float(0x42ea999a), SkBits2Float(0x4273999a));
3880path.lineTo(SkBits2Float(0x4306cccd), SkBits2Float(0x41f5999a));
3881path.cubicTo(SkBits2Float(0x42f76667), SkBits2Float(0x41c26667), SkBits2Float(0x42dd999a), SkBits2Float(0x41a4cccd), SkBits2Float(0x42c23334), SkBits2Float(0x41a4cccd));
3882path.lineTo(SkBits2Float(0x42c23334), SkBits2Float(0x425e0000));
3883path.cubicTo(SkBits2Float(0x42a43334), SkBits2Float(0x425e0000), SkBits2Float(0x428a0001), SkBits2Float(0x427ecccd), SkBits2Float(0x42780002), SkBits2Float(0x4297999a));
3884path.lineTo(SkBits2Float(0x41fccccd), SkBits2Float(0x42693333));
3885path.cubicTo(SkBits2Float(0x41c9999a), SkBits2Float(0x428acccd), SkBits2Float(0x41ac0000), SkBits2Float(0x42a4999a), SkBits2Float(0x41ac0000), SkBits2Float(0x42c00000));
3886path.lineTo(SkBits2Float(0x4261999a), SkBits2Float(0x42c00000));
3887path.cubicTo(SkBits2Float(0x4261999a), SkBits2Float(0x42de0000), SkBits2Float(0x42813333), SkBits2Float(0x42f83333), SkBits2Float(0x42996666), SkBits2Float(0x4303199a));
3888path.cubicTo(SkBits2Float(0x4272cccc), SkBits2Float(0x4303199a), SkBits2Float(0x423d3332), SkBits2Float(0x430de667), SkBits2Float(0x422d9999), SkBits2Float(0x431cb334));
3889path.lineTo(SkBits2Float(0x7086a1dc), SkBits2Float(0x42eecccd));
3890path.lineTo(SkBits2Float(0x41eb3333), SkBits2Float(0xc12ccccd));
3891path.lineTo(SkBits2Float(0x42053333), SkBits2Float(0xc1cccccd));
3892path.lineTo(SkBits2Float(0x42780000), SkBits2Float(0xc18f3334));
3893path.cubicTo(SkBits2Float(0x43206666), SkBits2Float(0x43134ccd), SkBits2Float(0x43213333), SkBits2Float(0x430db333), SkBits2Float(0x43213333), SkBits2Float(0x43080000));
3894path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
3895path.close();
3896
3897 SkPath path2(path);
3898 testPathFailOp(reporter, path1, path2, (SkPathOp) 2, filename);
3899}
3900
caryclarkc06d9a72014-09-29 06:58:41 -07003901static void fuzz714(skiatest::Reporter* reporter, const char* filename) {
3902 SkPath path;
3903 path.setFillType((SkPath::FillType) 1);
3904path.moveTo(SkBits2Float(0x430c0000), SkBits2Float(0x42200000));
3905path.lineTo(SkBits2Float(0x43480000), SkBits2Float(0x43520000));
3906path.lineTo(SkBits2Float(0x42200000), SkBits2Float(0x42c80000));
3907path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x42c80000));
3908path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x43520000));
3909path.lineTo(SkBits2Float(0x430c0000), SkBits2Float(0x42200000));
3910path.close();
3911
3912 SkPath path1(path);
3913 path.reset();
3914 path.setFillType((SkPath::FillType) 0);
3915path.moveTo(SkBits2Float(0x43200000), SkBits2Float(0x42700000));
3916path.lineTo(SkBits2Float(0x435c0000), SkBits2Float(0x43660000));
3917path.lineTo(SkBits2Float(0x42700000), SkBits2Float(0x42f00000));
3918path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x42f00000));
3919path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x43660000));
3920path.lineTo(SkBits2Float(0x43200000), SkBits2Float(0x42700000));
3921path.close();
3922
3923 SkPath path2(path);
3924 testPathFailOp(reporter, path1, path2, (SkPathOp) 2, filename);
3925}
3926
caryclarkd751ac02014-10-03 05:36:27 -07003927static void fuzz1(skiatest::Reporter* reporter, const char* filename) {
3928 SkPath path;
3929 path.setFillType((SkPath::FillType) 0);
3930path.moveTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
3931path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
3932path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
3933path.quadTo(SkBits2Float(0xffc00000), SkBits2Float(0x7f800000), SkBits2Float(0xffc00000), SkBits2Float(0x7f800000));
3934path.quadTo(SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000));
3935path.quadTo(SkBits2Float(0xff000001), SkBits2Float(0xffc00000), SkBits2Float(0xffc00000), SkBits2Float(0xffc00000));
3936path.quadTo(SkBits2Float(0xffc00000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xff000001));
3937path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xffc00000));
3938path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0xffc00000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
3939path.close();
3940
3941 SkPath path1(path);
3942 path.reset();
3943 path.setFillType((SkPath::FillType) 0);
3944
3945 SkPath path2(path);
3946 testPathFailOp(reporter, path1, path2, (SkPathOp) 2, filename);
3947}
3948
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003949static struct TestDesc failTests[] = {
caryclarkd751ac02014-10-03 05:36:27 -07003950 TEST(fuzz1),
caryclarkc06d9a72014-09-29 06:58:41 -07003951 TEST(fuzz714),
caryclark630240d2014-09-19 06:33:31 -07003952 TEST(fuzz487a),
3953 TEST(fuzz487b),
caryclark361b8b02014-09-08 10:25:38 -07003954 TEST(fuzz433b),
3955 TEST(fuzz433),
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003956 TEST(bufferOverflow),
3957};
3958
3959static const size_t failTestCount = SK_ARRAY_COUNT(failTests);
3960
3961DEF_TEST(PathOpsFailOp, reporter) {
commit-bot@chromium.org4431e772014-04-14 17:08:59 +00003962#if DEBUG_SHOW_TEST_NAME
3963 strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
3964#endif
3965 RunTestSet(reporter, failTests, failTestCount, 0, 0, false);
3966}