1 /*
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"
8 #include "PathOpsTestCommon.h"
9 
10 class PathTest_Private {
11 public:
PathTest_Private(SkPath * path)12     PathTest_Private(SkPath* path)
13         : fPath(path) {}
14 
setPt(int index,SkScalar x,SkScalar y)15     void setPt(int index, SkScalar x, SkScalar y) {
16         fPath->setPt(index, x, y);
17     }
18 
19     SkPath* fPath;
20 };
21 
path_edit(const SkPoint & from,const SkPoint & to,SkPath * path)22 static void path_edit(const SkPoint& from, const SkPoint& to, SkPath* path) {
23     PathTest_Private testPath(path);
24     for (int index = 0; index < path->countPoints(); ++index) {
25         if (SkDPoint::ApproximatelyEqual(path->getPoint(index), from)) {
26             testPath.setPt(index, to.fX, to.fY);
27             return;
28         }
29     }
30 }
31 
cubicOp1d(skiatest::Reporter * reporter,const char * filename)32 static void cubicOp1d(skiatest::Reporter* reporter, const char* filename) {
33     SkPath path, pathB;
34     path.setFillType(SkPath::kWinding_FillType);
35     path.moveTo(0,1);
36     path.cubicTo(0,2, 1,0, 1,0);
37     path.close();
38     pathB.setFillType(SkPath::kWinding_FillType);
39     pathB.moveTo(0,1);
40     pathB.cubicTo(0,1, 1,0, 2,0);
41     pathB.close();
42     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
43 }
44 
cubicOp2d(skiatest::Reporter * reporter,const char * filename)45 static void cubicOp2d(skiatest::Reporter* reporter, const char* filename) {
46     SkPath path, pathB;
47     path.setFillType(SkPath::kWinding_FillType);
48     path.moveTo(0,2);
49     path.cubicTo(0,1, 1,0, 1,0);
50     path.close();
51     pathB.setFillType(SkPath::kWinding_FillType);
52     pathB.moveTo(0,1);
53     pathB.cubicTo(0,1, 2,0, 1,0);
54     pathB.close();
55     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
56 }
57 
cubicOp3d(skiatest::Reporter * reporter,const char * filename)58 static void cubicOp3d(skiatest::Reporter* reporter, const char* filename) {
59     SkPath path, pathB;
60     path.setFillType(SkPath::kWinding_FillType);
61     path.moveTo(0,1);
62     path.cubicTo(2,3, 1,0, 1,0);
63     path.close();
64     pathB.setFillType(SkPath::kWinding_FillType);
65     pathB.moveTo(0,1);
66     pathB.cubicTo(0,1, 1,0, 3,2);
67     pathB.close();
68     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
69 }
70 
cubicOp5d(skiatest::Reporter * reporter,const char * filename)71 static void cubicOp5d(skiatest::Reporter* reporter, const char* filename) {
72     SkPath path, pathB;
73     path.setFillType(SkPath::kWinding_FillType);
74     path.moveTo(0,1);
75     path.cubicTo(0,2, 1,0, 2,0);
76     path.close();
77     pathB.setFillType(SkPath::kWinding_FillType);
78     pathB.moveTo(0,1);
79     pathB.cubicTo(0,2, 1,0, 2,0);
80     pathB.close();
81     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
82 }
83 
cubicOp6d(skiatest::Reporter * reporter,const char * filename)84 static void cubicOp6d(skiatest::Reporter* reporter, const char* filename) {
85     SkPath path, pathB;
86     path.setFillType(SkPath::kWinding_FillType);
87     path.moveTo(0,1);
88     path.cubicTo(0,6, 1,0, 3,0);
89     path.close();
90     pathB.setFillType(SkPath::kWinding_FillType);
91     pathB.moveTo(0,1);
92     pathB.cubicTo(0,3, 1,0, 6,0);
93     pathB.close();
94     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
95 }
96 
cubicOp7d(skiatest::Reporter * reporter,const char * filename)97 static void cubicOp7d(skiatest::Reporter* reporter, const char* filename) {
98     SkPath path, pathB;
99     path.setFillType(SkPath::kWinding_FillType);
100     path.moveTo(0,1);
101     path.cubicTo(3,4, 1,0, 3,0);
102     path.close();
103     pathB.setFillType(SkPath::kWinding_FillType);
104     pathB.moveTo(0,1);
105     pathB.cubicTo(0,3, 1,0, 4,3);
106     pathB.close();
107     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
108 }
109 
cubicOp8d(skiatest::Reporter * reporter,const char * filename)110 static void cubicOp8d(skiatest::Reporter* reporter, const char* filename) {
111     SkPath path, pathB;
112     path.setFillType(SkPath::kWinding_FillType);
113     path.moveTo(0,1);
114     path.cubicTo(0,5, 1,0, 4,0);
115     path.close();
116     pathB.setFillType(SkPath::kWinding_FillType);
117     pathB.moveTo(0,1);
118     pathB.cubicTo(0,4, 1,0, 5,0);
119     pathB.close();
120     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
121 }
122 
cubicOp9d(skiatest::Reporter * reporter,const char * filename)123 static void cubicOp9d(skiatest::Reporter* reporter, const char* filename) {
124     SkPath path, pathB;
125     path.setFillType(SkPath::kWinding_FillType);
126     path.moveTo(0,1);
127     path.cubicTo(1,6, 1,0, 2,1);
128     path.close();
129     pathB.setFillType(SkPath::kWinding_FillType);
130     pathB.moveTo(0,1);
131     pathB.cubicTo(1,2, 1,0, 6,1);
132     pathB.close();
133     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
134 }
135 
quadOp9d(skiatest::Reporter * reporter,const char * filename)136 static void quadOp9d(skiatest::Reporter* reporter, const char* filename) {
137     SkPath path, pathB;
138     path.setFillType(SkPath::kWinding_FillType);
139     path.moveTo(0,1);
140     path.quadTo(1,6, 1.5f,1);
141     path.quadTo(1.5f,0.5f, 2,1);
142     path.close();
143     pathB.setFillType(SkPath::kWinding_FillType);
144     pathB.moveTo(0,1);
145     pathB.quadTo(1,2, 1.4f,1);
146     pathB.quadTo(3,0.4f, 6,1);
147     pathB.close();
148     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
149 }
150 
lineOp9d(skiatest::Reporter * reporter,const char * filename)151 static void lineOp9d(skiatest::Reporter* reporter, const char* filename) {
152     SkPath path, pathB;
153     path.setFillType(SkPath::kWinding_FillType);
154     path.moveTo(0,1);
155     path.lineTo(1,6);
156     path.lineTo(1.5f,1);
157     path.lineTo(1.8f,0.8f);
158     path.lineTo(2,1);
159     path.close();
160     pathB.setFillType(SkPath::kWinding_FillType);
161     pathB.moveTo(0,1);
162     pathB.lineTo(1,2);
163     pathB.lineTo(1.4f,1);
164     pathB.lineTo(3,0.4f);
165     pathB.lineTo(6,1);
166     pathB.close();
167     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
168 }
169 
cubicOp1i(skiatest::Reporter * reporter,const char * filename)170 static void cubicOp1i(skiatest::Reporter* reporter, const char* filename) {
171     SkPath path, pathB;
172     path.setFillType(SkPath::kWinding_FillType);
173     path.moveTo(0,1);
174     path.cubicTo(1,2, 1,0, 2,1);
175     path.close();
176     pathB.setFillType(SkPath::kWinding_FillType);
177     pathB.moveTo(0,1);
178     pathB.cubicTo(1,2, 1,0, 2,1);
179     pathB.close();
180     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
181 }
182 
cubicOp10d(skiatest::Reporter * reporter,const char * filename)183 static void cubicOp10d(skiatest::Reporter* reporter, const char* filename) {
184     SkPath path, pathB;
185     path.setFillType(SkPath::kWinding_FillType);
186     path.moveTo(0,1);
187     path.cubicTo(1,3, 1,0, 4,1);
188     path.close();
189     pathB.setFillType(SkPath::kWinding_FillType);
190     pathB.moveTo(0,1);
191     pathB.cubicTo(1,4, 1,0, 3,1);
192     pathB.close();
193     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
194 }
195 
cubicOp11d(skiatest::Reporter * reporter,const char * filename)196 static void cubicOp11d(skiatest::Reporter* reporter, const char* filename) {
197     SkPath path, pathB;
198     path.setFillType(SkPath::kWinding_FillType);
199     path.moveTo(0,1);
200     path.cubicTo(3,4, 1,0, 5,1);
201     path.close();
202     pathB.setFillType(SkPath::kWinding_FillType);
203     pathB.moveTo(0,1);
204     pathB.cubicTo(1,5, 1,0, 4,3);
205     pathB.close();
206     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
207 }
208 
cubicOp12d(skiatest::Reporter * reporter,const char * filename)209 static void cubicOp12d(skiatest::Reporter* reporter, const char* filename) {
210     SkPath path, pathB;
211     path.setFillType(SkPath::kWinding_FillType);
212     path.moveTo(0,1);
213     path.cubicTo(1,6, 1,0, 1,0);
214     path.close();
215     pathB.setFillType(SkPath::kWinding_FillType);
216     pathB.moveTo(0,1);
217     pathB.cubicTo(0,1, 1,0, 6,1);
218     pathB.close();
219     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
220 }
221 
cubicOp13d(skiatest::Reporter * reporter,const char * filename)222 static void cubicOp13d(skiatest::Reporter* reporter, const char* filename) {
223     SkPath path, pathB;
224     path.setFillType(SkPath::kWinding_FillType);
225     path.moveTo(0,1);
226     path.cubicTo(4,5, 1,0, 5,3);
227     path.close();
228     pathB.setFillType(SkPath::kWinding_FillType);
229     pathB.moveTo(0,1);
230     pathB.cubicTo(3,5, 1,0, 5,4);
231     pathB.close();
232     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
233 }
234 
cubicOp14d(skiatest::Reporter * reporter,const char * filename)235 static void cubicOp14d(skiatest::Reporter* reporter, const char* filename) {
236     SkPath path, pathB;
237     path.setFillType(SkPath::kWinding_FillType);
238     path.moveTo(0,1);
239     path.cubicTo(0,2, 2,0, 2,1);
240     path.close();
241     pathB.setFillType(SkPath::kWinding_FillType);
242     pathB.moveTo(0,2);
243     pathB.cubicTo(1,2, 1,0, 2,0);
244     pathB.close();
245     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
246 }
247 
cubicOp15d(skiatest::Reporter * reporter,const char * filename)248 static void cubicOp15d(skiatest::Reporter* reporter, const char* filename) {
249     SkPath path, pathB;
250     path.setFillType(SkPath::kWinding_FillType);
251     path.moveTo(0,1);
252     path.cubicTo(3,6, 2,0, 2,1);
253     path.close();
254     pathB.setFillType(SkPath::kWinding_FillType);
255     pathB.moveTo(0,2);
256     pathB.cubicTo(1,2, 1,0, 6,3);
257     pathB.close();
258     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
259 }
260 
cubicOp16d(skiatest::Reporter * reporter,const char * filename)261 static void cubicOp16d(skiatest::Reporter* reporter, const char* filename) {
262     SkPath path, pathB;
263     path.setFillType(SkPath::kWinding_FillType);
264     path.moveTo(0,2);
265     path.cubicTo(0,1, 3,0, 1,0);
266     path.close();
267     pathB.setFillType(SkPath::kWinding_FillType);
268     pathB.moveTo(0,3);
269     pathB.cubicTo(0,1, 2,0, 1,0);
270     pathB.close();
271     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
272 }
273 
cubicOp17d(skiatest::Reporter * reporter,const char * filename)274 static void cubicOp17d(skiatest::Reporter* reporter, const char* filename) {
275     SkPath path, pathB;
276     path.setFillType(SkPath::kWinding_FillType);
277     path.moveTo(0,2);
278     path.cubicTo(0,2, 4,0, 2,1);
279     path.close();
280     pathB.setFillType(SkPath::kWinding_FillType);
281     pathB.moveTo(0,4);
282     pathB.cubicTo(1,2, 2,0, 2,0);
283     pathB.close();
284     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
285 }
286 
cubicOp18d(skiatest::Reporter * reporter,const char * filename)287 static void cubicOp18d(skiatest::Reporter* reporter, const char* filename) {
288     SkPath path, pathB;
289     path.setFillType(SkPath::kWinding_FillType);
290     path.moveTo(0,1);
291     path.cubicTo(3,5, 2,0, 2,1);
292     path.close();
293     pathB.setFillType(SkPath::kWinding_FillType);
294     pathB.moveTo(0,2);
295     pathB.cubicTo(1,2, 1,0, 5,3);
296     pathB.close();
297     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
298 }
299 
cubicOp19i(skiatest::Reporter * reporter,const char * filename)300 static void cubicOp19i(skiatest::Reporter* reporter, const char* filename) {
301     SkPath path, pathB;
302     path.setFillType(SkPath::kWinding_FillType);
303     path.moveTo(0,2);
304     path.cubicTo(0,1, 2,1, 6,2);
305     path.close();
306     pathB.setFillType(SkPath::kWinding_FillType);
307     pathB.moveTo(1,2);
308     pathB.cubicTo(2,6, 2,0, 1,0);
309     pathB.close();
310     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
311 }
312 
cubicOp20d(skiatest::Reporter * reporter,const char * filename)313 static void cubicOp20d(skiatest::Reporter* reporter, const char* filename) {
314     SkPath path, pathB;
315     path.setFillType(SkPath::kWinding_FillType);
316     path.moveTo(0,1);
317     path.cubicTo(0,1, 6,0, 2,1);
318     path.close();
319     pathB.setFillType(SkPath::kWinding_FillType);
320     pathB.moveTo(0,6);
321     pathB.cubicTo(1,2, 1,0, 1,0);
322     pathB.close();
323     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
324 }
325 
cubicOp21d(skiatest::Reporter * reporter,const char * filename)326 static void cubicOp21d(skiatest::Reporter* reporter, const char* filename) {
327     SkPath path, pathB;
328     path.setFillType(SkPath::kWinding_FillType);
329     path.moveTo(0,1);
330     path.cubicTo(0,1, 2,1, 6,5);
331     path.close();
332     pathB.setFillType(SkPath::kWinding_FillType);
333     pathB.moveTo(1,2);
334     pathB.cubicTo(5,6, 1,0, 1,0);
335     pathB.close();
336     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
337 }
338 
cubicOp22d(skiatest::Reporter * reporter,const char * filename)339 static void cubicOp22d(skiatest::Reporter* reporter, const char* filename) {
340     SkPath path, pathB;
341     path.setFillType(SkPath::kWinding_FillType);
342     path.moveTo(0,1);
343     path.cubicTo(2,3, 3,0, 2,1);
344     path.close();
345     pathB.setFillType(SkPath::kWinding_FillType);
346     pathB.moveTo(0,3);
347     pathB.cubicTo(1,2, 1,0, 3,2);
348     pathB.close();
349     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
350 }
351 
cubicOp23d(skiatest::Reporter * reporter,const char * filename)352 static void cubicOp23d(skiatest::Reporter* reporter, const char* filename) {
353     SkPath path, pathB;
354     path.setFillType(SkPath::kWinding_FillType);
355     path.moveTo(0,1);
356     path.cubicTo(1,2, 4,0, 2,1);
357     path.close();
358     pathB.setFillType(SkPath::kWinding_FillType);
359     pathB.moveTo(0,4);
360     pathB.cubicTo(1,2, 1,0, 2,1);
361     pathB.close();
362     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
363 }
364 
cubicOp24d(skiatest::Reporter * reporter,const char * filename)365 static void cubicOp24d(skiatest::Reporter* reporter, const char* filename) {
366     SkPath path, pathB;
367     path.setFillType(SkPath::kWinding_FillType);
368     path.moveTo(0,1);
369     path.cubicTo(1,2, 2,0, 3,2);
370     path.close();
371     pathB.setFillType(SkPath::kWinding_FillType);
372     pathB.moveTo(0,2);
373     pathB.cubicTo(2,3, 1,0, 2,1);
374     pathB.close();
375     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
376 }
377 
testIntersect1(skiatest::Reporter * reporter,const char * filename)378 static void testIntersect1(skiatest::Reporter* reporter, const char* filename) {
379     SkPath one, two;
380     one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
381     two.addRect(3, 3, 9, 9, SkPath::kCW_Direction);
382     testPathOp(reporter, one, two, kIntersect_SkPathOp, filename);
383 }
384 
testUnion1(skiatest::Reporter * reporter,const char * filename)385 static void testUnion1(skiatest::Reporter* reporter, const char* filename) {
386     SkPath one, two;
387     one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
388     two.addRect(3, 3, 9, 9, SkPath::kCW_Direction);
389     testPathOp(reporter, one, two, kUnion_SkPathOp, filename);
390 }
391 
testDiff1(skiatest::Reporter * reporter,const char * filename)392 static void testDiff1(skiatest::Reporter* reporter, const char* filename) {
393     SkPath one, two;
394     one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
395     two.addRect(3, 3, 9, 9, SkPath::kCW_Direction);
396     testPathOp(reporter, one, two, kDifference_SkPathOp, filename);
397 }
398 
testXor1(skiatest::Reporter * reporter,const char * filename)399 static void testXor1(skiatest::Reporter* reporter, const char* filename) {
400     SkPath one, two;
401     one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
402     two.addRect(3, 3, 9, 9, SkPath::kCW_Direction);
403     testPathOp(reporter, one, two, kXOR_SkPathOp, filename);
404 }
405 
testIntersect2(skiatest::Reporter * reporter,const char * filename)406 static void testIntersect2(skiatest::Reporter* reporter, const char* filename) {
407     SkPath one, two;
408     one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
409     two.addRect(0, 3, 9, 9, SkPath::kCW_Direction);
410     testPathOp(reporter, one, two, kIntersect_SkPathOp, filename);
411 }
412 
testUnion2(skiatest::Reporter * reporter,const char * filename)413 static void testUnion2(skiatest::Reporter* reporter, const char* filename) {
414     SkPath one, two;
415     one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
416     two.addRect(0, 3, 9, 9, SkPath::kCW_Direction);
417     testPathOp(reporter, one, two, kUnion_SkPathOp, filename);
418 }
419 
testDiff2(skiatest::Reporter * reporter,const char * filename)420 static void testDiff2(skiatest::Reporter* reporter, const char* filename) {
421     SkPath one, two;
422     one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
423     two.addRect(0, 3, 9, 9, SkPath::kCW_Direction);
424     testPathOp(reporter, one, two, kDifference_SkPathOp, filename);
425 }
426 
testXor2(skiatest::Reporter * reporter,const char * filename)427 static void testXor2(skiatest::Reporter* reporter, const char* filename) {
428     SkPath one, two;
429     one.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
430     two.addRect(0, 3, 9, 9, SkPath::kCW_Direction);
431     testPathOp(reporter, one, two, kXOR_SkPathOp, filename);
432 }
433 
testOp1d(skiatest::Reporter * reporter,const char * filename)434 static void testOp1d(skiatest::Reporter* reporter, const char* filename) {
435     SkPath path, pathB;
436     path.setFillType(SkPath::kWinding_FillType);
437     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
438     path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
439     pathB.setFillType(SkPath::kWinding_FillType);
440     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
441     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
442     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
443 }
444 
testOp2d(skiatest::Reporter * reporter,const char * filename)445 static void testOp2d(skiatest::Reporter* reporter, const char* filename) {
446     SkPath path, pathB;
447     path.setFillType(SkPath::kWinding_FillType);
448     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
449     path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
450     pathB.setFillType(SkPath::kEvenOdd_FillType);
451     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
452     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
453     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
454 }
455 
testOp3d(skiatest::Reporter * reporter,const char * filename)456 static void testOp3d(skiatest::Reporter* reporter, const char* filename) {
457     SkPath path, pathB;
458     path.setFillType(SkPath::kWinding_FillType);
459     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
460     path.addRect(1, 1, 2, 2, SkPath::kCW_Direction);
461     pathB.setFillType(SkPath::kWinding_FillType);
462     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
463     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
464     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
465 }
466 
testOp1u(skiatest::Reporter * reporter,const char * filename)467 static void testOp1u(skiatest::Reporter* reporter, const char* filename) {
468     SkPath path, pathB;
469     path.setFillType(SkPath::kWinding_FillType);
470     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
471     path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
472     pathB.setFillType(SkPath::kWinding_FillType);
473     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
474     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
475     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
476 }
477 
testOp4d(skiatest::Reporter * reporter,const char * filename)478 static void testOp4d(skiatest::Reporter* reporter, const char* filename) {
479     SkPath path, pathB;
480     path.setFillType(SkPath::kWinding_FillType);
481     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
482     path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
483     pathB.setFillType(SkPath::kWinding_FillType);
484     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
485     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
486     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
487 }
488 
testOp5d(skiatest::Reporter * reporter,const char * filename)489 static void testOp5d(skiatest::Reporter* reporter, const char* filename) {
490     SkPath path, pathB;
491     path.setFillType(SkPath::kEvenOdd_FillType);
492     path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
493     path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
494     pathB.setFillType(SkPath::kEvenOdd_FillType);
495     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
496     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
497     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
498 }
499 
testOp6d(skiatest::Reporter * reporter,const char * filename)500 static void testOp6d(skiatest::Reporter* reporter, const char* filename) {
501     SkPath path, pathB;
502     path.setFillType(SkPath::kEvenOdd_FillType);
503     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
504     path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
505     pathB.setFillType(SkPath::kWinding_FillType);
506     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
507     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
508     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
509 }
510 
testOp7d(skiatest::Reporter * reporter,const char * filename)511 static void testOp7d(skiatest::Reporter* reporter, const char* filename) {
512     SkPath path, pathB;
513     path.setFillType(SkPath::kEvenOdd_FillType);
514     path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
515     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
516     pathB.setFillType(SkPath::kEvenOdd_FillType);
517     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
518     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
519     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
520 }
521 
testOp2u(skiatest::Reporter * reporter,const char * filename)522 static void testOp2u(skiatest::Reporter* reporter, const char* filename) {
523     SkPath path, pathB;
524     path.setFillType(SkPath::kEvenOdd_FillType);
525     path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
526     path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
527     pathB.setFillType(SkPath::kWinding_FillType);
528     pathB.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
529     pathB.addRect(1, 1, 2, 2, SkPath::kCW_Direction);
530     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
531 }
532 
testOp8d(skiatest::Reporter * reporter,const char * filename)533 static void testOp8d(skiatest::Reporter* reporter, const char* filename) {
534     SkPath path, pathB;
535     path.addRect(0, 0, 640, 480);
536     pathB.moveTo(577330, 1971.72f);
537     pathB.cubicTo(10.7082f, -116.596f, 262.057f, 45.6468f, 294.694f, 1.96237f);
538     pathB.close();
539     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
540 }
cubicOp25i(skiatest::Reporter * reporter,const char * filename)541 static void cubicOp25i(skiatest::Reporter* reporter, const char* filename) {
542     SkPath path, pathB;
543     path.setFillType(SkPath::kWinding_FillType);
544     path.moveTo(0,1);
545     path.cubicTo(2,4, 5,0, 3,2);
546     path.close();
547     pathB.setFillType(SkPath::kWinding_FillType);
548     pathB.moveTo(0,5);
549     pathB.cubicTo(2,3, 1,0, 4,2);
550     pathB.close();
551     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
552 }
553 
cubicOp26d(skiatest::Reporter * reporter,const char * filename)554 static void cubicOp26d(skiatest::Reporter* reporter, const char* filename) {
555     SkPath path, pathB;
556     path.setFillType(SkPath::kWinding_FillType);
557     path.moveTo(0,1);
558     path.cubicTo(3,4, 4,0, 3,2);
559     path.close();
560     pathB.setFillType(SkPath::kWinding_FillType);
561     pathB.moveTo(0,4);
562     pathB.cubicTo(2,3, 1,0, 4,3);
563     pathB.close();
564     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
565 }
566 
cubicOp27d(skiatest::Reporter * reporter,const char * filename)567 static void cubicOp27d(skiatest::Reporter* reporter, const char* filename) {
568     SkPath path, pathB;
569     path.setFillType(SkPath::kWinding_FillType);
570     path.moveTo(0,1);
571     path.cubicTo(3,6, 1,0, 5,2);
572     path.close();
573     pathB.setFillType(SkPath::kWinding_FillType);
574     pathB.moveTo(0,1);
575     pathB.cubicTo(2,5, 1,0, 6,3);
576     pathB.close();
577     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
578 }
579 
cubicOp28u(skiatest::Reporter * reporter,const char * filename)580 static void cubicOp28u(skiatest::Reporter* reporter, const char* filename) {
581     SkPath path, pathB;
582     path.setFillType(SkPath::kWinding_FillType);
583     path.moveTo(0,1);
584     path.cubicTo(1,4, 6,0, 3,2);
585     path.close();
586     pathB.setFillType(SkPath::kWinding_FillType);
587     pathB.moveTo(0,6);
588     pathB.cubicTo(2,3, 1,0, 4,1);
589     pathB.close();
590     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
591 }
592 
cubicOp29d(skiatest::Reporter * reporter,const char * filename)593 static void cubicOp29d(skiatest::Reporter* reporter, const char* filename) {
594     SkPath path, pathB;
595     path.setFillType(SkPath::kWinding_FillType);
596     path.moveTo(0,1);
597     path.cubicTo(2,5, 6,0, 4,2);
598     path.close();
599     pathB.setFillType(SkPath::kWinding_FillType);
600     pathB.moveTo(0,6);
601     pathB.cubicTo(2,4, 1,0, 5,2);
602     pathB.close();
603     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
604 }
605 
cubicOp30d(skiatest::Reporter * reporter,const char * filename)606 static void cubicOp30d(skiatest::Reporter* reporter, const char* filename) {
607     SkPath path, pathB;
608     path.setFillType(SkPath::kWinding_FillType);
609     path.moveTo(0,1);
610     path.cubicTo(2,5, 6,0, 5,3);
611     path.close();
612     pathB.setFillType(SkPath::kWinding_FillType);
613     pathB.moveTo(0,6);
614     pathB.cubicTo(3,5, 1,0, 5,2);
615     pathB.close();
616     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
617 }
618 
cubicOp31d(skiatest::Reporter * reporter,const char * filename)619 static void cubicOp31d(skiatest::Reporter* reporter, const char* filename) {
620     SkPath path, pathB;
621     path.setFillType(SkPath::kWinding_FillType);
622     path.moveTo(0,2);
623     path.cubicTo(0,3, 2,1, 4,0);
624     path.close();
625     pathB.setFillType(SkPath::kWinding_FillType);
626     pathB.moveTo(1,2);
627     pathB.cubicTo(0,4, 2,0, 3,0);
628     pathB.close();
629     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
630 }
631 
cubicOp31u(skiatest::Reporter * reporter,const char * filename)632 static void cubicOp31u(skiatest::Reporter* reporter, const char* filename) {
633     SkPath path, pathB;
634     path.setFillType(SkPath::kWinding_FillType);
635     path.moveTo(0,2);
636     path.cubicTo(0,3, 2,1, 4,0);
637     path.close();
638     pathB.setFillType(SkPath::kWinding_FillType);
639     pathB.moveTo(1,2);
640     pathB.cubicTo(0,4, 2,0, 3,0);
641     pathB.close();
642     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
643 }
644 
cubicOp31x(skiatest::Reporter * reporter,const char * filename)645 static void cubicOp31x(skiatest::Reporter* reporter, const char* filename) {
646     SkPath path, pathB;
647     path.setFillType(SkPath::kWinding_FillType);
648     path.moveTo(0,2);
649     path.cubicTo(0,3, 2,1, 4,0);
650     path.close();
651     pathB.setFillType(SkPath::kWinding_FillType);
652     pathB.moveTo(1,2);
653     pathB.cubicTo(0,4, 2,0, 3,0);
654     pathB.close();
655     testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
656 }
657 
cubicOp32d(skiatest::Reporter * reporter,const char * filename)658 static void cubicOp32d(skiatest::Reporter* reporter, const char* filename) {
659     SkPath path, pathB;
660     path.setFillType(SkPath::kWinding_FillType);
661     path.moveTo(0,1);
662     path.cubicTo(1,2, 6,0, 3,1);
663     path.close();
664     pathB.setFillType(SkPath::kWinding_FillType);
665     pathB.moveTo(0,6);
666     pathB.cubicTo(1,3, 1,0, 2,1);
667     pathB.close();
668     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
669 }
670 
cubicOp33i(skiatest::Reporter * reporter,const char * filename)671 static void cubicOp33i(skiatest::Reporter* reporter, const char* filename) {
672     SkPath path, pathB;
673     path.setFillType(SkPath::kWinding_FillType);
674     path.moveTo(0,1);
675     path.cubicTo(1,2, 6,0, 3,1);
676     path.close();
677     pathB.setFillType(SkPath::kWinding_FillType);
678     pathB.moveTo(0,6);
679     pathB.cubicTo(1,3, 1,0, 2,1);
680     pathB.close();
681     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
682 }
683 
cubicOp34d(skiatest::Reporter * reporter,const char * filename)684 static void cubicOp34d(skiatest::Reporter* reporter, const char* filename) {
685     SkPath path, pathB;
686     path.setFillType(SkPath::kWinding_FillType);
687     path.moveTo(0,1);
688     path.cubicTo(3,5, 2,1, 3,1);
689     path.close();
690     pathB.setFillType(SkPath::kWinding_FillType);
691     pathB.moveTo(1,2);
692     pathB.cubicTo(1,3, 1,0, 5,3);
693     pathB.close();
694     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
695 }
696 
cubicOp35d(skiatest::Reporter * reporter,const char * filename)697 static void cubicOp35d(skiatest::Reporter* reporter, const char* filename) {
698     SkPath path, pathB;
699     path.setFillType(SkPath::kWinding_FillType);
700     path.moveTo(0,1);
701     path.cubicTo(1,5, 2,1, 4,0);
702     path.close();
703     pathB.setFillType(SkPath::kWinding_FillType);
704     pathB.moveTo(1,2);
705     pathB.cubicTo(0,4, 1,0, 5,1);
706     pathB.close();
707     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
708 }
709 
cubicOp36u(skiatest::Reporter * reporter,const char * filename)710 static void cubicOp36u(skiatest::Reporter* reporter, const char* filename) {
711     SkPath path, pathB;
712     path.setFillType(SkPath::kWinding_FillType);
713     path.moveTo(0,1);
714     path.cubicTo(1,6, 2,0, 5,1);
715     path.close();
716     pathB.setFillType(SkPath::kWinding_FillType);
717     pathB.moveTo(0,2);
718     pathB.cubicTo(1,5, 1,0, 6,1);
719     pathB.close();
720     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
721 }
722 
cubicOp37d(skiatest::Reporter * reporter,const char * filename)723 static void cubicOp37d(skiatest::Reporter* reporter, const char* filename) {
724     SkPath path, pathB;
725     path.setFillType(SkPath::kWinding_FillType);
726     path.moveTo(0,1);
727     path.cubicTo(2,6, 6,1, 4,3);
728     path.close();
729     pathB.setFillType(SkPath::kWinding_FillType);
730     pathB.moveTo(1,6);
731     pathB.cubicTo(3,4, 1,0, 6,2);
732     pathB.close();
733     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
734 }
735 
cubicOp38d(skiatest::Reporter * reporter,const char * filename)736 static void cubicOp38d(skiatest::Reporter* reporter, const char* filename) {
737     SkPath path, pathB;
738     path.setFillType(SkPath::kWinding_FillType);
739     path.moveTo(0,1);
740     path.cubicTo(0,6, 3,2, 4,1);
741     path.close();
742     pathB.setFillType(SkPath::kWinding_FillType);
743     pathB.moveTo(2,3);
744     pathB.cubicTo(1,4, 1,0, 6,0);
745     pathB.close();
746     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
747 }
748 
cubicOp39d(skiatest::Reporter * reporter,const char * filename)749 static void cubicOp39d(skiatest::Reporter* reporter, const char* filename) {
750     SkPath path, pathB;
751     path.setFillType(SkPath::kWinding_FillType);
752     path.moveTo(0,1);
753     path.cubicTo(2,3, 5,1, 4,3);
754     path.close();
755     pathB.setFillType(SkPath::kWinding_FillType);
756     pathB.moveTo(1,5);
757     pathB.cubicTo(3,4, 1,0, 3,2);
758     pathB.close();
759     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
760 }
761 
cubicOp40d(skiatest::Reporter * reporter,const char * filename)762 static void cubicOp40d(skiatest::Reporter* reporter, const char* filename) {
763     SkPath path, pathB;
764     path.setFillType(SkPath::kWinding_FillType);
765     path.moveTo(0,1);
766     path.cubicTo(1,5, 3,2, 4,2);
767     path.close();
768     pathB.setFillType(SkPath::kWinding_FillType);
769     pathB.moveTo(2,3);
770     pathB.cubicTo(2,4, 1,0, 5,1);
771     pathB.close();
772     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
773 }
774 
cubicOp41i(skiatest::Reporter * reporter,const char * filename)775 static void cubicOp41i(skiatest::Reporter* reporter, const char* filename) {
776     SkPath path, pathB;
777     path.setFillType(SkPath::kWinding_FillType);
778     path.moveTo(0,1);
779     path.cubicTo(2,6, 4,3, 6,4);
780     path.close();
781     pathB.setFillType(SkPath::kWinding_FillType);
782     pathB.moveTo(3,4);
783     pathB.cubicTo(4,6, 1,0, 6,2);
784     pathB.close();
785     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
786 }
787 
cubicOp42d(skiatest::Reporter * reporter,const char * filename)788 static void cubicOp42d(skiatest::Reporter* reporter, const char* filename) {
789     SkPath path, pathB;
790     path.setFillType(SkPath::kWinding_FillType);
791     path.moveTo(0,1);
792     path.cubicTo(1,2, 6,5, 5,4);
793     path.close();
794     pathB.setFillType(SkPath::kWinding_FillType);
795     pathB.moveTo(5,6);
796     pathB.cubicTo(4,5, 1,0, 2,1);
797     pathB.close();
798     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
799 }
800 
cubicOp43d(skiatest::Reporter * reporter,const char * filename)801 static void cubicOp43d(skiatest::Reporter* reporter, const char* filename) {
802     SkPath path, pathB;
803     path.setFillType(SkPath::kWinding_FillType);
804     path.moveTo(0,2);
805     path.cubicTo(1,2, 4,0, 3,1);
806     path.close();
807     pathB.setFillType(SkPath::kWinding_FillType);
808     pathB.moveTo(0,4);
809     pathB.cubicTo(1,3, 2,0, 2,1);
810     pathB.close();
811     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
812 }
813 
cubicOp44d(skiatest::Reporter * reporter,const char * filename)814 static void cubicOp44d(skiatest::Reporter* reporter, const char* filename) {
815     SkPath path, pathB;
816     path.setFillType(SkPath::kWinding_FillType);
817     path.moveTo(0,2);
818     path.cubicTo(3,6, 4,0, 3,2);
819     path.close();
820     pathB.setFillType(SkPath::kWinding_FillType);
821     pathB.moveTo(0,4);
822     pathB.cubicTo(2,3, 2,0, 6,3);
823     pathB.close();
824     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
825 }
826 
cubicOp45d(skiatest::Reporter * reporter,const char * filename)827 static void cubicOp45d(skiatest::Reporter* reporter, const char* filename) {
828     SkPath path, pathB;
829     path.setFillType(SkPath::kWinding_FillType);
830     path.moveTo(0,2);
831     path.cubicTo(2,4, 4,0, 3,2);
832     path.close();
833     pathB.setFillType(SkPath::kWinding_FillType);
834     pathB.moveTo(0,4);
835     pathB.cubicTo(2,3, 2,0, 4,2);
836     pathB.close();
837     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
838 }
839 
cubicOp46d(skiatest::Reporter * reporter,const char * filename)840 static void cubicOp46d(skiatest::Reporter* reporter, const char* filename) {
841     SkPath path, pathB;
842     path.setFillType(SkPath::kWinding_FillType);
843     path.moveTo(0,2);
844     path.cubicTo(3,5, 5,0, 4,2);
845     path.close();
846     pathB.setFillType(SkPath::kWinding_FillType);
847     pathB.moveTo(0,5);
848     pathB.cubicTo(2,4, 2,0, 5,3);
849     pathB.close();
850     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
851 }
852 
cubicOp47d(skiatest::Reporter * reporter,const char * filename)853 static void cubicOp47d(skiatest::Reporter* reporter, const char* filename) {
854     SkPath path, pathB;
855     path.setFillType(SkPath::kWinding_FillType);
856     path.moveTo(0,1);
857     path.cubicTo(1,6, 6,2, 5,4);
858     path.close();
859     pathB.setFillType(SkPath::kWinding_FillType);
860     pathB.moveTo(2,6);
861     pathB.cubicTo(4,5, 1,0, 6,1);
862     pathB.close();
863     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
864 }
865 
cubicOp48d(skiatest::Reporter * reporter,const char * filename)866 static void cubicOp48d(skiatest::Reporter* reporter, const char* filename) {
867     SkPath path, pathB;
868     path.setFillType(SkPath::kWinding_FillType);
869     path.moveTo(0,2);
870     path.cubicTo(2,3, 5,1, 3,2);
871     path.close();
872     pathB.setFillType(SkPath::kWinding_FillType);
873     pathB.moveTo(1,5);
874     pathB.cubicTo(2,3, 2,0, 3,2);
875     pathB.close();
876     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
877 }
878 
cubicOp49d(skiatest::Reporter * reporter,const char * filename)879 static void cubicOp49d(skiatest::Reporter* reporter, const char* filename) {
880     SkPath path, pathB;
881     path.setFillType(SkPath::kWinding_FillType);
882     path.moveTo(0,2);
883     path.cubicTo(1,5, 3,2, 4,1);
884     path.close();
885     pathB.setFillType(SkPath::kWinding_FillType);
886     pathB.moveTo(2,3);
887     pathB.cubicTo(1,4, 2,0, 5,1);
888     pathB.close();
889     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
890 }
891 
cubicOp50d(skiatest::Reporter * reporter,const char * filename)892 static void cubicOp50d(skiatest::Reporter* reporter, const char* filename) {
893     SkPath path, pathB;
894     path.setFillType(SkPath::kWinding_FillType);
895     path.moveTo(0,3);
896     path.cubicTo(1,6, 5,0, 5,1);
897     path.close();
898     pathB.setFillType(SkPath::kWinding_FillType);
899     pathB.moveTo(0,5);
900     pathB.cubicTo(1,5, 3,0, 6,1);
901     pathB.close();
902     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
903 }
904 
cubicOp51d(skiatest::Reporter * reporter,const char * filename)905 static void cubicOp51d(skiatest::Reporter* reporter, const char* filename) {
906     SkPath path, pathB;
907     path.setFillType(SkPath::kWinding_FillType);
908     path.moveTo(0,3);
909     path.cubicTo(1,2, 4,1, 6,0);
910     path.close();
911     pathB.setFillType(SkPath::kWinding_FillType);
912     pathB.moveTo(1,4);
913     pathB.cubicTo(0,6, 3,0, 2,1);
914     pathB.close();
915     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
916 }
917 
cubicOp52d(skiatest::Reporter * reporter,const char * filename)918 static void cubicOp52d(skiatest::Reporter* reporter, const char* filename) {
919     SkPath path, pathB;
920     path.setFillType(SkPath::kWinding_FillType);
921     path.moveTo(0,2);
922     path.cubicTo(1,2, 5,4, 4,3);
923     path.close();
924     pathB.setFillType(SkPath::kWinding_FillType);
925     pathB.moveTo(4,5);
926     pathB.cubicTo(3,4, 2,0, 2,1);
927     pathB.close();
928     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
929 }
930 
cubicOp53d(skiatest::Reporter * reporter,const char * filename)931 static void cubicOp53d(skiatest::Reporter* reporter, const char* filename) {
932     SkPath path, pathB;
933     path.setFillType(SkPath::kWinding_FillType);
934     path.moveTo(0,3);
935     path.cubicTo(1,2, 5,3, 2,1);
936     path.close();
937     pathB.setFillType(SkPath::kWinding_FillType);
938     pathB.moveTo(3,5);
939     pathB.cubicTo(1,2, 3,0, 2,1);
940     pathB.close();
941     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
942 }
943 
cubicOp54d(skiatest::Reporter * reporter,const char * filename)944 static void cubicOp54d(skiatest::Reporter* reporter, const char* filename) {
945     SkPath path, pathB;
946     path.setFillType(SkPath::kWinding_FillType);
947     path.moveTo(0,4);
948     path.cubicTo(1,3, 5,4, 4,2);
949     path.close();
950     pathB.setFillType(SkPath::kWinding_FillType);
951     pathB.moveTo(4,5);
952     pathB.cubicTo(2,4, 4,0, 3,1);
953     pathB.close();
954     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
955 }
956 
cubicOp55d(skiatest::Reporter * reporter,const char * filename)957 static void cubicOp55d(skiatest::Reporter* reporter, const char* filename) {
958     SkPath path, pathB;
959     path.setFillType(SkPath::kWinding_FillType);
960     path.moveTo(0,5);
961     path.cubicTo(1,3, 3,2, 5,0);
962     path.close();
963     pathB.setFillType(SkPath::kWinding_FillType);
964     pathB.moveTo(2,3);
965     pathB.cubicTo(0,5, 5,0, 3,1);
966     pathB.close();
967     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
968 }
969 
cubicOp56d(skiatest::Reporter * reporter,const char * filename)970 static void cubicOp56d(skiatest::Reporter* reporter, const char* filename) {
971     SkPath path, pathB;
972     path.setFillType(SkPath::kWinding_FillType);
973     path.moveTo(0,1);
974     path.cubicTo(2,6, 5,0, 2,1);
975     path.close();
976     pathB.setFillType(SkPath::kWinding_FillType);
977     pathB.moveTo(0,5);
978     pathB.cubicTo(1,2, 1,0, 6,2);
979     pathB.close();
980     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
981 }
982 
cubicOp57d(skiatest::Reporter * reporter,const char * filename)983 static void cubicOp57d(skiatest::Reporter* reporter, const char* filename) {
984     SkPath path, pathB;
985     path.setFillType(SkPath::kWinding_FillType);
986     path.moveTo(0,5);
987     path.cubicTo(0,5, 5,4, 6,4);
988     path.close();
989     pathB.setFillType(SkPath::kWinding_FillType);
990     pathB.moveTo(4,5);
991     pathB.cubicTo(4,6, 5,0, 5,0);
992     pathB.close();
993     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
994 }
995 
cubicOp58d(skiatest::Reporter * reporter,const char * filename)996 static void cubicOp58d(skiatest::Reporter* reporter, const char* filename) {
997     SkPath path, pathB;
998     path.setFillType(SkPath::kWinding_FillType);
999     path.moveTo(0,5);
1000     path.cubicTo(3,4, 6,5, 5,3);
1001     path.close();
1002     pathB.setFillType(SkPath::kWinding_FillType);
1003     pathB.moveTo(5,6);
1004     pathB.cubicTo(3,5, 5,0, 4,3);
1005     pathB.close();
1006     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1007 }
1008 
cubicOp59d(skiatest::Reporter * reporter,const char * filename)1009 static void cubicOp59d(skiatest::Reporter* reporter, const char* filename) {
1010     SkPath path, pathB;
1011     path.setFillType(SkPath::kWinding_FillType);
1012     path.moveTo(0,1);
1013     path.cubicTo(5,6, 4,0, 4,1);
1014     path.close();
1015     pathB.setFillType(SkPath::kWinding_FillType);
1016     pathB.moveTo(0,4);
1017     pathB.cubicTo(1,4, 1,0, 6,5);
1018     pathB.close();
1019     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1020 }
1021 
cubicOp60d(skiatest::Reporter * reporter,const char * filename)1022 static void cubicOp60d(skiatest::Reporter* reporter, const char* filename) {
1023     SkPath path, pathB;
1024     path.setFillType(SkPath::kWinding_FillType);
1025     path.moveTo(0,2);
1026     path.cubicTo(4,6, 6,0, 5,2);
1027     path.close();
1028     pathB.setFillType(SkPath::kWinding_FillType);
1029     pathB.moveTo(0,6);
1030     pathB.cubicTo(2,5, 2,0, 6,4);
1031     pathB.close();
1032     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1033 }
1034 
cubicOp61d(skiatest::Reporter * reporter,const char * filename)1035 static void cubicOp61d(skiatest::Reporter* reporter, const char* filename) {
1036     SkPath path, pathB;
1037     path.setFillType(SkPath::kWinding_FillType);
1038     path.moveTo(1,2);
1039     path.cubicTo(0,5, 3,2, 6,1);
1040     path.close();
1041     pathB.setFillType(SkPath::kWinding_FillType);
1042     pathB.moveTo(2,3);
1043     pathB.cubicTo(1,6, 2,1, 5,0);
1044     pathB.close();
1045     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1046 }
1047 
cubicOp62d(skiatest::Reporter * reporter,const char * filename)1048 static void cubicOp62d(skiatest::Reporter* reporter, const char* filename) {
1049     SkPath path, pathB;
1050     path.setFillType(SkPath::kWinding_FillType);
1051     path.moveTo(1,3);
1052     path.cubicTo(5,6, 5,3, 5,4);
1053     path.close();
1054     pathB.setFillType(SkPath::kWinding_FillType);
1055     pathB.moveTo(3,5);
1056     pathB.cubicTo(4,5, 3,1, 6,5);
1057     pathB.close();
1058     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1059 }
1060 
cubicOp63d(skiatest::Reporter * reporter,const char * filename)1061 static void cubicOp63d(skiatest::Reporter* reporter, const char* filename) {
1062     SkPath path, pathB;
1063     path.setFillType(SkPath::kWinding_FillType);
1064     path.moveTo(2,3);
1065     path.cubicTo(0,4, 3,2, 5,3);
1066     path.close();
1067     pathB.setFillType(SkPath::kWinding_FillType);
1068     pathB.moveTo(2,3);
1069     pathB.cubicTo(3,5, 3,2, 4,0);
1070     pathB.close();
1071     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1072 }
1073 
cubicOp64d(skiatest::Reporter * reporter,const char * filename)1074 static void cubicOp64d(skiatest::Reporter* reporter, const char* filename) {
1075     SkPath path, pathB;
1076     path.moveTo(0,1);
1077     path.cubicTo(0,1, 1,0, 3,0);
1078     path.lineTo(0,1);
1079     path.close();
1080     pathB.moveTo(0,1);
1081     pathB.cubicTo(0,3, 1,0, 1,0);
1082     pathB.lineTo(0,1);
1083     pathB.close();
1084     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1085 }
1086 
cubicOp65d(skiatest::Reporter * reporter,const char * filename)1087 static void cubicOp65d(skiatest::Reporter* reporter, const char* filename) {
1088     SkPath path, pathB;
1089     path.moveTo(0,1);
1090     path.cubicTo(1,5, 1,0, 1,0);
1091     path.lineTo(0,1);
1092     path.close();
1093     pathB.moveTo(0,1);
1094     pathB.cubicTo(0,1, 1,0, 5,1);
1095     pathB.lineTo(0,1);
1096     pathB.close();
1097     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1098 }
1099 
rectOp1d(skiatest::Reporter * reporter,const char * filename)1100 static void rectOp1d(skiatest::Reporter* reporter, const char* filename) {
1101     SkPath path, pathB;
1102     path.moveTo(0,1);
1103     path.cubicTo(0,1, 1,0, 3,0);
1104     path.lineTo(0,1);
1105     path.close();
1106     pathB.moveTo(0,1);
1107     pathB.cubicTo(0,3, 1,0, 1,0);
1108     pathB.lineTo(0,1);
1109     pathB.close();
1110     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1111 }
1112 
cubicOp66u(skiatest::Reporter * reporter,const char * filename)1113 static void cubicOp66u(skiatest::Reporter* reporter, const char* filename) {
1114     SkPath path, pathB;
1115     path.setFillType(SkPath::kWinding_FillType);
1116     path.moveTo(0,1);
1117     path.cubicTo(2,6, 4,2, 5,3);
1118     path.close();
1119     pathB.setFillType(SkPath::kWinding_FillType);
1120     pathB.moveTo(2,4);
1121     pathB.cubicTo(3,5, 1,0, 6,2);
1122     pathB.close();
1123     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1124 }
1125 
cubicOp67u(skiatest::Reporter * reporter,const char * filename)1126 static void cubicOp67u(skiatest::Reporter* reporter, const char* filename) {
1127     SkPath path, pathB;
1128     path.moveTo(3,5);
1129     path.cubicTo(1,6, 5,0, 3,1);
1130     path.lineTo(3,5);
1131     path.close();
1132     pathB.moveTo(0,5);
1133     pathB.cubicTo(1,3, 5,3, 6,1);
1134     pathB.lineTo(0,5);
1135     pathB.close();
1136     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1137 }
1138 
cubicOp68u(skiatest::Reporter * reporter,const char * filename)1139 static void cubicOp68u(skiatest::Reporter* reporter, const char* filename) {
1140     SkPath path, pathB;
1141     path.moveTo(0,5);
1142     path.cubicTo(4,5, 4,1, 5,0);
1143     path.close();
1144     pathB.moveTo(1,4);
1145     pathB.cubicTo(0,5, 5,0, 5,4);
1146     pathB.close();
1147     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1148 }
1149 
cubicOp69d(skiatest::Reporter * reporter,const char * filename)1150 static void cubicOp69d(skiatest::Reporter* reporter, const char* filename) {
1151     SkPath path, pathB;
1152     path.moveTo(1,3);
1153     path.cubicTo(0,1, 3,1, 2,0);
1154     path.close();
1155     pathB.moveTo(1,3);
1156     pathB.cubicTo(0,2, 3,1, 1,0);
1157     pathB.close();
1158     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1159 }
1160 
1161 SkPathOp ops[] = {
1162     kUnion_SkPathOp,
1163     kXOR_SkPathOp,
1164     kReverseDifference_SkPathOp,
1165     kXOR_SkPathOp,
1166     kReverseDifference_SkPathOp,
1167 };
1168 
rRect1(skiatest::Reporter * reporter,const char * filename)1169 static void rRect1(skiatest::Reporter* reporter, const char* filename) {
1170     SkScalar xA = 0.65f;
1171     SkScalar xB = 10.65f;
1172     SkScalar xC = 20.65f;
1173     SkScalar xD = 30.65f;
1174     SkScalar xE = 40.65f;
1175     SkScalar xF = 50.65f;
1176 
1177     SkScalar yA = 0.65f;
1178     SkScalar yB = 10.65f;
1179     SkScalar yC = 20.65f;
1180     SkScalar yD = 30.65f;
1181     SkScalar yE = 40.65f;
1182     SkScalar yF = 50.65f;
1183     SkPath paths[5];
1184     SkRect rects[5];
1185     rects[0].set(xB, yB, xE, yE);
1186     paths[0].addRoundRect(rects[0], SkIntToScalar(5), SkIntToScalar(5));  // red
1187     rects[1].set(xA, yA, xD, yD);
1188     paths[1].addRoundRect(rects[1], SkIntToScalar(5), SkIntToScalar(5));  // green
1189     rects[2].set(xC, yA, xF, yD);
1190     paths[2].addRoundRect(rects[2], SkIntToScalar(5), SkIntToScalar(5));  // blue
1191     rects[3].set(xA, yC, xD, yF);
1192     paths[3].addRoundRect(rects[3], SkIntToScalar(5), SkIntToScalar(5));  // yellow
1193     rects[4].set(xC, yC, xF, yF);
1194     paths[4].addRoundRect(rects[4], SkIntToScalar(5), SkIntToScalar(5));  // cyan
1195     SkPath path;
1196     path.setFillType(SkPath::kInverseEvenOdd_FillType);
1197     for (int index = 0; index < 5; ++index) {
1198         testPathOp(reporter, path, paths[index], ops[index], filename);
1199         REPORTER_ASSERT(reporter, Op(path, paths[index], ops[index], &path));
1200     }
1201 }
1202 
skp1(skiatest::Reporter * reporter,const char * filename)1203 static void skp1(skiatest::Reporter* reporter, const char* filename) {
1204     SkPath path;
1205     path.setFillType(SkPath::kEvenOdd_FillType);
1206     path.moveTo(189,7);
1207     path.cubicTo(189,5.34314585f, 190.34314f,4, 192,4);
1208     path.lineTo(243,4);
1209     path.cubicTo(244.65686f,4, 246,5.34314585f, 246,7);
1210     path.lineTo(246,21);
1211     path.cubicTo(246,22.6568546f, 244.65686f,24, 243,24);
1212     path.lineTo(192,24);
1213     path.cubicTo(190.34314f,24, 189,22.6568546f, 189,21);
1214     path.lineTo(189,7);
1215     path.close();
1216     path.moveTo(191,8);
1217     path.cubicTo(191,6.89543009f, 191.895432f,6, 193,6);
1218     path.lineTo(242,6);
1219     path.cubicTo(243.104568f,6, 244,6.89543009f, 244,8);
1220     path.lineTo(244,20);
1221     path.cubicTo(244,21.1045704f, 243.104568f,22, 242,22);
1222     path.lineTo(193,22);
1223     path.cubicTo(191.895432f,22, 191,21.1045704f, 191,20);
1224     path.lineTo(191,8);
1225     path.close();
1226     SkPath pathB;
1227     pathB.setFillType(SkPath::kWinding_FillType);
1228     pathB.moveTo(189,4);
1229     pathB.lineTo(199,14);
1230     pathB.lineTo(236,14);
1231     pathB.lineTo(246,4);
1232     pathB.lineTo(189,4);
1233     pathB.close();
1234     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1235 }
1236 
skp2(skiatest::Reporter * reporter,const char * filename)1237 static void skp2(skiatest::Reporter* reporter, const char* filename) {
1238     SkPath path;
1239     path.setFillType(SkPath::kEvenOdd_FillType);
1240     path.moveTo(253.000000f, 11757.0000f);
1241     path.lineTo(253.000000f, 222.000000f);
1242     path.lineTo(823.000000f, 222.000000f);
1243     path.lineTo(823.000000f, 11757.0000f);
1244     path.lineTo(253.000000f, 11757.0000f);
1245     path.close();
1246     SkPath pathB;
1247     pathB.setFillType(SkPath::kWinding_FillType);
1248     pathB.moveTo(258.000000f, 1028.00000f);
1249     pathB.lineTo(258.000000f, 1027.00000f);
1250     pathB.lineTo(823.000000f, 1027.00000f);
1251     pathB.lineTo(823.000000f, 1028.00000f);
1252     pathB.lineTo(258.000000f, 1028.00000f);
1253     pathB.close();
1254     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1255 }
1256 
skp3(skiatest::Reporter * reporter,const char * filename)1257 static void skp3(skiatest::Reporter* reporter, const char* filename) {
1258     SkPath path;
1259     path.setFillType(SkPath::kEvenOdd_FillType);
1260     path.moveTo(717.000000f, 507.000000f);
1261     path.lineTo(717.000000f, 425.000000f);
1262     path.lineTo(973.000000f, 425.000000f);
1263     path.lineTo(973.000000f, 507.000000f);
1264     path.quadTo(973.000000f, 508.242645f, 972.121582f, 509.121613f);
1265     path.quadTo(971.242615f, 510.000000f, 970.000000f, 510.000000f);
1266     path.lineTo(720.000000f, 510.000000f);
1267     path.quadTo(718.757385f, 510.000000f, 717.878418f, 509.121613f);
1268     path.quadTo(717.000000f, 508.242645f, 717.000000f, 507.000000f);
1269     path.close();
1270     path.moveTo(719.000000f, 426.000000f);
1271     path.lineTo(971.000000f, 426.000000f);
1272     path.lineTo(971.000000f, 506.000000f);
1273     path.cubicTo(971.000000f, 507.104584f, 970.104553f, 508.000000f, 969.000000f, 508.000000f);
1274     path.lineTo(721.000000f, 508.000000f);
1275     path.cubicTo(719.895447f, 508.000000f, 719.000000f, 507.104584f, 719.000000f, 506.000000f);
1276     path.lineTo(719.000000f, 426.000000f);
1277     path.close();
1278     SkPath pathB;
1279     pathB.setFillType(SkPath::kWinding_FillType);
1280     pathB.moveTo(717.000000f, 510.000000f);
1281     pathB.lineTo(760.000000f, 467.000000f);
1282     pathB.lineTo(930.000000f, 467.000000f);
1283     pathB.lineTo(973.000000f, 510.000000f);
1284     pathB.lineTo(717.000000f, 510.000000f);
1285     pathB.close();
1286     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1287 }
1288 
skp4(skiatest::Reporter * reporter,const char * filename)1289 static void skp4(skiatest::Reporter* reporter, const char* filename) {
1290     SkPath path;
1291     path.setFillType(SkPath::kEvenOdd_FillType);
1292     path.moveTo(230.756805f, 591.756775f);
1293     path.quadTo(232.514725f, 590.000000f, 235.000000f, 590.000000f);
1294     path.lineTo(300.000000f, 590.000000f);
1295     path.quadTo(302.485291f, 590.000000f, 304.243195f, 591.756775f);
1296     path.quadTo(306.000000f, 593.514709f, 306.000000f, 596.000000f);
1297     path.lineTo(306.000000f, 617.000000f);
1298     path.lineTo(229.000000f, 617.000000f);
1299     path.lineTo(229.000000f, 596.000000f);
1300     path.quadTo(229.000000f, 593.514709f, 230.756805f, 591.756775f);
1301     path.close();
1302     path.moveTo(231.000000f, 597.000000f);
1303     path.cubicTo(231.000000f, 594.238586f, 233.238571f, 592.000000f, 236.000000f, 592.000000f);
1304     path.lineTo(299.000000f, 592.000000f);
1305     path.cubicTo(301.761414f, 592.000000f, 304.000000f, 594.238586f, 304.000000f, 597.000000f);
1306     path.lineTo(304.000000f, 616.000000f);
1307     path.lineTo(231.000000f, 616.000000f);
1308     path.lineTo(231.000000f, 597.000000f);
1309     path.close();
1310     SkPath pathB;
1311     pathB.setFillType(SkPath::kWinding_FillType);
1312     pathB.moveTo(306.000000f, 590.000000f);
1313     pathB.lineTo(292.000000f, 604.000000f);
1314     pathB.lineTo(305.000000f, 617.000000f);
1315     pathB.lineTo(306.000000f, 617.000000f);
1316     pathB.lineTo(306.000000f, 590.000000f);
1317     pathB.close();
1318     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1319 }
1320 
skp5(skiatest::Reporter * reporter,const char * filename)1321 static void skp5(skiatest::Reporter* reporter, const char* filename) {
1322     SkPath path;
1323     path.setFillType(SkPath::kEvenOdd_FillType);
1324     path.moveTo(18.0000000f, 226.000000f);
1325     path.quadTo(14.6862917f, 226.000000f, 12.3423996f, 228.342407f);
1326     path.quadTo(10.0000000f, 230.686295f, 10.0000000f, 234.000000f);
1327     path.lineTo(10.0000000f, 253.000000f);
1328     path.lineTo(1247.00000f, 253.000000f);
1329     path.lineTo(1247.00000f, 234.000000f);
1330     path.quadTo(1247.00000f, 230.686295f, 1244.65759f, 228.342407f);
1331     path.quadTo(1242.31372f, 226.000000f, 1239.00000f, 226.000000f);
1332     path.lineTo(18.0000000f, 226.000000f);
1333     path.close();
1334     SkPath pathB;
1335     pathB.setFillType(SkPath::kInverseWinding_FillType);
1336     pathB.moveTo(18.0000000f, 226.000000f);
1337     pathB.lineTo(1239.00000f, 226.000000f);
1338     pathB.cubicTo(1243.41833f, 226.000000f, 1247.00000f, 229.581726f, 1247.00000f, 234.000000f);
1339     pathB.lineTo(1247.00000f, 252.000000f);
1340     pathB.lineTo(10.0000000f, 252.000000f);
1341     pathB.lineTo(10.0000000f, 234.000000f);
1342     pathB.cubicTo(10.0000000f, 229.581726f, 13.5817204f, 226.000000f, 18.0000000f, 226.000000f);
1343     pathB.close();
1344     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1345 }
1346 
cubicOp70d(skiatest::Reporter * reporter,const char * filename)1347 static void cubicOp70d(skiatest::Reporter* reporter, const char* filename) {
1348     SkPath path, pathB;
1349     path.setFillType(SkPath::kWinding_FillType);
1350     path.moveTo(0,1);
1351     path.cubicTo(0,5, 4,0, 5,0);
1352     path.close();
1353     pathB.setFillType(SkPath::kWinding_FillType);
1354     pathB.moveTo(0,4);
1355     pathB.cubicTo(0,5, 1,0, 5,0);
1356     pathB.close();
1357     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1358 }
1359 
cubicOp71d(skiatest::Reporter * reporter,const char * filename)1360 static void cubicOp71d(skiatest::Reporter* reporter, const char* filename) {
1361     SkPath path, pathB;
1362     path.setFillType(SkPath::kWinding_FillType);
1363     path.moveTo(0,1);
1364     path.cubicTo(0,5, 4,1, 6,4);
1365     path.close();
1366     pathB.setFillType(SkPath::kWinding_FillType);
1367     pathB.moveTo(1,4);
1368     pathB.cubicTo(4,6, 1,0, 5,0);
1369     pathB.close();
1370     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1371 }
1372 
cubicOp72i(skiatest::Reporter * reporter,const char * filename)1373 static void cubicOp72i(skiatest::Reporter* reporter, const char* filename) {
1374     SkPath path, pathB;
1375     path.setFillType(SkPath::kWinding_FillType);
1376     path.moveTo(0,1);
1377     path.cubicTo(0,5, 5,2, 5,4);
1378     path.close();
1379     pathB.setFillType(SkPath::kWinding_FillType);
1380     pathB.moveTo(2,5);
1381     pathB.cubicTo(4,5, 1,0, 5,0);
1382     pathB.close();
1383     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1384 }
1385 
cubicOp73d(skiatest::Reporter * reporter,const char * filename)1386 static void cubicOp73d(skiatest::Reporter* reporter, const char* filename) {
1387     SkPath path, pathB;
1388     path.setFillType(SkPath::kWinding_FillType);
1389     path.moveTo(0,1);
1390     path.cubicTo(3,4, 4,0, 6,4);
1391     path.lineTo(0,1);
1392     path.close();
1393     pathB.setFillType(SkPath::kWinding_FillType);
1394     pathB.moveTo(0,4);
1395     pathB.cubicTo(4,6, 1,0, 4,3);
1396     pathB.lineTo(0,4);
1397     pathB.close();
1398     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1399 }
1400 
cubicOp74d(skiatest::Reporter * reporter,const char * filename)1401 static void cubicOp74d(skiatest::Reporter* reporter, const char* filename) {
1402     SkPath path, pathB;
1403     path.setFillType(SkPath::kWinding_FillType);
1404     path.moveTo(0,1);
1405     path.cubicTo(1,5, 5,1, 5,1);
1406     path.lineTo(0,1);
1407     path.close();
1408     pathB.setFillType(SkPath::kWinding_FillType);
1409     pathB.moveTo(1,5);
1410     pathB.cubicTo(1,5, 1,0, 5,1);
1411     pathB.lineTo(1,5);
1412     pathB.close();
1413     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1414 }
1415 
cubicOp75d(skiatest::Reporter * reporter,const char * filename)1416 static void cubicOp75d(skiatest::Reporter* reporter, const char* filename) {
1417     SkPath path, pathB;
1418     path.setFillType(SkPath::kWinding_FillType);
1419     path.moveTo(0,1);
1420     path.cubicTo(0,4, 5,1, 6,4);
1421     path.lineTo(0,1);
1422     path.close();
1423     pathB.setFillType(SkPath::kWinding_FillType);
1424     pathB.moveTo(1,5);
1425     pathB.cubicTo(4,6, 1,0, 4,0);
1426     pathB.lineTo(1,5);
1427     pathB.close();
1428     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1429 }
1430 
cubicOp76u(skiatest::Reporter * reporter,const char * filename)1431 static void cubicOp76u(skiatest::Reporter* reporter, const char* filename) {
1432     SkPath path, pathB;
1433     path.setFillType(SkPath::kWinding_FillType);
1434     path.moveTo(0,1);
1435     path.cubicTo(0,2, 2,0, 5,3);
1436     path.close();
1437     pathB.setFillType(SkPath::kWinding_FillType);
1438     pathB.moveTo(0,2);
1439     pathB.cubicTo(3,5, 1,0, 2,0);
1440     pathB.close();
1441     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1442 }
1443 
cubicOp77i(skiatest::Reporter * reporter,const char * filename)1444 static void cubicOp77i(skiatest::Reporter* reporter, const char* filename) {
1445     SkPath path, pathB;
1446     path.setFillType(SkPath::kEvenOdd_FillType);
1447     path.moveTo(0,1);
1448     path.cubicTo(1,3, 2,0, 3,2);
1449     path.lineTo(0,1);
1450     path.close();
1451     pathB.setFillType(SkPath::kEvenOdd_FillType);
1452     pathB.moveTo(0,2);
1453     pathB.cubicTo(2,3, 1,0, 3,1);
1454     pathB.lineTo(0,2);
1455     pathB.close();
1456     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1457 }
1458 
cubicOp78u(skiatest::Reporter * reporter,const char * filename)1459 static void cubicOp78u(skiatest::Reporter* reporter, const char* filename) {
1460     SkPath path, pathB;
1461     path.setFillType(SkPath::kEvenOdd_FillType);
1462     path.moveTo(1,6);
1463     path.cubicTo(1,6, 5,0, 6,1);
1464     path.lineTo(1,6);
1465     path.close();
1466     pathB.setFillType(SkPath::kEvenOdd_FillType);
1467     pathB.moveTo(0,5);
1468     pathB.cubicTo(1,6, 6,1, 6,1);
1469     pathB.lineTo(0,5);
1470     pathB.close();
1471     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
1472 }
1473 
cubicOp79u(skiatest::Reporter * reporter,const char * filename)1474 static void cubicOp79u(skiatest::Reporter* reporter, const char* filename) {
1475     SkPath path, pathB;
1476     path.setFillType(SkPath::kWinding_FillType);
1477     path.moveTo(0,1);
1478     path.cubicTo(1,3, 1,0, 6,4);
1479     path.close();
1480     pathB.setFillType(SkPath::kWinding_FillType);
1481     pathB.moveTo(0,1);
1482     pathB.cubicTo(4,6, 1,0, 3,1);
1483     pathB.close();
1484     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1485 }
1486 
cubicOp80i(skiatest::Reporter * reporter,const char * filename)1487 static void cubicOp80i(skiatest::Reporter* reporter, const char* filename) {
1488     SkPath path, pathB;
1489     path.setFillType(SkPath::kWinding_FillType);
1490     path.moveTo(0,1);
1491     path.cubicTo(2,3, 2,1, 4,3);
1492     path.lineTo(0,1);
1493     path.close();
1494     pathB.setFillType(SkPath::kWinding_FillType);
1495     pathB.moveTo(1,2);
1496     pathB.cubicTo(3,4, 1,0, 3,2);
1497     pathB.lineTo(1,2);
1498     pathB.close();
1499     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1500 }
1501 
cubicOp81d(skiatest::Reporter * reporter,const char * filename)1502 static void cubicOp81d(skiatest::Reporter* reporter, const char* filename) {
1503     SkPath path, pathB;
1504     path.setFillType(SkPath::kWinding_FillType);
1505     path.moveTo(0,1);
1506     path.cubicTo(4,6, 4,3, 5,4);
1507     path.close();
1508     pathB.setFillType(SkPath::kWinding_FillType);
1509     pathB.moveTo(3,4);
1510     pathB.cubicTo(4,5, 1,0, 6,4);
1511     pathB.close();
1512     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1513 }
1514 
cubicOp82i(skiatest::Reporter * reporter,const char * filename)1515 static void cubicOp82i(skiatest::Reporter* reporter, const char* filename) {
1516     SkPath path, pathB;
1517     path.setFillType(SkPath::kEvenOdd_FillType);
1518     path.moveTo(0,1);
1519     path.cubicTo(2,3, 5,2, 3,0);
1520     path.lineTo(0,1);
1521     path.close();
1522     pathB.setFillType(SkPath::kWinding_FillType);
1523     pathB.moveTo(2,5);
1524     pathB.cubicTo(0,3, 1,0, 3,2);
1525     pathB.lineTo(2,5);
1526     pathB.close();
1527     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1528 }
1529 
cubicOp83i(skiatest::Reporter * reporter,const char * filename)1530 static void cubicOp83i(skiatest::Reporter* reporter, const char* filename) {
1531     SkPath path, pathB;
1532     path.setFillType(SkPath::kWinding_FillType);
1533     path.moveTo(0,1);
1534     path.cubicTo(0,3, 2,1, 4,1);
1535     path.lineTo(0,1);
1536     path.close();
1537     pathB.setFillType(SkPath::kWinding_FillType);
1538     pathB.moveTo(1,2);
1539     pathB.cubicTo(1,4, 1,0, 3,0);
1540     pathB.lineTo(1,2);
1541     pathB.close();
1542     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1543 }
1544 
cubicOp84d(skiatest::Reporter * reporter,const char * filename)1545 static void cubicOp84d(skiatest::Reporter* reporter, const char* filename) {
1546     SkPath path, pathB;
1547     path.setFillType(SkPath::kWinding_FillType);
1548     path.moveTo(0,4);
1549     path.cubicTo(2,3, 6,3, 3,2);
1550     path.close();
1551     pathB.setFillType(SkPath::kWinding_FillType);
1552     pathB.moveTo(3,6);
1553     pathB.cubicTo(2,3, 4,0, 3,2);
1554     pathB.close();
1555     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1556 }
1557 
skpClip1(skiatest::Reporter * reporter,const char * filename)1558 static void skpClip1(skiatest::Reporter* reporter, const char* filename) {
1559     SkPath path;
1560     path.setFillType(SkPath::kEvenOdd_FillType);
1561     path.moveTo(1126.17114f, 877.171204f);
1562     path.quadTo(1127.34314f, 876.000000f, 1129.00000f, 876.000000f);
1563     path.lineTo(1243.00000f, 876.000000f);
1564     path.quadTo(1244.65686f, 876.000000f, 1245.82886f, 877.171204f);
1565     path.quadTo(1247.00000f, 878.343140f, 1247.00000f, 880.000000f);
1566     path.lineTo(1247.00000f, 907.000000f);
1567     path.lineTo(1246.00000f, 907.000000f);
1568     path.lineTo(1246.00000f, 880.000000f);
1569     path.cubicTo(1246.00000f, 878.343140f, 1244.65686f, 877.000000f, 1243.00000f, 877.000000f);
1570     path.lineTo(1129.00000f, 877.000000f);
1571     path.cubicTo(1127.34314f, 877.000000f, 1126.00000f, 878.343140f, 1126.00000f, 880.000000f);
1572     path.lineTo(1126.00000f, 907.000000f);
1573     path.lineTo(1125.00000f, 907.000000f);
1574     path.lineTo(1125.00000f, 880.000000f);
1575     path.quadTo(1125.00000f, 878.343140f, 1126.17114f, 877.171204f);
1576     path.close();
1577     SkPath pathB;
1578     pathB.setFillType(SkPath::kWinding_FillType);
1579     pathB.moveTo(1247.00000f, 876.000000f);
1580     pathB.lineTo(1231.00000f, 892.000000f);
1581     pathB.lineTo(1246.00000f, 907.000000f);
1582     pathB.lineTo(1247.00000f, 907.000000f);
1583     pathB.lineTo(1247.00000f, 876.000000f);
1584     pathB.close();
1585     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1586 }
1587 
skpClip2(skiatest::Reporter * reporter,const char * filename)1588 static void skpClip2(skiatest::Reporter* reporter, const char* filename) {
1589     SkPath path;
1590     path.setFillType(SkPath::kEvenOdd_FillType);
1591     path.moveTo(134.000000f, 11414.0000f);
1592     path.cubicTo(131.990234f, 11414.0000f, 130.326660f, 11415.4824f, 130.042755f, 11417.4131f);
1593     path.cubicTo(130.233124f, 11418.3193f, 131.037079f, 11419.0000f, 132.000000f, 11419.0000f);
1594     path.lineTo(806.000000f, 11419.0000f);
1595     path.cubicTo(806.962891f, 11419.0000f, 807.766907f, 11418.3193f, 807.957275f, 11417.4131f);
1596     path.cubicTo(807.673401f, 11415.4824f, 806.009766f, 11414.0000f, 804.000000f, 11414.0000f);
1597     path.lineTo(134.000000f, 11414.0000f);
1598     path.close();
1599     SkPath pathB;
1600     pathB.setFillType(SkPath::kInverseWinding_FillType);
1601     pathB.moveTo(132.000000f, 11415.0000f);
1602     pathB.lineTo(806.000000f, 11415.0000f);
1603     pathB.cubicTo(807.104553f, 11415.0000f, 808.000000f, 11415.4473f, 808.000000f, 11416.0000f);
1604     pathB.lineTo(808.000000f, 11417.0000f);
1605     pathB.cubicTo(808.000000f, 11418.1045f, 807.104553f, 11419.0000f, 806.000000f, 11419.0000f);
1606     pathB.lineTo(132.000000f, 11419.0000f);
1607     pathB.cubicTo(130.895432f, 11419.0000f, 130.000000f, 11418.1045f, 130.000000f, 11417.0000f);
1608     pathB.lineTo(130.000000f, 11416.0000f);
1609     pathB.cubicTo(130.000000f, 11415.4473f, 130.895432f, 11415.0000f, 132.000000f, 11415.0000f);
1610     pathB.close();
1611     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1612 }
1613 
skp96prezzi1(skiatest::Reporter * reporter,const char * filename)1614 static void skp96prezzi1(skiatest::Reporter* reporter, const char* filename) {
1615     SkPath path;
1616     path.setFillType(SkPath::kEvenOdd_FillType);
1617     path.moveTo(157.464005f, 670.463989f);
1618     path.quadTo(158.928925f, 669.000000f, 161.000000f, 669.000000f);
1619     path.lineTo(248.000000f, 669.000000f);
1620     path.quadTo(250.071075f, 669.000000f, 251.535995f, 670.463989f);
1621     path.quadTo(253.000000f, 671.928955f, 253.000000f, 674.000000f);
1622     path.lineTo(253.000000f, 706.000000f);
1623     path.lineTo(251.000000f, 706.000000f);
1624     path.lineTo(251.000000f, 675.000000f);
1625     path.cubicTo(251.000000f, 672.790833f, 249.209137f, 671.000000f, 247.000000f, 671.000000f);
1626     path.lineTo(162.000000f, 671.000000f);
1627     path.cubicTo(159.790863f, 671.000000f, 158.000000f, 672.790833f, 158.000000f, 675.000000f);
1628     path.lineTo(158.000000f, 706.000000f);
1629     path.lineTo(156.000000f, 706.000000f);
1630     path.lineTo(156.000000f, 674.000000f);
1631     path.quadTo(156.000000f, 671.928955f, 157.464005f, 670.463989f);
1632     path.close();
1633     SkPath pathB;
1634     pathB.setFillType(SkPath::kWinding_FillType);
1635     pathB.moveTo(156.000000f, 669.000000f);
1636     pathB.lineTo(178.500000f, 691.500000f);
1637     pathB.lineTo(230.500000f, 691.500000f);
1638     pathB.lineTo(253.000000f, 669.000000f);
1639     pathB.lineTo(156.000000f, 669.000000f);
1640     pathB.close();
1641     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1642 }
1643 
skpancestry_com1(skiatest::Reporter * reporter,const char * filename)1644 static void skpancestry_com1(skiatest::Reporter* reporter, const char* filename) {
1645     SkPath path;
1646     path.setFillType(SkPath::kEvenOdd_FillType);
1647     path.moveTo(161.000000f, 925.000000f);
1648     path.cubicTo(159.874390f, 925.000000f, 158.835663f, 925.371948f, 158.000000f, 925.999634f);
1649     path.lineTo(158.000000f, 926.000000f);
1650     path.lineTo(1108.00000f, 926.000000f);
1651     path.lineTo(1108.00000f, 925.999634f);
1652     path.cubicTo(1107.16443f, 925.371948f, 1106.12561f, 925.000000f, 1105.00000f, 925.000000f);
1653     path.lineTo(161.000000f, 925.000000f);
1654     path.close();
1655     SkPath pathB;
1656     pathB.setFillType(SkPath::kEvenOdd_FillType);
1657     pathB.moveTo(161.000000f, 926.000000f);
1658     pathB.lineTo(1105.00000f, 926.000000f);
1659     pathB.cubicTo(1107.20911f, 926.000000f, 1109.00000f, 927.790833f, 1109.00000f, 930.000000f);
1660     pathB.lineTo(1109.00000f, 956.000000f);
1661     pathB.cubicTo(1109.00000f, 958.209167f, 1107.20911f, 960.000000f, 1105.00000f, 960.000000f);
1662     pathB.lineTo(161.000000f, 960.000000f);
1663     pathB.cubicTo(158.790863f, 960.000000f, 157.000000f, 958.209167f, 157.000000f, 956.000000f);
1664     pathB.lineTo(157.000000f, 930.000000f);
1665     pathB.cubicTo(157.000000f, 927.790833f, 158.790863f, 926.000000f, 161.000000f, 926.000000f);
1666     pathB.close();
1667     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1668 }
1669 
skpeldorado_com_ua1(skiatest::Reporter * reporter,const char * filename)1670 static void skpeldorado_com_ua1(skiatest::Reporter* reporter, const char* filename) {
1671     SkPath path;
1672     path.setFillType(SkPath::kEvenOdd_FillType);
1673     path.moveTo(286.695129f, 291.000000f);
1674     path.lineTo(229.304855f, 561.000000f);
1675     path.lineTo(979.304871f, 561.000000f);
1676     path.lineTo(1036.69507f, 291.000000f);
1677     path.lineTo(286.695129f, 291.000000f);
1678     path.close();
1679     SkPath pathB;
1680     pathB.setFillType(SkPath::kWinding_FillType);
1681     pathB.moveTo(1006.69513f, 291.000000f);
1682     pathB.cubicTo(1023.26367f, 291.000000f, 1033.84021f, 304.431458f, 1030.31836f, 321.000000f);
1683     pathB.lineTo(985.681519f, 531.000000f);
1684     pathB.cubicTo(982.159790f, 547.568542f, 965.873413f, 561.000000f, 949.304871f, 561.000000f);
1685     pathB.lineTo(259.304871f, 561.000000f);
1686     pathB.cubicTo(242.736313f, 561.000000f, 232.159805f, 547.568542f, 235.681549f, 531.000000f);
1687     pathB.lineTo(280.318420f, 321.000000f);
1688     pathB.cubicTo(283.840179f, 304.431458f, 300.126587f, 291.000000f, 316.695129f, 291.000000f);
1689     pathB.lineTo(1006.69513f, 291.000000f);
1690     pathB.close();
1691     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1692 }
1693 
skpbyte_com1(skiatest::Reporter * reporter,const char * filename)1694 static void skpbyte_com1(skiatest::Reporter* reporter, const char* filename) {
1695     SkPath path;
1696     path.setFillType(SkPath::kEvenOdd_FillType);
1697     path.moveTo(968.000000f, 14.0000000f);
1698     path.cubicTo(965.238586f, 14.0000000f, 963.000000f, 16.2385769f, 963.000000f, 19.0000000f);
1699     path.lineTo(963.000000f, 32.0000000f);
1700     path.cubicTo(963.000000f, 34.7614250f, 965.238586f, 37.0000000f, 968.000000f, 37.0000000f);
1701     path.lineTo(1034.00000f, 37.0000000f);
1702     path.cubicTo(1036.76147f, 37.0000000f, 1039.00000f, 34.7614250f, 1039.00000f, 32.0000000f);
1703     path.lineTo(1039.00000f, 19.0000000f);
1704     path.cubicTo(1039.00000f, 16.2385769f, 1036.76147f, 14.0000000f, 1034.00000f, 14.0000000f);
1705     path.lineTo(968.000000f, 14.0000000f);
1706     path.close();
1707     SkPath pathB;
1708     pathB.setFillType(SkPath::kInverseWinding_FillType);
1709     pathB.moveTo(968.000000f, 14.0000000f);
1710     pathB.lineTo(1034.00000f, 14.0000000f);
1711     pathB.cubicTo(1036.76147f, 14.0000000f, 1039.00000f, 16.2385750f, 1039.00000f, 19.0000000f);
1712     pathB.lineTo(1039.00000f, 32.0000000f);
1713     pathB.cubicTo(1039.00000f, 34.2091408f, 1036.76147f, 36.0000000f, 1034.00000f, 36.0000000f);
1714     pathB.lineTo(968.000000f, 36.0000000f);
1715     pathB.cubicTo(965.238586f, 36.0000000f, 963.000000f, 34.2091408f, 963.000000f, 32.0000000f);
1716     pathB.lineTo(963.000000f, 19.0000000f);
1717     pathB.cubicTo(963.000000f, 16.2385750f, 965.238586f, 14.0000000f, 968.000000f, 14.0000000f);
1718     pathB.close();
1719     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1720 }
1721 
skphealth_com76(skiatest::Reporter * reporter,const char * filename)1722 static void skphealth_com76(skiatest::Reporter* reporter, const char* filename) {
1723     SkPath path;
1724     path.setFillType(SkPath::kEvenOdd_FillType);
1725     path.moveTo(708.099182f, 7.09919119f);
1726     path.lineTo(708.099182f, 7.09920025f);
1727     path.quadTo(704.000000f, 11.2010098f, 704.000000f, 17.0000000f);
1728     path.lineTo(704.000000f, 33.0000000f);
1729     path.lineTo(705.000000f, 33.0000000f);
1730     path.lineTo(705.000000f, 17.0000000f);
1731     path.cubicTo(705.000000f, 13.4101496f, 706.455078f, 10.1601505f, 708.807617f, 7.80761385f);
1732     path.lineTo(708.099182f, 7.09919119f);
1733     path.close();
1734     SkPath pathB;
1735     pathB.setFillType(SkPath::kWinding_FillType);
1736     pathB.moveTo(704.000000f, 3.00000000f);
1737     pathB.lineTo(704.000000f, 33.0000000f);
1738     pathB.lineTo(705.000000f, 33.0000000f);
1739     pathB.lineTo(719.500000f, 3.00000000f);
1740     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1741 }
1742 
skpahrefs_com88(skiatest::Reporter * reporter,const char * filename)1743 static void skpahrefs_com88(skiatest::Reporter* reporter, const char* filename) {
1744     SkPath path;
1745     path.setFillType(SkPath::kEvenOdd_FillType);
1746     path.moveTo(1099.82886f, 7.17117119f);
1747     path.lineTo(1099.12134f, 7.87867832f);
1748     path.cubicTo(1099.66418f, 8.42157173f, 1100.00000f, 9.17157173f, 1100.00000f, 10.0000000f);
1749     path.lineTo(1100.00000f, 28.0000000f);
1750     path.cubicTo(1100.00000f, 29.6568546f, 1098.65686f, 31.0000000f, 1097.00000f, 31.0000000f);
1751     path.lineTo(1088.00000f, 31.0000000f);
1752     path.lineTo(1088.00000f, 32.0000000f);
1753     path.lineTo(1097.00000f, 32.0000000f);
1754     path.quadTo(1098.65686f, 32.0000000f, 1099.82886f, 30.8288002f);
1755     path.quadTo(1101.00000f, 29.6568546f, 1101.00000f, 28.0000000f);
1756     path.lineTo(1101.00000f, 10.0000000f);
1757     path.quadTo(1101.00000f, 8.34314537f, 1099.82886f, 7.17119980f);
1758     path.lineTo(1099.82886f, 7.17117119f);
1759     path.close();
1760     SkPath pathB;
1761     pathB.setFillType(SkPath::kWinding_FillType);
1762     pathB.moveTo(1101.00000f, 6.00000000f);
1763     pathB.lineTo(1088.00000f, 6.00000000f);
1764     pathB.lineTo(1088.00000f, 19.0000000f);
1765     pathB.lineTo(1101.00000f, 32.0000000f);
1766     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1767 }
1768 
skpahrefs_com29(skiatest::Reporter * reporter,const char * filename)1769 static void skpahrefs_com29(skiatest::Reporter* reporter, const char* filename) {
1770     SkPath path;
1771     path.setFillType(SkPath::kEvenOdd_FillType);
1772     path.moveTo(1037.17114f, 7.17119980f);
1773     path.quadTo(1038.34314f, 6.00000000f, 1040.00000f, 6.00000000f);
1774     path.lineTo(1074.00000f, 6.00000000f);
1775     path.lineTo(1074.00000f, 32.0000000f);
1776     path.lineTo(1040.00000f, 32.0000000f);
1777     path.quadTo(1038.34314f, 32.0000000f, 1037.17114f, 30.8288002f);
1778     path.quadTo(1036.00000f, 29.6568546f, 1036.00000f, 28.0000000f);
1779     path.lineTo(1036.00000f, 10.0000000f);
1780     path.quadTo(1036.00000f, 8.34314537f, 1037.17114f, 7.17119980f);
1781     path.close();
1782     path.moveTo(1037.00000f, 10.0000000f);
1783     path.cubicTo(1037.00000f, 8.34314537f, 1038.34314f, 7.00000000f, 1040.00000f, 7.00000000f);
1784     path.lineTo(1073.00000f, 7.00000000f);
1785     path.lineTo(1073.00000f, 31.0000000f);
1786     path.lineTo(1040.00000f, 31.0000000f);
1787     path.cubicTo(1038.34314f, 31.0000000f, 1037.00000f, 29.6568546f, 1037.00000f, 28.0000000f);
1788     path.lineTo(1037.00000f, 10.0000000f);
1789     path.close();
1790     SkPath pathB;
1791     pathB.setFillType(SkPath::kWinding_FillType);
1792     pathB.moveTo(1036.00000f, 32.0000000f);
1793     pathB.lineTo(1049.00000f, 19.0000000f);
1794     pathB.lineTo(1073.00000f, 31.0000000f);
1795     pathB.lineTo(1074.00000f, 32.0000000f);
1796     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1797 }
1798 
cubicOp85d(skiatest::Reporter * reporter,const char * filename)1799 static void cubicOp85d(skiatest::Reporter* reporter, const char* filename) {
1800     SkPath path;
1801     path.setFillType(SkPath::kWinding_FillType);
1802     path.moveTo(0,1);
1803     path.cubicTo(1,6, 1,0, 6,2);
1804     path.close();
1805     SkPath pathB;
1806     pathB.setFillType(SkPath::kWinding_FillType);
1807     pathB.moveTo(0,1);
1808     pathB.cubicTo(2,6, 1,0, 6,1);
1809     pathB.close();
1810     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
1811 }
1812 
skpkkiste_to98(skiatest::Reporter * reporter,const char * filename)1813 static void skpkkiste_to98(skiatest::Reporter* reporter, const char* filename) {
1814     SkPath path;
1815     path.setFillType(SkPath::kEvenOdd_FillType);
1816     path.moveTo(96, 122);
1817     path.cubicTo(94.6192932f, 122, 93.3692932f, 122.559647f, 92.4644699f, 123.46447f);
1818     path.lineTo(94.1715698f, 125.17157f);
1819     path.cubicTo(94.8954315f, 124.447708f, 95.8954315f, 124, 97, 124);
1820     path.lineTo(257, 124);
1821     path.cubicTo(258.104553f, 124, 259.104584f, 124.447708f, 259.82843f, 125.17157f);
1822     path.lineTo(261.535522f, 123.46447f);
1823     path.cubicTo(260.630707f, 122.559647f, 259.380707f, 122, 258, 122);
1824     path.lineTo(96, 122);
1825     path.close();
1826     SkPath pathB;
1827     pathB.setFillType(SkPath::kWinding_FillType);
1828     pathB.moveTo(258, 122);
1829     pathB.cubicTo(260.761414f, 122, 263, 124.238579f, 263, 127);
1830     pathB.lineTo(263, 284);
1831     pathB.cubicTo(263, 286.761414f, 260.761414f, 289, 258, 289);
1832     pathB.lineTo(96, 289);
1833     pathB.cubicTo(93.2385788f, 289, 91, 286.761414f, 91, 284);
1834     pathB.lineTo(91, 127);
1835     pathB.cubicTo(91, 124.238579f, 93.2385788f, 122, 96, 122);
1836     pathB.lineTo(258, 122);
1837     pathB.close();
1838     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1839 }
1840 
issue1417(skiatest::Reporter * reporter,const char * filename)1841 static void issue1417(skiatest::Reporter* reporter, const char* filename) {
1842     SkPath path1;
1843     path1.moveTo(122.58908843994140625f, 82.2836456298828125f);
1844     path1.quadTo(129.8215789794921875f, 80, 138, 80);
1845     path1.quadTo(147.15692138671875f, 80, 155.1280364990234375f, 82.86279296875f);
1846     path1.lineTo(161.1764678955078125f, 100);
1847     path1.lineTo(161.1764678955078125f, 100);
1848     path1.lineTo(115.29412078857421875f, 100);
1849     path1.lineTo(115.29412078857421875f, 100);
1850     path1.lineTo(122.58908843994140625f, 82.2836456298828125f);
1851     path1.lineTo(122.58908843994140625f, 82.2836456298828125f);
1852     path1.close();
1853     path1.moveTo(98.68194580078125f, 140.343841552734375f);
1854     path1.lineTo(115.29412078857421875f, 100);
1855     path1.lineTo(115.29412078857421875f, 100);
1856     path1.lineTo(97.9337615966796875f, 100);
1857     path1.lineTo(97.9337615966796875f, 100);
1858     path1.quadTo(88, 112.94264984130859375f, 88, 130);
1859     path1.quadTo(88, 131.544830322265625f, 88.08148956298828125f, 133.0560302734375f);
1860     path1.lineTo(98.68194580078125f, 140.343841552734375f);
1861     path1.lineTo(98.68194580078125f, 140.343841552734375f);
1862     path1.close();
1863     path1.moveTo(136.969696044921875f, 166.6666717529296875f);
1864     path1.lineTo(98.68194580078125f, 140.343841552734375f);
1865     path1.lineTo(98.68194580078125f, 140.343841552734375f);
1866     path1.lineTo(93.45894622802734375f, 153.02825927734375f);
1867     path1.lineTo(93.45894622802734375f, 153.02825927734375f);
1868     path1.quadTo(96.94116973876953125f, 159.65185546875f, 102.64466094970703125f, 165.3553466796875f);
1869     path1.quadTo(110.7924652099609375f, 173.503143310546875f, 120.8179779052734375f, 177.1177825927734375f);
1870     path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1871     path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1872     path1.close();
1873     path1.moveTo(175.8309783935546875f, 141.5211334228515625f);
1874     path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1875     path1.lineTo(136.969696044921875f, 166.6666717529296875f);
1876     path1.lineTo(153.15728759765625f, 177.7956390380859375f);
1877     path1.lineTo(153.15728759765625f, 177.7956390380859375f);
1878     path1.quadTo(164.392425537109375f, 174.318267822265625f, 173.3553466796875f, 165.3553466796875f);
1879     path1.quadTo(177.805816650390625f, 160.9048614501953125f, 180.90380859375f, 155.8941650390625f);
1880     path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1881     path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1882     path1.close();
1883     path1.moveTo(175.8309783935546875f, 141.5211334228515625f);
1884     path1.lineTo(187.8782806396484375f, 133.7258148193359375f);
1885     path1.lineTo(187.8782806396484375f, 133.7258148193359375f);
1886     path1.quadTo(188, 131.8880615234375f, 188, 130);
1887     path1.quadTo(188, 112.942657470703125f, 178.0662384033203125f, 100);
1888     path1.lineTo(161.1764678955078125f, 100);
1889     path1.lineTo(161.1764678955078125f, 100);
1890     path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1891     path1.lineTo(175.8309783935546875f, 141.5211334228515625f);
1892     path1.close();
1893 
1894     SkPath path2;
1895     path2.moveTo(174.117645263671875f, 100);
1896     path2.lineTo(161.1764678955078125f, 100);
1897     path2.lineTo(161.1764678955078125f, 100);
1898     path2.lineTo(155.1280364990234375f, 82.86279296875f);
1899     path2.lineTo(155.1280364990234375f, 82.86279296875f);
1900     path2.quadTo(153.14971923828125f, 82.15229034423828125f, 151.098419189453125f, 81.618133544921875f);
1901     path2.lineTo(143.5294189453125f, 100);
1902     path2.lineTo(143.5294189453125f, 100);
1903     path2.lineTo(161.1764678955078125f, 100);
1904     path2.lineTo(161.1764678955078125f, 100);
1905     path2.lineTo(168.23529052734375f, 120);
1906     path2.lineTo(168.23529052734375f, 120);
1907     path2.lineTo(181.1764678955078125f, 120);
1908     path2.lineTo(181.1764678955078125f, 120);
1909     path2.lineTo(186.3661956787109375f, 134.7042236328125f);
1910     path2.lineTo(186.3661956787109375f, 134.7042236328125f);
1911     path2.lineTo(187.8782806396484375f, 133.7258148193359375f);
1912     path2.lineTo(187.8782806396484375f, 133.7258148193359375f);
1913     path2.quadTo(188, 131.8880615234375f, 188, 130);
1914     path2.quadTo(188, 124.80947113037109375f, 187.080169677734375f, 120);
1915     path2.lineTo(181.1764678955078125f, 120);
1916     path2.lineTo(181.1764678955078125f, 120);
1917     path2.lineTo(174.117645263671875f, 100);
1918     path2.lineTo(174.117645263671875f, 100);
1919     path2.close();
1920     path2.moveTo(88.91983795166015625f, 120);
1921     path2.lineTo(107.0588226318359375f, 120);
1922     path2.lineTo(107.0588226318359375f, 120);
1923     path2.lineTo(98.68194580078125f, 140.343841552734375f);
1924     path2.lineTo(98.68194580078125f, 140.343841552734375f);
1925     path2.lineTo(88.08148956298828125f, 133.0560302734375f);
1926     path2.lineTo(88.08148956298828125f, 133.0560302734375f);
1927     path2.quadTo(88, 131.544830322265625f, 88, 130);
1928     path2.quadTo(88, 124.80951690673828125f, 88.91983795166015625f, 120);
1929     path2.close();
1930     path2.moveTo(96.67621612548828125f, 145.21490478515625f);
1931     path2.lineTo(98.68194580078125f, 140.343841552734375f);
1932     path2.lineTo(98.68194580078125f, 140.343841552734375f);
1933     path2.lineTo(120.68767547607421875f, 155.4727783203125f);
1934     path2.lineTo(120.68767547607421875f, 155.4727783203125f);
1935     path2.lineTo(118.68194580078125f, 160.343841552734375f);
1936     path2.lineTo(118.68194580078125f, 160.343841552734375f);
1937     path2.lineTo(96.67621612548828125f, 145.21490478515625f);
1938     path2.lineTo(96.67621612548828125f, 145.21490478515625f);
1939     path2.close();
1940     path2.moveTo(113.232177734375f, 173.5789947509765625f);
1941     path2.quadTo(116.8802642822265625f, 175.69805908203125f, 120.8179779052734375f, 177.1177825927734375f);
1942     path2.lineTo(132.2864990234375f, 169.6969757080078125f);
1943     path2.lineTo(132.2864990234375f, 169.6969757080078125f);
1944     path2.lineTo(118.68194580078125f, 160.343841552734375f);
1945     path2.lineTo(118.68194580078125f, 160.343841552734375f);
1946     path2.lineTo(113.232177734375f, 173.5789947509765625f);
1947     path2.lineTo(113.232177734375f, 173.5789947509765625f);
1948     path2.close();
1949     // FIXME : difficult data, circle back later
1950     testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
1951 }
1952 
issue1418(skiatest::Reporter * reporter,const char * filename)1953 static void issue1418(skiatest::Reporter* reporter, const char* filename) {
1954     SkPath path1;
1955     path1.moveTo(0, 0);
1956     path1.lineTo(1, 0);
1957     path1.lineTo(1, 0);
1958     path1.lineTo(1, 1);
1959     path1.lineTo(1, 1);
1960     path1.lineTo(0, 1);
1961     path1.lineTo(0, 1);
1962     path1.lineTo(0, 0);
1963     path1.lineTo(0, 0);
1964     path1.close();
1965 
1966     SkPath path2;
1967     path2.moveTo(0.64644664525985717773f, -0.35355341434478759766f);
1968     path2.quadTo(0.79289329051971435547f, -0.50000005960464477539f, 1.0000001192092895508f, -0.50000005960464477539f);
1969     path2.quadTo(1.2071068286895751953f, -0.50000005960464477539f, 1.3535535335540771484f, -0.35355341434478759766f);
1970     path2.quadTo(1.5000001192092895508f, -0.20710679888725280762f, 1.5000001192092895508f, 0);
1971     path2.quadTo(1.5000001192092895508f, 0.20710679888725280762f, 1.3535535335540771484f, 0.35355341434478759766f);
1972     path2.quadTo(1.2071068286895751953f, 0.50000005960464477539f, 1.0000001192092895508f, 0.50000005960464477539f);
1973     path2.quadTo(0.79289329051971435547f, 0.50000005960464477539f, 0.64644664525985717773f, 0.35355341434478759766f);
1974     path2.quadTo(0.50000005960464477539f, 0.20710679888725280762f, 0.50000005960464477539f, 0);
1975     path2.quadTo(0.50000005960464477539f, -0.20710679888725280762f, 0.64644664525985717773f, -0.35355341434478759766f);
1976     testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
1977 }
1978 
cubicOp85i(skiatest::Reporter * reporter,const char * filename)1979 static void cubicOp85i(skiatest::Reporter* reporter, const char* filename) {
1980     SkPath path, pathB;
1981     path.setFillType(SkPath::kWinding_FillType);
1982     path.moveTo(3, 4);
1983     path.cubicTo(1, 5, 4, 3, 6, 4);
1984     path.close();
1985     pathB.setFillType(SkPath::kWinding_FillType);
1986     pathB.moveTo(3, 4);
1987     pathB.cubicTo(4, 6, 4, 3, 5, 1);
1988     pathB.close();
1989     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
1990 }
1991 
issue1418b(skiatest::Reporter * reporter,const char * filename)1992 static void issue1418b(skiatest::Reporter* reporter, const char* filename) {
1993     SkPath path1;
1994     path1.moveTo(0, 0);
1995     path1.lineTo(1, 0);
1996     path1.lineTo(1, 1);
1997     path1.lineTo(0, 1);
1998     path1.lineTo(0, 0);
1999     path1.close();
2000     path1.setFillType(SkPath::kWinding_FillType);
2001     SkPath path2;
2002     path2.moveTo(0.646446645f, -0.353553414f);
2003     path2.quadTo(0.792893291f, -0.50000006f, 1.00000012f, -0.50000006f);
2004     path2.quadTo(1.20710683f, -0.50000006f, 1.35355353f, -0.353553414f);
2005     path2.quadTo(1.50000012f, -0.207106799f, 1.50000012f, 0);
2006     path2.quadTo(1.50000012f, 0.207106799f, 1.35355353f, 0.353553414f);
2007     path2.quadTo(1.20710683f, 0.50000006f, 1.00000012f, 0.50000006f);
2008     path2.quadTo(0.792893291f, 0.50000006f, 0.646446645f, 0.353553414f);
2009     path2.quadTo(0.50000006f, 0.207106799f, 0.50000006f, 0);
2010     path2.quadTo(0.50000006f, -0.207106799f, 0.646446645f, -0.353553414f);
2011     path2.close();
2012     path2.moveTo(1.00000012f, 0.50000006f);
2013     path2.lineTo(1.00000012f, 1.00000012f);
2014     path2.lineTo(0.50000006f, 1.00000012f);
2015     path2.quadTo(0.50000006f, 0.792893291f, 0.646446645f, 0.646446645f);
2016     path2.quadTo(0.792893291f, 0.50000006f, 1.00000012f, 0.50000006f);
2017     path2.close();
2018     path2.setFillType(SkPath::kEvenOdd_FillType);
2019     testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
2020 }
2021 
rectOp1i(skiatest::Reporter * reporter,const char * filename)2022 static void rectOp1i(skiatest::Reporter* reporter, const char* filename) {
2023     SkPath path, pathB;
2024     path.setFillType(SkPath::kWinding_FillType);
2025     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2026     path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
2027     pathB.setFillType(SkPath::kWinding_FillType);
2028     pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2029     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
2030     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2031 }
2032 
rectOp2i(skiatest::Reporter * reporter,const char * filename)2033 static void rectOp2i(skiatest::Reporter* reporter, const char* filename) {
2034     SkPath path, pathB;
2035     path.setFillType(SkPath::kEvenOdd_FillType);
2036     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2037     path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
2038     pathB.setFillType(SkPath::kWinding_FillType);
2039     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
2040     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
2041     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2042 }
2043 
rectOp3x(skiatest::Reporter * reporter,const char * filename)2044 static void rectOp3x(skiatest::Reporter* reporter, const char* filename) {
2045     SkPath path, pathB;
2046     path.setFillType(SkPath::kEvenOdd_FillType);
2047     path.moveTo(0, 0);
2048     path.lineTo(3, 0);
2049     path.lineTo(3, 3);
2050     path.lineTo(0, 3);
2051     path.close();
2052     path.moveTo(2, 2);
2053     path.lineTo(3, 2);
2054     path.lineTo(3, 3);
2055     path.lineTo(2, 3);
2056     path.close();
2057     pathB.setFillType(SkPath::kWinding_FillType);
2058     pathB.moveTo(1, 1);
2059     pathB.lineTo(3, 1);
2060     pathB.lineTo(3, 3);
2061     pathB.lineTo(1, 3);
2062     pathB.close();
2063     pathB.moveTo(2, 2);
2064     pathB.lineTo(3, 2);
2065     pathB.lineTo(3, 3);
2066     pathB.lineTo(2, 3);
2067     pathB.close();
2068     testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
2069 }
2070 
issue1435(skiatest::Reporter * reporter,const char * filename)2071 static void issue1435(skiatest::Reporter* reporter, const char* filename) {
2072     SkPath path1;
2073     path1.moveTo(160, 60);
2074     path1.lineTo(220, 230);
2075     path1.lineTo(60, 120);
2076     path1.lineTo(260, 120);
2077     path1.lineTo(90, 230);
2078     path1.lineTo(160, 60);
2079     path1.close();
2080     path1.setFillType(SkPath::kEvenOdd_FillType);
2081 
2082     SkPath path2;
2083     path2.moveTo(142.589081f, 102.283646f);
2084     path2.quadTo(149.821579f, 100, 158, 100);
2085     path2.quadTo(167.156921f, 100, 175.128036f, 102.862793f);
2086     path2.lineTo(181.176468f, 120);
2087     path2.lineTo(135.294128f, 120);
2088     path2.lineTo(142.589081f, 102.283646f);
2089     path2.close();
2090     path2.moveTo(118.681946f, 160.343842f);
2091     path2.lineTo(135.294128f, 120);
2092     path2.lineTo(117.933762f, 120);
2093     path2.quadTo(108, 132.942657f, 108, 150);
2094     path2.quadTo(108, 151.54483f, 108.08149f, 153.05603f);
2095     path2.lineTo(118.681946f, 160.343842f);
2096     path2.close();
2097     path2.moveTo(156.969696f, 186.666672f);
2098     path2.lineTo(118.681946f, 160.343842f);
2099     path2.lineTo(113.458946f, 173.028259f);
2100     path2.quadTo(116.94117f, 179.651855f, 122.644661f, 185.355347f);
2101     path2.quadTo(130.792465f, 193.503143f, 140.817978f, 197.117783f);
2102     path2.lineTo(156.969696f, 186.666672f);
2103     path2.close();
2104     path2.moveTo(195.830978f, 161.521133f);
2105     path2.lineTo(156.969696f, 186.666672f);
2106     path2.lineTo(173.157288f, 197.795639f);
2107     path2.quadTo(184.392426f, 194.318268f, 193.355347f, 185.355347f);
2108     path2.quadTo(197.805817f, 180.904861f, 200.903809f, 175.894165f);
2109     path2.lineTo(195.830978f, 161.521133f);
2110     path2.close();
2111     path2.moveTo(195.830978f, 161.521133f);
2112     path2.lineTo(207.878281f, 153.725815f);
2113     path2.quadTo(208, 151.888062f, 208, 150);
2114     path2.quadTo(208, 132.942657f, 198.066238f, 120);
2115     path2.lineTo(181.176468f, 120);
2116     path2.lineTo(195.830978f, 161.521133f);
2117     path2.close();
2118     path2.setFillType(SkPath::kEvenOdd_FillType);
2119     testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
2120 }
2121 
skpkkiste_to716(skiatest::Reporter * reporter,const char * filename)2122 static void skpkkiste_to716(skiatest::Reporter* reporter, const char* filename) {
2123     SkPath path;
2124     path.setFillType(SkPath::kEvenOdd_FillType);
2125     path.moveTo(1173, 284);
2126     path.cubicTo(1173, 285.125824f, 1173.37207f, 286.164734f, 1174, 287.000488f);
2127     path.lineTo(1174, 123.999496f);
2128     path.cubicTo(1173.37207f, 124.835243f, 1173, 125.874168f, 1173, 127);
2129     path.lineTo(1173, 284);
2130     path.close();
2131     SkPath pathB;
2132     pathB.setFillType(SkPath::kWinding_FillType);
2133     pathB.moveTo(1340, 122);
2134     pathB.cubicTo(1342.76147f, 122, 1345, 124.238579f, 1345, 127);
2135     pathB.lineTo(1345, 284);
2136     pathB.cubicTo(1345, 286.761414f, 1342.76147f, 289, 1340, 289);
2137     pathB.lineTo(1178, 289);
2138     pathB.cubicTo(1175.23853f, 289, 1173, 286.761414f, 1173, 284);
2139     pathB.lineTo(1173, 127);
2140     pathB.cubicTo(1173, 124.238579f, 1175.23853f, 122, 1178, 122);
2141     pathB.lineTo(1340, 122);
2142     pathB.close();
2143     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2144 }
2145 
loopEdge1(skiatest::Reporter * reporter,const char * filename)2146 static void loopEdge1(skiatest::Reporter* reporter, const char* filename) {
2147     SkPath path;
2148     path.setFillType(SkPath::kEvenOdd_FillType);
2149     path.moveTo(0,0);
2150     path.lineTo(3,0);
2151     path.lineTo(3,2);
2152     path.lineTo(1,2);
2153     path.lineTo(1,1);
2154     path.lineTo(2,1);
2155     path.lineTo(2,3);
2156     path.lineTo(0,3);
2157     path.close();
2158     SkPath pathB;
2159     pathB.setFillType(SkPath::kEvenOdd_FillType);
2160     pathB.moveTo(1,2);
2161     pathB.lineTo(2,2);
2162     pathB.lineTo(2,4);
2163     pathB.lineTo(1,4);
2164     pathB.close();
2165     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2166 }
2167 
loopEdge2(skiatest::Reporter * reporter,const char * filename)2168 static void loopEdge2(skiatest::Reporter* reporter, const char* filename) {
2169     SkPath path;
2170     path.setFillType(SkPath::kEvenOdd_FillType);
2171     path.moveTo(0,0);
2172     path.lineTo(3,0);
2173     path.lineTo(3,2);
2174     path.lineTo(1,2);
2175     path.lineTo(1,1);
2176     path.lineTo(2,1);
2177     path.lineTo(2,3);
2178     path.lineTo(0,3);
2179     path.close();
2180     SkPath pathB;
2181     pathB.setFillType(SkPath::kEvenOdd_FillType);
2182     pathB.moveTo(1 - 1e-6f,2);
2183     pathB.lineTo(2 - 1e-6f,2);
2184     pathB.lineTo(2 - 1e-6f,4);
2185     pathB.lineTo(1 - 1e-6f,4);
2186     pathB.close();
2187     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2188 }
2189 
cubicOp86i(skiatest::Reporter * reporter,const char * filename)2190 static void cubicOp86i(skiatest::Reporter* reporter, const char* filename) {
2191     SkPath path, pathB;
2192     path.setFillType(SkPath::kWinding_FillType);
2193     path.moveTo(0, 4);
2194     path.cubicTo(3, 4, 6, 2, 5, 2);
2195     path.close();
2196     pathB.setFillType(SkPath::kEvenOdd_FillType);
2197     pathB.moveTo(2, 6);
2198     pathB.cubicTo(2, 5, 4, 0, 4, 3);
2199     pathB.close();
2200     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2201 }
2202 
cubicOp87u(skiatest::Reporter * reporter,const char * filename)2203 static void cubicOp87u(skiatest::Reporter* reporter, const char* filename) {
2204     SkPath path, pathB;
2205     path.setFillType(SkPath::kWinding_FillType);
2206     path.moveTo(0,1);
2207     path.cubicTo(0,2, 2,0, 6,4);
2208     path.close();
2209     pathB.setFillType(SkPath::kWinding_FillType);
2210     pathB.moveTo(0,2);
2211     pathB.cubicTo(4,6, 1,0, 2,0);
2212     pathB.close();
2213     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2214 }
2215 
cubicOp88u(skiatest::Reporter * reporter,const char * filename)2216 static void cubicOp88u(skiatest::Reporter* reporter, const char* filename) {
2217     SkPath path, pathB;
2218     path.setFillType(SkPath::kWinding_FillType);
2219     path.moveTo(0,1);
2220     path.cubicTo(2,5, 5,0, 6,4);
2221     path.close();
2222     pathB.setFillType(SkPath::kWinding_FillType);
2223     pathB.moveTo(0,5);
2224     pathB.cubicTo(4,6, 1,0, 5,2);
2225     pathB.close();
2226     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2227 }
2228 
cubicOp89u(skiatest::Reporter * reporter,const char * filename)2229 static void cubicOp89u(skiatest::Reporter* reporter, const char* filename) {
2230     SkPath path, pathB;
2231     path.setFillType(SkPath::kWinding_FillType);
2232     path.moveTo(0, 3);
2233     path.cubicTo(1, 6, 5, 0, 6, 3);
2234     path.close();
2235     pathB.setFillType(SkPath::kWinding_FillType);
2236     pathB.moveTo(0, 5);
2237     pathB.cubicTo(3, 6, 3, 0, 6, 1);
2238     pathB.close();
2239     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2240 }
2241 
cubicOp90u(skiatest::Reporter * reporter,const char * filename)2242 static void cubicOp90u(skiatest::Reporter* reporter, const char* filename) {
2243     SkPath path, pathB;
2244     path.setFillType(SkPath::kEvenOdd_FillType);
2245     path.moveTo(0, 5);
2246     path.cubicTo(1, 2, 5, 2, 4, 1);
2247     path.close();
2248     pathB.setFillType(SkPath::kEvenOdd_FillType);
2249     pathB.moveTo(2, 5);
2250     pathB.cubicTo(1, 4, 5, 0, 2, 1);
2251     pathB.close();
2252     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2253 }
2254 
cubicOp91u(skiatest::Reporter * reporter,const char * filename)2255 static void cubicOp91u(skiatest::Reporter* reporter, const char* filename) {
2256     SkPath path, pathB;
2257     path.setFillType(SkPath::kWinding_FillType);
2258     path.moveTo(1, 6);
2259     path.cubicTo(0, 3, 6, 3, 5, 0);
2260     path.close();
2261     pathB.setFillType(SkPath::kWinding_FillType);
2262     pathB.moveTo(3, 6);
2263     pathB.cubicTo(0, 5, 6, 1, 3, 0);
2264     pathB.close();
2265     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2266 }
2267 
skpaaalgarve_org53(skiatest::Reporter * reporter,const char * filename)2268 static void skpaaalgarve_org53(skiatest::Reporter* reporter, const char* filename) {
2269     SkPath path;
2270     path.setFillType(SkPath::kEvenOdd_FillType);
2271    path.moveTo(-1.24344979e-014f, 348);
2272     path.lineTo(258, 348);
2273     path.lineTo(258, 322);
2274     path.quadTo(258, 317.857849f, 255.072006f, 314.928009f);
2275     path.quadTo(252.142136f, 312, 248, 312);
2276     path.lineTo(1.77635684e-015f, 312);
2277     path.lineTo(-1.24344979e-014f, 348);
2278     path.close();
2279     SkPath pathB;
2280     pathB.setFillType(SkPath::kWinding_FillType);
2281    pathB.moveTo(0, 312);
2282     pathB.lineTo(258, 312);
2283     pathB.lineTo(258, 348);
2284     pathB.lineTo(0, 348);
2285     pathB.close();
2286     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2287 }
2288 
skpabcspark_ca103(skiatest::Reporter * reporter,const char * filename)2289 static void skpabcspark_ca103(skiatest::Reporter* reporter, const char* filename) {
2290     SkPath path;
2291     path.setFillType(SkPath::kEvenOdd_FillType);
2292     path.moveTo(1.99840144e-015f, 494);
2293     path.lineTo(97, 494);
2294     path.quadTo(100.313705f, 494, 102.6576f, 491.657593f);
2295     path.quadTo(105, 489.313721f, 105, 486);
2296     path.lineTo(105, 425);
2297     path.quadTo(105, 421.686279f, 102.6576f, 419.342407f);
2298     path.quadTo(100.313705f, 417, 97, 417);
2299     path.lineTo(2.22044605e-016f, 417);
2300     path.lineTo(1.99840144e-015f, 494);
2301     path.close();
2302     SkPath pathB;
2303     pathB.setFillType(SkPath::kWinding_FillType);
2304     pathB.moveTo(0, 417);
2305     pathB.lineTo(105, 417);
2306     pathB.lineTo(105, 494);
2307     pathB.lineTo(0, 494);
2308     pathB.close();
2309     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2310 }
2311 
skpacesoftech_com47(skiatest::Reporter * reporter,const char * filename)2312 static void skpacesoftech_com47(skiatest::Reporter* reporter, const char* filename) {
2313     SkPath path;
2314     path.setFillType(SkPath::kEvenOdd_FillType);
2315     path.moveTo(670.537415f, 285);
2316     path.lineTo(670.387451f, 285);
2317     path.lineTo(596.315186f, 314.850708f);
2318     path.lineTo(626.19696f, 389);
2319     path.lineTo(626.346863f, 389);
2320     path.lineTo(700.419189f, 359.149261f);
2321     path.lineTo(670.537415f, 285);
2322     path.close();
2323     SkPath pathB;
2324     pathB.setFillType(SkPath::kWinding_FillType);
2325     pathB.moveTo(663.318542f, 374.100616f);
2326     pathB.quadTo(647.950989f, 380.293671f, 632.705322f, 373.806305f);
2327     pathB.quadTo(617.459595f, 367.318909f, 611.266541f, 351.951355f);
2328     pathB.quadTo(605.073486f, 336.58374f, 611.560913f, 321.338074f);
2329     pathB.quadTo(618.048279f, 306.092407f, 633.415833f, 299.899353f);
2330     pathB.quadTo(648.783447f, 293.706299f, 664.029114f, 300.193665f);
2331     pathB.quadTo(679.27478f, 306.68103f, 685.467834f, 322.048645f);
2332     pathB.quadTo(691.660889f, 337.416199f, 685.173523f, 352.661896f);
2333     pathB.quadTo(678.686157f, 367.907562f, 663.318542f, 374.100616f);
2334     pathB.close();
2335     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2336 }
2337 
skpact_com43(skiatest::Reporter * reporter,const char * filename)2338 static void skpact_com43(skiatest::Reporter* reporter, const char* filename) {
2339     SkPath path;
2340     path.setFillType(SkPath::kEvenOdd_FillType);
2341     path.moveTo(1.45716772e-016f, 924.336121f);
2342     path.lineTo(-1.11022302e-016f, 920);
2343     path.lineTo(6, 920);
2344     path.lineTo(6, 926);
2345     path.lineTo(1.66389287f, 926);
2346     path.quadTo(1.18842196f, 925.674561f, 0.756800175f, 925.243225f);
2347     path.quadTo(0.325406998f, 924.811523f, 1.45716772e-016f, 924.336121f);
2348     path.close();
2349     path.moveTo(1, 921);
2350     path.lineTo(5, 921);
2351     path.lineTo(5, 925);
2352     path.cubicTo(2.79086018f, 925, 1, 923.209167f, 1, 921);
2353     path.close();
2354     SkPath pathB;
2355     pathB.setFillType(SkPath::kWinding_FillType);
2356     pathB.moveTo(-1, 920);
2357     pathB.lineTo(0, 920);
2358     pathB.lineTo(3, 927);
2359     pathB.lineTo(-1, 927);
2360     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2361 }
2362 
skpadbox_lt8(skiatest::Reporter * reporter,const char * filename)2363 static void skpadbox_lt8(skiatest::Reporter* reporter, const char* filename) {
2364     SkPath path;
2365     path.setFillType(SkPath::kEvenOdd_FillType);
2366     path.moveTo(320.097229f, 628.573669f);
2367     path.lineTo(610.227173f, 85.7786865f);
2368     path.lineTo(946.652588f, 265.601807f);
2369     path.lineTo(656.522644f, 808.39679f);
2370     path.lineTo(320.097229f, 628.573669f);
2371     path.close();
2372     SkPath pathB;
2373     pathB.setFillType(SkPath::kInverseWinding_FillType);
2374     pathB.moveTo(333.866608f, 623.496155f);
2375     pathB.lineTo(613.368042f, 100.585754f);
2376     pathB.cubicTo(613.685303f, 99.9921265f, 614.423767f, 99.7681885f, 615.017395f, 100.085449f);
2377     pathB.lineTo(932.633057f, 269.854553f);
2378     pathB.cubicTo(933.226685f, 270.171875f, 933.450623f, 270.910278f, 933.133301f, 271.503906f);
2379     pathB.lineTo(653.631897f, 794.414307f);
2380     pathB.cubicTo(653.314636f, 795.007935f, 652.576172f, 795.231934f, 651.982544f, 794.914612f);
2381     pathB.lineTo(334.366943f, 625.145508f);
2382     pathB.cubicTo(333.773315f, 624.828247f, 333.549286f, 624.089783f, 333.866608f, 623.496155f);
2383     pathB.close();
2384     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2385 }
2386 
skpadindex_de4(skiatest::Reporter * reporter,const char * filename)2387 static void skpadindex_de4(skiatest::Reporter* reporter, const char* filename) {
2388     SkPath path;
2389     path.setFillType(SkPath::kEvenOdd_FillType);
2390     path.moveTo(0, 926);
2391     path.lineTo(0, 0);
2392     path.lineTo(1280, 0);
2393     path.lineTo(1280, 926);
2394     path.lineTo(0, 926);
2395     path.close();
2396     SkPath pathB;
2397     pathB.setFillType(SkPath::kWinding_FillType);
2398     pathB.moveTo(0, 312);
2399     pathB.lineTo(8.20486257e-015f, 178);
2400     pathB.lineTo(49, 178);
2401     pathB.lineTo(49, 312);
2402     pathB.close();
2403     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2404 }
2405 
skpadithya_putr4_blogspot_com551(skiatest::Reporter * reporter,const char * filename)2406 static void skpadithya_putr4_blogspot_com551(skiatest::Reporter* reporter, const char* filename) {
2407     SkPath path;
2408     path.setFillType(SkPath::kEvenOdd_FillType);
2409     path.moveTo(205.605804f, 142.334625f);
2410     path.lineTo(254.665359f, 85.6058044f);
2411     path.lineTo(311.394196f, 134.665359f);
2412     path.lineTo(262.334625f, 191.39418f);
2413     path.lineTo(205.605804f, 142.334625f);
2414     path.close();
2415     SkPath pathB;
2416     pathB.setFillType(SkPath::kWinding_FillType);
2417     pathB.moveTo(283.407959f, 110.462646f);
2418     pathB.cubicTo(298.864319f, 123.829437f, 300.558258f, 147.195221f, 287.191467f, 162.651581f);
2419     pathB.lineTo(286.537354f, 163.407959f);
2420     pathB.cubicTo(273.170563f, 178.864334f, 249.804779f, 180.558258f, 234.348419f, 167.191467f);
2421     pathB.lineTo(233.592026f, 166.537338f);
2422     pathB.cubicTo(218.135666f, 153.170547f, 216.441727f, 129.804779f, 229.808517f, 114.348412f);
2423     pathB.lineTo(230.462646f, 113.592026f);
2424     pathB.cubicTo(243.829437f, 98.1356659f, 267.195221f, 96.4417267f, 282.651581f, 109.808517f);
2425     pathB.lineTo(283.407959f, 110.462646f);
2426     pathB.close();
2427     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2428 }
2429 
skpadspert_de11(skiatest::Reporter * reporter,const char * filename)2430 static void skpadspert_de11(skiatest::Reporter* reporter, const char* filename) {
2431     SkPath path;
2432     path.setFillType(SkPath::kEvenOdd_FillType);
2433     path.moveTo(-4.4408921e-016f, 682.5f);
2434     path.lineTo(30.5f, 682.5f);
2435     path.cubicTo(32.709137f, 682.5f, 34.5f, 680.709167f, 34.5f, 678.5f);
2436     path.lineTo(34.5f, 486.5f);
2437     path.cubicTo(34.5f, 484.290863f, 32.709137f, 482.5f, 30.5f, 482.5f);
2438     path.lineTo(0, 482.5f);
2439     path.lineTo(-4.4408921e-016f, 682.5f);
2440     path.close();
2441     SkPath pathB;
2442     pathB.setFillType(SkPath::kWinding_FillType);
2443     pathB.moveTo(0, 482);
2444     pathB.lineTo(35, 482);
2445     pathB.lineTo(35, 683);
2446     pathB.lineTo(0, 683);
2447     pathB.close();
2448     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2449 }
2450 
skpaiaigames_com870(skiatest::Reporter * reporter,const char * filename)2451 static void skpaiaigames_com870(skiatest::Reporter* reporter, const char* filename) {
2452     SkPath path;
2453     path.setFillType(SkPath::kEvenOdd_FillType);
2454     path.moveTo(324.071075f, 845.071045f);
2455     path.cubicTo(324.405151f, 844.737f, 324.715668f, 844.379395f, 325, 844.000977f);
2456     path.lineTo(325, 842.127197f);
2457     path.cubicTo(324.571411f, 842.956238f, 324.017761f, 843.710144f, 323.363953f, 844.363953f);
2458     path.lineTo(324.071075f, 845.071045f);
2459     path.close();
2460     path.moveTo(323.363953f, 714.636047f);
2461     path.lineTo(324.071075f, 713.928955f);
2462     path.cubicTo(324.405151f, 714.263f, 324.715668f, 714.620605f, 325, 714.999023f);
2463     path.lineTo(325, 716.872803f);
2464     path.cubicTo(324.571411f, 716.043762f, 324.017761f, 715.289856f, 323.363953f, 714.636047f);
2465     path.close();
2466     SkPath pathB;
2467     pathB.setFillType(SkPath::kWinding_FillType);
2468     pathB.moveTo(317, 711);
2469     pathB.cubicTo(322.522858f, 711, 327, 715.477173f, 327, 721);
2470     pathB.lineTo(327, 838);
2471     pathB.cubicTo(327, 843.522827f, 322.522858f, 848, 317, 848);
2472     pathB.lineTo(155, 848);
2473     pathB.cubicTo(149.477158f, 848, 145, 843.522827f, 145, 838);
2474     pathB.lineTo(145, 721);
2475     pathB.cubicTo(145, 715.477173f, 149.477158f, 711, 155, 711);
2476     pathB.lineTo(317, 711);
2477     pathB.close();
2478     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2479 }
2480 
cubicOp92i(skiatest::Reporter * reporter,const char * filename)2481 static void cubicOp92i(skiatest::Reporter* reporter, const char* filename) {
2482     SkPath path, pathB;
2483     path.setFillType(SkPath::kWinding_FillType);
2484     path.moveTo(0, 1);
2485     path.cubicTo(2, 6, 4, 1, 5, 4);
2486     path.close();
2487     pathB.setFillType(SkPath::kWinding_FillType);
2488     pathB.moveTo(1, 4);
2489     pathB.cubicTo(4, 5, 1, 0, 6, 2);
2490     pathB.close();
2491     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2492 }
2493 
cubicOp93d(skiatest::Reporter * reporter,const char * filename)2494 static void cubicOp93d(skiatest::Reporter* reporter, const char* filename) {
2495     SkPath path, pathB;
2496     path.setFillType(SkPath::kWinding_FillType);
2497     path.moveTo(0, 1);
2498     path.cubicTo(1, 6, 4, 1, 4, 3);
2499     path.close();
2500     pathB.setFillType(SkPath::kWinding_FillType);
2501     pathB.moveTo(1, 4);
2502     pathB.cubicTo(3, 4, 1, 0, 6, 1);
2503     pathB.close();
2504     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
2505 }
2506 
cubicOp94u(skiatest::Reporter * reporter,const char * filename)2507 static void cubicOp94u(skiatest::Reporter* reporter, const char* filename) {
2508     SkPath path, pathB;
2509     path.setFillType(SkPath::kEvenOdd_FillType);
2510     path.moveTo(0, 3);
2511     path.cubicTo(2, 3, 5, 0, 5, 3);
2512     path.close();
2513     pathB.setFillType(SkPath::kEvenOdd_FillType);
2514     pathB.moveTo(0, 5);
2515     pathB.cubicTo(3, 5, 3, 0, 3, 2);
2516     pathB.close();
2517     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2518 }
2519 
skpadbox_lt15(skiatest::Reporter * reporter,const char * filename)2520 static void skpadbox_lt15(skiatest::Reporter* reporter, const char* filename) {
2521     SkPath path;
2522     path.setFillType(SkPath::kEvenOdd_FillType);
2523     path.moveTo(333.292084f, 624.570984f);
2524     path.lineTo(614.229797f, 98.9735107f);
2525     path.lineTo(933.457764f, 269.604431f);
2526     path.lineTo(652.52002f, 795.201904f);
2527     path.lineTo(333.292084f, 624.570984f);
2528     path.close();
2529     SkPath pathB;
2530      pathB.setFillType(SkPath::kWinding_FillType);
2531     pathB.moveTo(613.368042f, 100.585754f);
2532     pathB.cubicTo(613.685303f, 99.9921265f, 614.423767f, 99.7681885f, 615.017395f, 100.085449f);
2533     pathB.lineTo(932.633057f, 269.854553f);
2534     pathB.cubicTo(933.226685f, 270.171875f, 933.450623f, 270.910278f, 933.133301f, 271.503906f);
2535     pathB.lineTo(653.631897f, 794.414307f);
2536     pathB.cubicTo(653.314636f, 795.007935f, 652.576172f, 795.231934f, 651.982544f, 794.914612f);
2537     pathB.lineTo(334.366943f, 625.145508f);
2538     pathB.cubicTo(333.773315f, 624.828247f, 333.549286f, 624.089783f, 333.866608f, 623.496155f);
2539     pathB.lineTo(613.368042f, 100.585754f);
2540      pathB.close();
2541     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2542 }
2543 
skpadoption_org196(skiatest::Reporter * reporter,const char * filename)2544 static void skpadoption_org196(skiatest::Reporter* reporter, const char* filename) {
2545     SkPath path;
2546     path.setFillType(SkPath::kEvenOdd_FillType);
2547     path.moveTo(802, 367);
2548     path.lineTo(802, 324);
2549     path.lineTo(956, 324);
2550     path.lineTo(956, 371);
2551     path.quadTo(956, 373.071075f, 954.536011f, 374.536011f);
2552     path.quadTo(953.071045f, 376, 951, 376);
2553     path.lineTo(811, 376);
2554     path.cubicTo(806.029419f, 376, 802, 371.970551f, 802, 367);
2555     path.close();
2556     SkPath pathB;
2557     pathB.setFillType(SkPath::kInverseWinding_FillType);
2558     pathB.moveTo(803, 326);
2559     pathB.lineTo(955, 326);
2560     pathB.lineTo(955, 370);
2561     pathB.cubicTo(955, 372.761414f, 952.761414f, 375, 950, 375);
2562     pathB.lineTo(808, 375);
2563     pathB.cubicTo(805.238586f, 375, 803, 372.761414f, 803, 370);
2564     pathB.lineTo(803, 326);
2565     pathB.close();
2566     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2567 }
2568 
skpadspert_net23(skiatest::Reporter * reporter,const char * filename)2569 static void skpadspert_net23(skiatest::Reporter* reporter, const char* filename) {
2570     SkPath path;
2571     path.setFillType(SkPath::kEvenOdd_FillType);
2572     path.moveTo(-2.220446e-018f, 483.5f);
2573     path.lineTo(0, 482.5f);
2574     path.lineTo(30.5f, 482.5f);
2575     path.cubicTo(32.709137f, 482.5f, 34.5f, 484.290863f, 34.5f, 486.5f);
2576     path.lineTo(34.5f, 678.5f);
2577     path.cubicTo(34.5f, 680.709167f, 32.709137f, 682.5f, 30.5f, 682.5f);
2578     path.lineTo(-4.4408921e-016f, 682.5f);
2579     path.lineTo(-4.41868766e-016f, 681.5f);
2580     path.lineTo(30.5f, 681.5f);
2581     path.cubicTo(32.1568565f, 681.5f, 33.5f, 680.15686f, 33.5f, 678.5f);
2582     path.lineTo(33.5f, 486.5f);
2583     path.cubicTo(33.5f, 484.84314f, 32.1568565f, 483.5f, 30.5f, 483.5f);
2584     path.lineTo(-2.220446e-018f, 483.5f);
2585     path.close();
2586     SkPath pathB;
2587     pathB.setFillType(SkPath::kWinding_FillType);
2588     pathB.moveTo(0, 482);
2589     pathB.lineTo(35, 482);
2590     pathB.lineTo(35, 683);
2591     pathB.lineTo(0, 683);
2592     pathB.close();
2593     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2594 }
2595 
skpadventistmission_org572(skiatest::Reporter * reporter,const char * filename)2596 static void skpadventistmission_org572(skiatest::Reporter* reporter, const char* filename) {
2597     SkPath path;
2598     path.setFillType(SkPath::kEvenOdd_FillType);
2599     path.moveTo(1182.00037f, 926);
2600     path.cubicTo(1181.08813f, 924.785583f, 1179.63586f, 924, 1178, 924);
2601     path.lineTo(938, 924);
2602     path.cubicTo(936.364197f, 924, 934.911865f, 924.785583f, 933.999634f, 926);
2603     path.lineTo(1182.00037f, 926);
2604     path.close();
2605     SkPath pathB;
2606     pathB.setFillType(SkPath::kWinding_FillType);
2607     pathB.moveTo(934, 924);
2608     pathB.lineTo(1182, 924);
2609     pathB.lineTo(1182, 926);
2610     pathB.lineTo(934, 926);
2611     pathB.close();
2612     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2613 }
2614 
skpagentxsites_com55(skiatest::Reporter * reporter,const char * filename)2615 static void skpagentxsites_com55(skiatest::Reporter* reporter, const char* filename) {
2616     SkPath path;
2617     path.setFillType(SkPath::kEvenOdd_FillType);
2618     path.moveTo(925, 27);
2619     path.cubicTo(924.447693f, 27, 924, 27.4477158f, 924, 28);
2620     path.lineTo(924, 55);
2621     path.cubicTo(924, 55.5522842f, 924.447693f, 56, 925, 56);
2622     path.lineTo(1103, 56);
2623     path.cubicTo(1103.55225f, 56, 1104, 55.5522842f, 1104, 55);
2624     path.lineTo(1104, 28);
2625     path.cubicTo(1104, 27.4477158f, 1103.55225f, 27, 1103, 27);
2626     path.lineTo(925, 27);
2627     path.close();
2628     SkPath pathB;
2629     pathB.setFillType(SkPath::kWinding_FillType);
2630     pathB.moveTo(1103, 27);
2631     pathB.cubicTo(1104.10461f, 27, 1105, 27.8954315f, 1105, 29);
2632     pathB.lineTo(1105, 54);
2633     pathB.cubicTo(1105, 55.1045685f, 1104.10461f, 56, 1103, 56);
2634     pathB.lineTo(926, 56);
2635     pathB.cubicTo(924.895447f, 56, 924, 55.1045685f, 924, 54);
2636     pathB.lineTo(924, 29);
2637     pathB.cubicTo(924, 27.8954315f, 924.895447f, 27, 926, 27);
2638     pathB.lineTo(1103, 27);
2639     pathB.close();
2640     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2641 }
2642 
skpbakosoft_com10(skiatest::Reporter * reporter,const char * filename)2643 static void skpbakosoft_com10(skiatest::Reporter* reporter, const char* filename) {
2644     SkPath path;
2645     path.setFillType(SkPath::kEvenOdd_FillType);
2646     path.moveTo(190, 170);
2647     path.cubicTo(178.9543f, 170, 170, 178.9543f, 170, 190);
2648     path.cubicTo(170, 201.0457f, 178.9543f, 210, 190, 210);
2649     path.lineTo(370, 210);
2650     path.cubicTo(381.045685f, 210, 390, 201.0457f, 390, 190);
2651     path.cubicTo(390, 178.9543f, 381.045685f, 170, 370, 170);
2652     path.lineTo(190, 170);
2653     path.close();
2654     SkPath pathB;
2655     pathB.setFillType(SkPath::kWinding_FillType);
2656     pathB.moveTo(210, 190);
2657     pathB.quadTo(210, 198.284271f, 204.142136f, 204.142136f);
2658     pathB.quadTo(198.284271f, 210, 190, 210);
2659     pathB.quadTo(181.715729f, 210, 175.857864f, 204.142136f);
2660     pathB.quadTo(170, 198.284271f, 170, 190);
2661     pathB.quadTo(170, 181.715729f, 175.857864f, 175.857864f);
2662     pathB.quadTo(181.715729f, 170, 190, 170);
2663     pathB.quadTo(198.284271f, 170, 204.142136f, 175.857864f);
2664     pathB.quadTo(210, 181.715729f, 210, 190);
2665     pathB.close();
2666     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2667 }
2668 
skpbambootheme_com12(skiatest::Reporter * reporter,const char * filename)2669 static void skpbambootheme_com12(skiatest::Reporter* reporter, const char* filename) {
2670     SkPath path;
2671     path.setFillType(SkPath::kEvenOdd_FillType);
2672     path.moveTo(47.8780937f, 58);
2673     path.lineTo(0, 58);
2674     path.lineTo(-8.65973959e-015f, 96.9914017f);
2675     path.quadTo(20.0654926f, 96.6451874f, 34.3553391f, 82.3553391f);
2676     path.quadTo(44.9466133f, 71.764061f, 47.8780937f, 58);
2677     path.close();
2678     SkPath pathB;
2679     pathB.setFillType(SkPath::kEvenOdd_FillType);
2680     pathB.moveTo(-1, -3);
2681     pathB.lineTo(-1, -3);
2682     pathB.cubicTo(26.6142502f, -3, 49, 19.3857498f, 49, 47);
2683     pathB.lineTo(49, 47);
2684     pathB.cubicTo(49, 74.6142502f, 26.6142502f, 97, -1, 97);
2685     pathB.lineTo(-1, 97);
2686     pathB.cubicTo(-28.6142502f, 97, -51, 74.6142502f, -51, 47);
2687     pathB.lineTo(-51, 47);
2688     pathB.cubicTo(-51, 19.3857498f, -28.6142502f, -3, -1, -3);
2689     pathB.close();
2690     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2691 }
2692 
skpakmmos_ru100(skiatest::Reporter * reporter,const char * filename)2693 static void skpakmmos_ru100(skiatest::Reporter* reporter, const char* filename) {
2694     SkPath path;
2695     path.setFillType(SkPath::kEvenOdd_FillType);
2696     path.moveTo(693.000488f, 926);
2697     path.cubicTo(692.164734f, 925.37207f, 691.125793f, 925, 690, 925);
2698     path.lineTo(578, 925);
2699     path.cubicTo(576.874207f, 925, 575.835266f, 925.37207f, 574.999512f, 926);
2700     path.lineTo(693.000488f, 926);
2701     path.close();
2702     SkPath pathB;
2703     pathB.setFillType(SkPath::kWinding_FillType);
2704     pathB.moveTo(575, 925);
2705     pathB.lineTo(693, 925);
2706     pathB.lineTo(693, 926);
2707     pathB.lineTo(575, 926);
2708     pathB.close();
2709     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2710 }
2711 
skpcarpetplanet_ru22(skiatest::Reporter * reporter,const char * filename)2712 static void skpcarpetplanet_ru22(skiatest::Reporter* reporter, const char* filename) {
2713     SkPath path;
2714     path.setFillType(SkPath::kEvenOdd_FillType);
2715     path.moveTo(195, 785);
2716     path.cubicTo(124.307556f, 785, 67, 841.859863f, 67, 912);
2717     path.lineTo(67, 913);
2718     path.cubicTo(67, 917.388916f, 67.2243805f, 921.725769f, 67.662384f, 926);
2719     path.lineTo(322, 926);
2720     path.lineTo(322, 896.048035f);
2721     path.cubicTo(314.09201f, 833.437622f, 260.247131f, 785, 195, 785);
2722     path.close();
2723     SkPath pathB;
2724     pathB.setFillType(SkPath::kWinding_FillType);
2725     pathB.moveTo(195, 785);
2726     pathB.cubicTo(265.140167f, 785, 322, 842.307556f, 322, 913);
2727     pathB.cubicTo(322, 983.692444f, 265.140167f, 1041, 195, 1041);
2728     pathB.lineTo(194, 1041);
2729     pathB.cubicTo(123.85984f, 1041, 67, 983.692444f, 67, 913);
2730     pathB.cubicTo(67, 842.307556f, 123.85984f, 785, 194, 785);
2731     pathB.lineTo(195, 785);
2732     pathB.close();
2733     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2734 }
2735 
skpcarrot_is24(skiatest::Reporter * reporter,const char * filename)2736 static void skpcarrot_is24(skiatest::Reporter* reporter, const char* filename) {
2737     SkPath path;
2738     path.setFillType(SkPath::kEvenOdd_FillType);
2739     path.moveTo(945, 597);
2740     path.quadTo(913.93396f, 597, 891.96698f, 618.96698f);
2741     path.quadTo(870, 640.93396f, 870, 672);
2742     path.quadTo(870, 703.06604f, 891.96698f, 725.03302f);
2743     path.quadTo(913.93396f, 747, 945, 747);
2744     path.quadTo(976.06604f, 747, 998.03302f, 725.03302f);
2745     path.quadTo(1020, 703.06604f, 1020, 672);
2746     path.quadTo(1020, 640.93396f, 998.03302f, 618.96698f);
2747     path.quadTo(976.06604f, 597, 945, 597);
2748     path.close();
2749     SkPath pathB;
2750     pathB.setFillType(SkPath::kWinding_FillType);
2751     pathB.moveTo(945.080994f, 597.161987f);
2752     pathB.cubicTo(903.659973f, 597.161987f, 870.080994f, 630.73999f, 870.080994f, 672.161987f);
2753     pathB.cubicTo(870.080994f, 676.096008f, 870.387024f, 679.957031f, 870.971008f, 683.726013f);
2754     pathB.cubicTo(876.53302f, 719.656006f, 907.593994f, 747.161987f, 945.080994f, 747.161987f);
2755     pathB.cubicTo(982.567993f, 747.161987f, 1013.62903f, 719.656006f, 1019.19104f, 683.726013f);
2756     pathB.cubicTo(1019.77502f, 679.955017f, 1020.08099f, 676.094971f, 1020.08099f, 672.161987f);
2757     pathB.cubicTo(1020.08002f, 630.73999f, 986.502014f, 597.161987f, 945.080994f, 597.161987f);
2758     pathB.close();
2759     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2760 }
2761 
skpbangalorenest_com4(skiatest::Reporter * reporter,const char * filename)2762 static void skpbangalorenest_com4(skiatest::Reporter* reporter, const char* filename) {
2763     SkPath path;
2764     path.setFillType(SkPath::kEvenOdd_FillType);
2765     path.moveTo(0, 926);
2766     path.lineTo(0, 0);
2767     path.lineTo(1265, 0);
2768     path.lineTo(1265, 926);
2769     path.lineTo(0, 926);
2770     path.close();
2771     SkPath pathB;
2772     pathB.setFillType(SkPath::kWinding_FillType);
2773     pathB.moveTo(0, 290);
2774     pathB.lineTo(-2.64514972e-014f, 146);
2775     pathB.lineTo(30, 146);
2776     pathB.lineTo(30, 290);
2777     pathB.close();
2778     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2779 }
2780 
skpbenzoteh_ru152(skiatest::Reporter * reporter,const char * filename)2781 static void skpbenzoteh_ru152(skiatest::Reporter* reporter, const char* filename) {
2782     SkPath path;
2783     path.setFillType(SkPath::kEvenOdd_FillType);
2784     path.moveTo(883, 23);
2785     path.lineTo(883, 0);
2786     path.lineTo(1122.5f, 0);
2787     path.lineTo(1122.5f, 25.2136822f);
2788     path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2789     path.quadTo(1120.07104f, 28, 1118, 28);
2790     path.lineTo(888, 28);
2791     path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2792     path.quadTo(883, 25.0710678f, 883, 23);
2793     path.close();
2794     SkPath pathB;
2795     pathB.setFillType(SkPath::kWinding_FillType);
2796     pathB.moveTo(883, 0);
2797     pathB.lineTo(1123, 0);
2798     pathB.lineTo(1123, 23);
2799     pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2800     pathB.quadTo(1120.07104f, 28, 1118, 28);
2801     pathB.lineTo(888, 28);
2802     pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2803     pathB.quadTo(883, 25.0710678f, 883, 23);
2804     pathB.close();
2805     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2806 }
2807 
skpbestred_ru37(skiatest::Reporter * reporter,const char * filename)2808 static void skpbestred_ru37(skiatest::Reporter* reporter, const char* filename) {
2809     SkPath path;
2810     path.setFillType(SkPath::kEvenOdd_FillType);
2811     path.moveTo(883, 23);
2812     path.lineTo(883, 0);
2813     path.lineTo(1122.5f, 0);
2814     path.lineTo(1122.5f, 25.2136822f);
2815     path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2816     path.quadTo(1120.07104f, 28, 1118, 28);
2817     path.lineTo(888, 28);
2818     path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2819     path.quadTo(883, 25.0710678f, 883, 23);
2820     path.close();
2821     SkPath pathB;
2822     pathB.setFillType(SkPath::kWinding_FillType);
2823     pathB.moveTo(883, 0);
2824     pathB.lineTo(1123, 0);
2825     pathB.lineTo(1123, 23);
2826     pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2827     pathB.quadTo(1120.07104f, 28, 1118, 28);
2828     pathB.lineTo(888, 28);
2829     pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2830     pathB.quadTo(883, 25.0710678f, 883, 23);
2831     pathB.close();
2832     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2833 }
2834 
skpbingoentertainment_net189(skiatest::Reporter * reporter,const char * filename)2835 static void skpbingoentertainment_net189(skiatest::Reporter* reporter, const char* filename) {
2836     SkPath path;
2837     path.setFillType(SkPath::kEvenOdd_FillType);
2838     path.moveTo(896, 745.38678f);
2839     path.lineTo(896, 873.38678f);
2840     path.lineTo(922.567993f, 876.683716f);
2841     path.lineTo(922.567993f, 748.683716f);
2842     path.lineTo(896, 745.38678f);
2843     path.close();
2844     SkPath pathB;
2845     pathB.setFillType(SkPath::kWinding_FillType);
2846     pathB.moveTo(899.200928f, 745.783997f);
2847     pathB.cubicTo(897.119385f, 745.525696f, 895.432007f, 752.031982f, 895.432007f, 760.316284f);
2848     pathB.lineTo(895.432007f, 858.316284f);
2849     pathB.cubicTo(895.432007f, 866.600586f, 897.119385f, 873.525696f, 899.200928f, 873.783997f);
2850     pathB.lineTo(918.799133f, 876.216003f);
2851     pathB.cubicTo(920.880615f, 876.474304f, 922.567993f, 869.968018f, 922.567993f, 861.683716f);
2852     pathB.lineTo(922.567993f, 763.683716f);
2853     pathB.cubicTo(922.567993f, 755.399414f, 920.880615f, 748.474304f, 918.799133f, 748.216003f);
2854     pathB.lineTo(899.200928f, 745.783997f);
2855     pathB.close();
2856     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2857 }
2858 
skpcarrefour_ro62(skiatest::Reporter * reporter,const char * filename)2859 static void skpcarrefour_ro62(skiatest::Reporter* reporter, const char* filename) {
2860     SkPath path;
2861     path.setFillType(SkPath::kEvenOdd_FillType);
2862     path.moveTo(1104, 453);
2863     path.lineTo(399, 453);
2864     path.lineTo(399, 657);
2865     path.cubicTo(399, 661.970581f, 403.029449f, 666, 408, 666);
2866     path.lineTo(1095, 666);
2867     path.cubicTo(1099.97058f, 666, 1104, 661.970581f, 1104, 657);
2868     path.lineTo(1104, 453);
2869     path.close();
2870     SkPath pathB;
2871     pathB.setFillType(SkPath::kInverseWinding_FillType);
2872     pathB.moveTo(400, 453);
2873     pathB.lineTo(1103, 453);
2874     pathB.lineTo(1103, 666);
2875     pathB.lineTo(406, 666);
2876     pathB.cubicTo(402.686279f, 666, 400, 663.313721f, 400, 660);
2877     pathB.lineTo(400, 453);
2878     pathB.close();
2879     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2880 }
2881 
skpcaffelavazzait_com_ua21(skiatest::Reporter * reporter,const char * filename)2882 static void skpcaffelavazzait_com_ua21(skiatest::Reporter* reporter, const char* filename) {
2883     SkPath path;
2884     path.setFillType(SkPath::kEvenOdd_FillType);
2885     path.moveTo(883, 23);
2886     path.lineTo(883, 0);
2887     path.lineTo(1122.5f, 0);
2888     path.lineTo(1122.5f, 25.2136822f);
2889     path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2890     path.quadTo(1120.07104f, 28, 1118, 28);
2891     path.lineTo(888, 28);
2892     path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2893     path.quadTo(883, 25.0710678f, 883, 23);
2894     path.close();
2895     SkPath pathB;
2896     pathB.setFillType(SkPath::kWinding_FillType);
2897     pathB.moveTo(883, 0);
2898     pathB.lineTo(1123, 0);
2899     pathB.lineTo(1123, 23);
2900     pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2901     pathB.quadTo(1120.07104f, 28, 1118, 28);
2902     pathB.lineTo(888, 28);
2903     pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2904     pathB.quadTo(883, 25.0710678f, 883, 23);
2905     pathB.close();
2906     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2907 }
2908 
skpcamcorder_kz21(skiatest::Reporter * reporter,const char * filename)2909 static void skpcamcorder_kz21(skiatest::Reporter* reporter, const char* filename) {
2910     SkPath path;
2911     path.setFillType(SkPath::kEvenOdd_FillType);
2912     path.moveTo(883, 23);
2913     path.lineTo(883, 0);
2914     path.lineTo(1122.5f, 0);
2915     path.lineTo(1122.5f, 25.2136822f);
2916     path.quadTo(1122.14441f, 25.9271851f, 1121.53601f, 26.5359993f);
2917     path.quadTo(1120.07104f, 28, 1118, 28);
2918     path.lineTo(888, 28);
2919     path.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2920     path.quadTo(883, 25.0710678f, 883, 23);
2921     path.close();
2922     SkPath pathB;
2923     pathB.setFillType(SkPath::kWinding_FillType);
2924     pathB.moveTo(883, 0);
2925     pathB.lineTo(1123, 0);
2926     pathB.lineTo(1123, 23);
2927     pathB.quadTo(1123, 25.0710678f, 1121.53601f, 26.5359993f);
2928     pathB.quadTo(1120.07104f, 28, 1118, 28);
2929     pathB.lineTo(888, 28);
2930     pathB.quadTo(885.928955f, 28, 884.463989f, 26.5359993f);
2931     pathB.quadTo(883, 25.0710678f, 883, 23);
2932     pathB.close();
2933     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2934 }
2935 
skpcavablar_net563(skiatest::Reporter * reporter,const char * filename)2936 static void skpcavablar_net563(skiatest::Reporter* reporter, const char* filename) {
2937     SkPath path;
2938     path.setFillType(SkPath::kEvenOdd_FillType);
2939     path.moveTo(160.000488f, 918);
2940     path.cubicTo(159.164749f, 917.37207f, 158.125824f, 917, 157, 917);
2941     path.lineTo(94, 917);
2942     path.cubicTo(92.874176f, 917, 91.8352661f, 917.37207f, 90.9995193f, 918);
2943     path.lineTo(160.000488f, 918);
2944     path.close();
2945     SkPath pathB;
2946     pathB.setFillType(SkPath::kWinding_FillType);
2947     pathB.moveTo(91, 917);
2948     pathB.lineTo(160, 917);
2949     pathB.lineTo(160, 918);
2950     pathB.lineTo(91, 918);
2951     pathB.close();
2952     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2953 }
2954 
skpinsomnia_gr72(skiatest::Reporter * reporter,const char * filename)2955 static void skpinsomnia_gr72(skiatest::Reporter* reporter, const char* filename) {
2956     SkPath path;
2957     path.setFillType(SkPath::kEvenOdd_FillType);
2958     path.moveTo(1138, 231);
2959     path.lineTo(1137, 243.625748f);
2960     path.lineTo(1137, 926);
2961     path.lineTo(1139, 926);
2962     path.lineTo(1139, 231);
2963     path.lineTo(1138, 231);
2964     path.close();
2965     SkPath pathB;
2966     pathB.setFillType(SkPath::kWinding_FillType);
2967     pathB.moveTo(1139, 231);
2968     pathB.lineTo(1138, 231);
2969     pathB.lineTo(633, 6101);
2970     pathB.lineTo(1139, 6607);
2971     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
2972 }
2973 
cubicOp95u(skiatest::Reporter * reporter,const char * filename)2974 static void cubicOp95u(skiatest::Reporter* reporter, const char* filename) {
2975     SkPath path, pathB;
2976     path.setFillType(SkPath::kEvenOdd_FillType);
2977     path.moveTo(0, 2);
2978     path.cubicTo(2, 3, 5, 1, 3, 2);
2979     path.close();
2980     pathB.setFillType(SkPath::kEvenOdd_FillType);
2981     pathB.moveTo(1, 5);
2982     pathB.cubicTo(2, 3, 2, 0, 3, 2);
2983     pathB.close();
2984     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
2985 }
2986 
cubicOp96d(skiatest::Reporter * reporter,const char * filename)2987 static void cubicOp96d(skiatest::Reporter* reporter, const char* filename) {
2988     SkPath path, pathB;
2989     path.setFillType(SkPath::kEvenOdd_FillType);
2990     path.moveTo(1, 6);
2991     path.cubicTo(0, 3, 6, 3, 5, 0);
2992     path.close();
2993     pathB.setFillType(SkPath::kEvenOdd_FillType);
2994     pathB.moveTo(3, 6);
2995     pathB.cubicTo(0, 5, 6, 1, 3, 0);
2996     pathB.close();
2997     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
2998 }
2999 
cubicOp97x(skiatest::Reporter * reporter,const char * filename)3000 static void cubicOp97x(skiatest::Reporter* reporter, const char* filename) {
3001     SkPath path, pathB;
3002     path.setFillType(SkPath::kEvenOdd_FillType);
3003     path.moveTo(0, 2);
3004     path.cubicTo(0, 6, 2, 1, 2, 1);
3005     path.close();
3006     pathB.setFillType(SkPath::kEvenOdd_FillType);
3007     pathB.moveTo(1, 2);
3008     pathB.cubicTo(1, 2, 2, 0, 6, 0);
3009     pathB.close();
3010     testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
3011 }
3012 
cubicOp98x(skiatest::Reporter * reporter,const char * filename)3013 static void cubicOp98x(skiatest::Reporter* reporter, const char* filename) {
3014     SkPath path, pathB;
3015     path.setFillType(SkPath::kEvenOdd_FillType);
3016     path.moveTo(0, 3);
3017     path.cubicTo(3, 6, 4, 1, 6, 3);
3018     path.close();
3019     pathB.setFillType(SkPath::kEvenOdd_FillType);
3020     pathB.moveTo(1, 4);
3021     pathB.cubicTo(3, 6, 3, 0, 6, 3);
3022     pathB.close();
3023     testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
3024 }
3025 
cubicOp99(skiatest::Reporter * reporter,const char * filename)3026 static void cubicOp99(skiatest::Reporter* reporter, const char* filename) {
3027     SkPath path, pathB;
3028     path.setFillType(SkPath::kWinding_FillType);
3029     path.moveTo(3,6);
3030     path.cubicTo(0,3, 6,5, 5,4);
3031     path.close();
3032     pathB.setFillType(SkPath::kWinding_FillType);
3033     pathB.moveTo(5,6);
3034     pathB.cubicTo(4,5, 6,3, 3,0);
3035     pathB.close();
3036     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3037 }
3038 
cubicOp100(skiatest::Reporter * reporter,const char * filename)3039 static void cubicOp100(skiatest::Reporter* reporter, const char* filename) {
3040     SkPath path, pathB;
3041     path.setFillType(SkPath::kWinding_FillType);
3042     path.moveTo(0,1);
3043     path.cubicTo(0,2, 2,1, 4,2);
3044     path.close();
3045     pathB.setFillType(SkPath::kWinding_FillType);
3046     pathB.moveTo(1,2);
3047     pathB.cubicTo(2,4, 1,0, 2,0);
3048     pathB.close();
3049     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3050 }
3051 
cubicOp101(skiatest::Reporter * reporter,const char * filename)3052 static void cubicOp101(skiatest::Reporter* reporter, const char* filename) {
3053     SkPath path, pathB;
3054     path.setFillType(SkPath::kWinding_FillType);
3055     path.moveTo(0, 1);
3056     path.cubicTo(2, 3, 2, 1, 5, 3);
3057     path.close();
3058     pathB.setFillType(SkPath::kWinding_FillType);
3059     pathB.moveTo(1, 2);
3060     pathB.cubicTo(3, 5, 1, 0, 3, 2);
3061     pathB.close();
3062     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3063 }
3064 
cubicOp102(skiatest::Reporter * reporter,const char * filename)3065 static void cubicOp102(skiatest::Reporter* reporter, const char* filename) {
3066     SkPath path, pathB;
3067     path.setFillType(SkPath::kWinding_FillType);
3068     path.moveTo(0,1);
3069     path.cubicTo(1,2, 1,0, 3,0);
3070     path.close();
3071     pathB.setFillType(SkPath::kWinding_FillType);
3072     pathB.moveTo(0,1);
3073     pathB.cubicTo(0,3, 1,0, 2,1);
3074     pathB.close();
3075     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3076 }
3077 
cubicOp103(skiatest::Reporter * reporter,const char * filename)3078 static void cubicOp103(skiatest::Reporter* reporter, const char* filename) {
3079     SkPath path, pathB;
3080     path.setFillType(SkPath::kWinding_FillType);
3081     path.moveTo(0,1);
3082     path.cubicTo(1,5, 2,0, 2,1);
3083     path.close();
3084     pathB.setFillType(SkPath::kWinding_FillType);
3085     pathB.moveTo(0,2);
3086     pathB.cubicTo(1,2, 1,0, 5,1);
3087     pathB.close();
3088     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3089 }
3090 
cubicOp104(skiatest::Reporter * reporter,const char * filename)3091 static void cubicOp104(skiatest::Reporter* reporter, const char* filename) {
3092     SkPath path, pathB;
3093     path.setFillType(SkPath::kWinding_FillType);
3094     path.moveTo(0,1);
3095     path.cubicTo(0,6, 4,0, 6,1);
3096     path.close();
3097     pathB.setFillType(SkPath::kWinding_FillType);
3098     pathB.moveTo(0,4);
3099     pathB.cubicTo(1,6, 1,0, 6,0);
3100     pathB.close();
3101     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3102 }
3103 
cubicOp105(skiatest::Reporter * reporter,const char * filename)3104 static void cubicOp105(skiatest::Reporter* reporter, const char* filename) {
3105     SkPath path, pathB;
3106     path.setFillType(SkPath::kWinding_FillType);
3107     path.moveTo(0,1);
3108     path.cubicTo(0,4, 6,5, 2,0);
3109     path.close();
3110     pathB.setFillType(SkPath::kWinding_FillType);
3111     pathB.moveTo(5,6);
3112     pathB.cubicTo(0,2, 1,0, 4,0);
3113     pathB.close();
3114     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3115 }
3116 
cubicOp106(skiatest::Reporter * reporter,const char * filename)3117 static void cubicOp106(skiatest::Reporter* reporter, const char* filename) {
3118     SkPath path, pathB;
3119     path.setFillType(SkPath::kWinding_FillType);
3120     path.moveTo(0, 1);
3121     path.cubicTo(4, 6, 2, 1, 2, 0);
3122     path.close();
3123     pathB.setFillType(SkPath::kWinding_FillType);
3124     pathB.moveTo(1, 2);
3125     pathB.cubicTo(0, 2, 1, 0, 6, 4);
3126     pathB.close();
3127     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3128 }
3129 
cubicOp107(skiatest::Reporter * reporter,const char * filename)3130 static void cubicOp107(skiatest::Reporter* reporter, const char* filename) {
3131     SkPath path, pathB;
3132     path.setFillType(SkPath::kWinding_FillType);
3133     path.moveTo(0, 1);
3134     path.cubicTo(4, 6, 2, 1, 2, 0);
3135     path.close();
3136     pathB.setFillType(SkPath::kWinding_FillType);
3137     pathB.moveTo(1, 2);
3138     pathB.cubicTo(0, 2, 1, 0, 6, 4);
3139     pathB.close();
3140     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3141 }
3142 
cubicOp108(skiatest::Reporter * reporter,const char * filename)3143 static void cubicOp108(skiatest::Reporter* reporter, const char* filename) {
3144     SkPath path, pathB;
3145     path.setFillType(SkPath::kWinding_FillType);
3146     path.moveTo(0, 1);
3147     path.cubicTo(4, 6, 2, 1, 2, 0);
3148     path.close();
3149     pathB.setFillType(SkPath::kWinding_FillType);
3150     pathB.moveTo(1, 2);
3151     pathB.cubicTo(0, 2, 1, 0, 6, 4);
3152     pathB.close();
3153     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
3154 }
3155 
cubicOp109(skiatest::Reporter * reporter,const char * filename)3156 static void cubicOp109(skiatest::Reporter* reporter, const char* filename) {
3157     SkPath path, pathB;
3158     path.setFillType(SkPath::kWinding_FillType);
3159     path.moveTo(0,1);
3160     path.cubicTo(4,5, 6,3, 5,4);
3161     path.close();
3162     pathB.setFillType(SkPath::kWinding_FillType);
3163     pathB.moveTo(3,6);
3164     pathB.cubicTo(4,5, 1,0, 5,4);
3165     pathB.close();
3166     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3167 }
3168 
cubicOp110(skiatest::Reporter * reporter,const char * filename)3169 static void cubicOp110(skiatest::Reporter* reporter, const char* filename) {
3170     SkPath path, pathB;
3171     path.setFillType(SkPath::kEvenOdd_FillType);
3172     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
3173     path.addRect(0, 0, 4, 4, SkPath::kCW_Direction);
3174     pathB.setFillType(SkPath::kEvenOdd_FillType);
3175     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3176     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3177     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3178 }
3179 
cubicOp111(skiatest::Reporter * reporter,const char * filename)3180 static void cubicOp111(skiatest::Reporter* reporter, const char* filename) {
3181     SkPath path, pathB;
3182     path.setFillType(SkPath::kWinding_FillType);
3183     path.moveTo(1,4);
3184     path.cubicTo(0,5, 4,1, 3,1);
3185     path.close();
3186     pathB.setFillType(SkPath::kWinding_FillType);
3187     pathB.moveTo(1,4);
3188     pathB.cubicTo(1,3, 4,1, 5,0);
3189     pathB.close();
3190     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3191 }
3192 
xOp1u(skiatest::Reporter * reporter,const char * filename)3193 static void xOp1u(skiatest::Reporter* reporter, const char* filename) {
3194     SkPath path, pathB;
3195     path.setFillType(SkPath::kEvenOdd_FillType);
3196     path.moveTo(1, 4);
3197     path.cubicTo(4, 5, 3, 2, 6, 3);
3198     path.close();
3199     pathB.setFillType(SkPath::kEvenOdd_FillType);
3200     pathB.moveTo(2, 3);
3201     pathB.cubicTo(3, 6, 4, 1, 5, 4);
3202     pathB.close();
3203     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
3204 }
3205 
xOp1i(skiatest::Reporter * reporter,const char * filename)3206 static void xOp1i(skiatest::Reporter* reporter, const char* filename) {
3207     SkPath path, pathB;
3208     path.setFillType(SkPath::kEvenOdd_FillType);
3209     path.moveTo(1, 4);
3210     path.cubicTo(1, 5, 6, 0, 5, 1);
3211     path.close();
3212     pathB.setFillType(SkPath::kEvenOdd_FillType);
3213     pathB.moveTo(0, 6);
3214     pathB.cubicTo(1, 5, 4, 1, 5, 1);
3215     pathB.close();
3216     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3217 }
3218 
xOp2i(skiatest::Reporter * reporter,const char * filename)3219 static void xOp2i(skiatest::Reporter* reporter, const char* filename) {
3220     SkPath path, pathB;
3221     path.setFillType(SkPath::kEvenOdd_FillType);
3222     path.moveTo(1, 5);
3223     path.cubicTo(0, 4, 3, 2, 6, 1);
3224     path.close();
3225     pathB.setFillType(SkPath::kEvenOdd_FillType);
3226     pathB.moveTo(2, 3);
3227     pathB.cubicTo(1, 6, 5, 1, 4, 0);
3228     pathB.close();
3229     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3230 }
3231 
xOp3i(skiatest::Reporter * reporter,const char * filename)3232 static void xOp3i(skiatest::Reporter* reporter, const char* filename) {
3233     SkPath path, pathB;
3234     path.setFillType(SkPath::kWinding_FillType);
3235     path.moveTo(1,4);
3236     path.cubicTo(0,5, 4,1, 3,1);
3237     path.close();
3238     pathB.setFillType(SkPath::kWinding_FillType);
3239     pathB.moveTo(1,4);
3240     pathB.cubicTo(1,3, 4,1, 5,0);
3241     pathB.close();
3242     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3243 }
3244 
findFirst1(skiatest::Reporter * reporter,const char * filename)3245 static void findFirst1(skiatest::Reporter* reporter, const char* filename) {
3246     SkPath path, pathB;
3247     path.setFillType(SkPath::kWinding_FillType);
3248     path.moveTo(0,1);
3249     path.cubicTo(1,6, 5,0, 2,1);
3250     path.close();
3251     pathB.setFillType(SkPath::kWinding_FillType);
3252     pathB.moveTo(0,5);
3253     pathB.cubicTo(1,2, 1,0, 6,1);
3254     pathB.close();
3255     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3256 }
3257 
cubicOp112(skiatest::Reporter * reporter,const char * filename)3258 static void cubicOp112(skiatest::Reporter* reporter, const char* filename) {
3259     SkPath path, pathB;
3260     path.setFillType(SkPath::kWinding_FillType);
3261     path.moveTo(2,4);
3262     path.cubicTo(2,3, 6,4, 1,0);
3263     path.close();
3264     pathB.setFillType(SkPath::kWinding_FillType);
3265     pathB.moveTo(4,6);
3266     pathB.cubicTo(0,1, 4,2, 3,2);
3267     pathB.close();
3268     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3269 }
3270 
cubicOp113(skiatest::Reporter * reporter,const char * filename)3271 static void cubicOp113(skiatest::Reporter* reporter, const char* filename) {
3272     SkPath path, pathB;
3273     path.moveTo(2,4);
3274     path.cubicTo(3,5, 2.33333325f,4.33333349f, 3.83333325f,3.83333349f);
3275     path.close();
3276     pathB.moveTo(3,5);
3277     pathB.cubicTo(2.33333325f,4.33333349f, 3.83333325f,3.83333349f, 2,4);
3278     pathB.close();
3279     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3280 }
3281 
cubicOp114(skiatest::Reporter * reporter,const char * filename)3282 static void cubicOp114(skiatest::Reporter* reporter, const char* filename) {
3283     SkPath path, pathB;
3284     path.setFillType(SkPath::kWinding_FillType);
3285     path.moveTo(0, 1);
3286     path.cubicTo(1, 3, -1, 2, 3.5f, 1.33333337f);
3287     path.close();
3288     pathB.setFillType(SkPath::kWinding_FillType);
3289     pathB.moveTo(1, 3);
3290     pathB.cubicTo(-1, 2, 3.5f, 1.33333337f, 0, 1);
3291     pathB.close();
3292     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3293 }
3294 
cubicOp114asQuad(skiatest::Reporter * reporter,const char * filename)3295 static void cubicOp114asQuad(skiatest::Reporter* reporter, const char* filename) {
3296     SkPath path, pathB;
3297     path.setFillType(SkPath::kWinding_FillType);
3298     path.moveTo(0, 1);
3299     path.cubicTo(1, 3, -1, 2, 3.5f, 1.33333337f);
3300     path.close();
3301     pathB.setFillType(SkPath::kWinding_FillType);
3302     pathB.moveTo(1, 3);
3303     pathB.cubicTo(-1, 2, 3.5f, 1.33333337f, 0, 1);
3304     pathB.close();
3305     SkPath qPath, qPathB;
3306     CubicPathToQuads(path, &qPath);
3307     CubicPathToQuads(pathB, &qPathB);
3308     testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
3309 }
3310 
quadOp10i(skiatest::Reporter * reporter,const char * filename)3311 static void quadOp10i(skiatest::Reporter* reporter, const char* filename) {
3312     SkPath path, pathB;
3313     path.moveTo(0, 0);
3314     path.quadTo(1, 8, 3, 5);
3315     path.lineTo(8, 1);
3316     path.close();
3317     pathB.moveTo(0, 0);
3318     pathB.quadTo(8, 1, 4, 8);
3319     pathB.close();
3320     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3321 }
3322 
kari1(skiatest::Reporter * reporter,const char * filename)3323 static void kari1(skiatest::Reporter* reporter, const char* filename) {
3324     SkPath path1;
3325     path1.moveTo(39.9375, -5.8359375);
3326     path1.lineTo(40.625, -5.7890625);
3327     path1.lineTo(37.7109375, 1.3515625);
3328     path1.lineTo(37.203125, 0.9609375);
3329     path1.close();
3330 
3331     SkPath path2;
3332     path2.moveTo(37.52734375f, -1.44140625f);
3333     path2.cubicTo(37.8736991882324f, -1.69921875f, 38.1640625f, -2.140625f, 38.3984375f, -2.765625f);
3334     path2.lineTo(38.640625f, -2.609375f);
3335     path2.cubicTo(38.53125f, -1.89583337306976f, 38.0664443969727f, -0.154893040657043f, 38.0664443969727f, -0.154893040657043f);
3336     path2.cubicTo(38.0664443969727f, -0.154893040657043f, 37.1809883117676f, -1.18359375f, 37.52734375, -1.44140625f);
3337     path2.close();
3338 
3339     testPathOp(reporter, path1, path2, kDifference_SkPathOp, filename);
3340 }
3341 
issue2504(skiatest::Reporter * reporter,const char * filename)3342 static void issue2504(skiatest::Reporter* reporter, const char* filename) {
3343     SkPath path1;
3344     path1.moveTo(34.2421875, -5.976562976837158203125);
3345     path1.lineTo(35.453121185302734375, 0);
3346     path1.lineTo(31.9375, 0);
3347     path1.close();
3348 
3349     SkPath path2;
3350     path2.moveTo(36.71843719482421875, 0.8886508941650390625);
3351     path2.cubicTo(36.71843719482421875, 0.8886508941650390625,
3352                   35.123386383056640625, 0.554015457630157470703125,
3353                   34.511409759521484375, -0.1152553558349609375);
3354     path2.cubicTo(33.899425506591796875, -0.7845261096954345703125,
3355                   34.53484344482421875, -5.6777553558349609375,
3356                   34.53484344482421875, -5.6777553558349609375);
3357     path2.close();
3358     testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
3359 }
3360 
issue2540(skiatest::Reporter * reporter,const char * filename)3361 static void issue2540(skiatest::Reporter* reporter, const char* filename) {
3362     SkPath path1;
3363     path1.moveTo(26.5054988861083984375, 85.73960113525390625);
3364     path1.cubicTo(84.19739532470703125, 17.77140045166015625, 16.93920135498046875, 101.86199951171875, 12.631000518798828125, 105.24700164794921875);
3365     path1.cubicTo(11.0819997787475585937500000, 106.46399688720703125, 11.5260000228881835937500000, 104.464996337890625, 11.5260000228881835937500000, 104.464996337890625);
3366     path1.lineTo(23.1654987335205078125, 89.72879791259765625);
3367     path1.cubicTo(23.1654987335205078125, 89.72879791259765625, -10.1713008880615234375, 119.9160003662109375, -17.1620006561279296875, 120.8249969482421875);
3368     path1.cubicTo(-19.1149997711181640625, 121.07900238037109375, -18.0380001068115234375, 119.79299163818359375, -18.0380001068115234375, 119.79299163818359375);
3369     path1.cubicTo(-18.0380001068115234375, 119.79299163818359375, 14.22100067138671875, 90.60700225830078125, 26.5054988861083984375, 85.73960113525390625);
3370     path1.close();
3371 
3372     SkPath path2;
3373     path2.moveTo(-25.077999114990234375, 124.9120025634765625);
3374     path2.cubicTo(-25.077999114990234375, 124.9120025634765625, -25.9509983062744140625, 125.95400238037109375, -24.368999481201171875, 125.7480010986328125);
3375     path2.cubicTo(-16.06999969482421875, 124.66899871826171875, 1.2680000066757202148437500, 91.23999786376953125, 37.264003753662109375, 95.35400390625);
3376     path2.cubicTo(37.264003753662109375, 95.35400390625, 11.3710002899169921875, 83.7339935302734375, -25.077999114990234375, 124.9120025634765625);
3377     path2.close();
3378     testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
3379 }
3380 
rects1(skiatest::Reporter * reporter,const char * filename)3381 static void rects1(skiatest::Reporter* reporter, const char* filename) {
3382     SkPath path, pathB;
3383     path.setFillType(SkPath::kEvenOdd_FillType);
3384     path.moveTo(0, 0);
3385     path.lineTo(1, 0);
3386     path.lineTo(1, 1);
3387     path.lineTo(0, 1);
3388     path.close();
3389     path.moveTo(0, 0);
3390     path.lineTo(6, 0);
3391     path.lineTo(6, 6);
3392     path.lineTo(0, 6);
3393     path.close();
3394     pathB.setFillType(SkPath::kEvenOdd_FillType);
3395     pathB.moveTo(0, 0);
3396     pathB.lineTo(1, 0);
3397     pathB.lineTo(1, 1);
3398     pathB.lineTo(0, 1);
3399     pathB.close();
3400     pathB.moveTo(0, 0);
3401     pathB.lineTo(2, 0);
3402     pathB.lineTo(2, 2);
3403     pathB.lineTo(0, 2);
3404     pathB.close();
3405     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
3406 }
3407 
rects2(skiatest::Reporter * reporter,const char * filename)3408 static void rects2(skiatest::Reporter* reporter, const char* filename) {
3409     SkPath path, pathB;
3410     path.setFillType(SkPath::kEvenOdd_FillType);
3411     path.moveTo(0, 0);
3412     path.lineTo(4, 0);
3413     path.lineTo(4, 4);
3414     path.lineTo(0, 4);
3415     path.close();
3416     path.moveTo(3, 3);
3417     path.lineTo(4, 3);
3418     path.lineTo(4, 4);
3419     path.lineTo(3, 4);
3420     path.close();
3421     pathB.setFillType(SkPath::kWinding_FillType);
3422     pathB.moveTo(3, 3);
3423     pathB.lineTo(6, 3);
3424     pathB.lineTo(6, 6);
3425     pathB.lineTo(3, 6);
3426     pathB.close();
3427     pathB.moveTo(3, 3);
3428     pathB.lineTo(4, 3);
3429     pathB.lineTo(4, 4);
3430     pathB.lineTo(3, 4);
3431     pathB.close();
3432     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3433 }
3434 
rects3(skiatest::Reporter * reporter,const char * filename)3435 static void rects3(skiatest::Reporter* reporter, const char* filename) {
3436     SkPath path, pathB;
3437     path.setFillType(SkPath::kEvenOdd_FillType);
3438     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
3439     path.addRect(0, 0, 4, 4, SkPath::kCW_Direction);
3440     pathB.setFillType(SkPath::kWinding_FillType);
3441     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3442     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3443     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3444 }
3445 
rects4(skiatest::Reporter * reporter,const char * filename)3446 static void rects4(skiatest::Reporter* reporter, const char* filename) {
3447     SkPath path, pathB;
3448     path.setFillType(SkPath::kEvenOdd_FillType);
3449     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
3450     path.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3451     pathB.setFillType(SkPath::kWinding_FillType);
3452     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3453     pathB.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
3454     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3455 }
3456 
issue2753(skiatest::Reporter * reporter,const char * filename)3457 static void issue2753(skiatest::Reporter* reporter, const char* filename) {
3458     SkPath path1;
3459     path1.moveTo(142.701f, 110.568f);
3460     path1.lineTo(142.957f, 100);
3461     path1.lineTo(153.835f, 100);
3462     path1.lineTo(154.592f, 108.188f);
3463     path1.cubicTo(154.592f, 108.188f, 153.173f, 108.483f, 152.83f, 109.412f);
3464     path1.cubicTo(152.83f, 109.412f, 142.701f, 110.568f, 142.701f, 110.568f);
3465     path1.close();
3466 
3467     SkPath path2;
3468     path2.moveTo(39, 124.001f);
3469     path2.cubicTo(39, 124.001f, 50.6f, 117.001f, 50.6f, 117.001f);
3470     path2.cubicTo(50.6f, 117.001f, 164.601f, 85.2f, 188.201f, 117.601f);
3471     path2.cubicTo(188.201f, 117.601f, 174.801f, 93, 39, 124.001f);
3472     path2.close();
3473 
3474     testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
3475 }
3476 
issue2808(skiatest::Reporter * reporter,const char * filename)3477 static void issue2808(skiatest::Reporter* reporter, const char* filename) {
3478     SkPath path1, path2;
3479 
3480     path1.moveTo(509.20300293f, 385.601989746f);
3481     path1.quadTo(509.20300293f, 415.68838501f, 487.928710938f, 436.96270752f);
3482     path1.quadTo(466.654388428f, 458.236999512f, 436.567993164f, 458.236999512f);
3483     path1.quadTo(406.4815979f, 458.236999512f, 385.207275391f, 436.96270752f);
3484     path1.quadTo(363.932983398f, 415.68838501f, 363.932983398f, 385.601989746f);
3485     path1.quadTo(363.932983398f, 355.515594482f, 385.207275391f, 334.241271973f);
3486     path1.quadTo(406.4815979f, 312.96697998f, 436.567993164f, 312.96697998f);
3487     path1.quadTo(466.654388428f, 312.96697998f, 487.928710938f, 334.241271973f);
3488     path1.quadTo(509.20300293f, 355.515594482f, 509.20300293f, 385.601989746f);
3489     path1.close();
3490 
3491     path2.moveTo(449.033996582f, 290.87298584f);
3492     path2.quadTo(449.033996582f, 301.028259277f, 441.853149414f, 308.209106445f);
3493     path2.quadTo(434.672271729f, 315.389984131f, 424.516998291f, 315.389984131f);
3494     path2.quadTo(414.361724854f, 315.389984131f, 407.180847168f, 308.209106445f);
3495     path2.quadTo(400, 301.028259277f, 400, 290.87298584f);
3496     path2.quadTo(400, 280.717712402f, 407.180847168f, 273.536865234f);
3497     path2.quadTo(414.361724854f, 266.355987549f, 424.516998291f, 266.355987549f);
3498     path2.quadTo(434.672271729f, 266.355987549f, 441.853149414f, 273.536865234f);
3499     path2.quadTo(449.033996582f, 280.717712402f, 449.033996582f, 290.87298584f);
3500     path2.close();
3501 
3502     testPathOp(reporter, path1, path2, kUnion_SkPathOp, filename);
3503 }
3504 
cubicOp115(skiatest::Reporter * reporter,const char * filename)3505 static void cubicOp115(skiatest::Reporter* reporter, const char* filename) {
3506     SkPath path, pathB;
3507     path.setFillType(SkPath::kWinding_FillType);
3508     path.moveTo(0,1);
3509     path.cubicTo(3,4, 2,1, 5,3);
3510     path.close();
3511     pathB.setFillType(SkPath::kWinding_FillType);
3512     pathB.moveTo(1,2);
3513     pathB.cubicTo(3,5, 1,0, 4,3);
3514     pathB.close();
3515     SkPath path2(path);
3516     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3517 }
3518 
testRect1(skiatest::Reporter * reporter,const char * filename)3519 static void testRect1(skiatest::Reporter* reporter, const char* filename) {
3520     SkPath path, path2;
3521     path.addRect(0, 0, 60, 60, SkPath::kCCW_Direction);
3522     path.addRect(30, 20, 50, 50, SkPath::kCCW_Direction);
3523     path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
3524 //    path.addRect(32, 24, 36, 41, SkPath::kCCW_Direction);
3525     testPathOp(reporter, path, path2, kUnion_SkPathOp, filename);
3526 }
3527 
testRect2(skiatest::Reporter * reporter,const char * filename)3528 static void testRect2(skiatest::Reporter* reporter, const char* filename) {
3529     SkPath path, pathB;
3530     path.setFillType(SkPath::kWinding_FillType);
3531     path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
3532     path.addRect(4, 4, 5, 5, SkPath::kCW_Direction);
3533     pathB.setFillType(SkPath::kEvenOdd_FillType);
3534     pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
3535     pathB.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
3536     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3537 }
3538 
cubicOp116(skiatest::Reporter * reporter,const char * filename)3539 static void cubicOp116(skiatest::Reporter* reporter, const char* filename) {
3540     SkPath path, pathB;
3541     path.setFillType(SkPath::kWinding_FillType);
3542     path.moveTo(0,1);
3543     path.cubicTo(4,6, 2,0, 2,0);
3544     path.close();
3545     pathB.setFillType(SkPath::kWinding_FillType);
3546     pathB.moveTo(0,2);
3547     pathB.cubicTo(0,2, 1,0, 6,4);
3548     pathB.close();
3549     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3550 }
3551 
cubicOp117(skiatest::Reporter * reporter,const char * filename)3552 static void cubicOp117(skiatest::Reporter* reporter, const char* filename) {
3553     SkPath path, pathB;
3554     path.setFillType(SkPath::kWinding_FillType);
3555     path.moveTo(0,1);
3556     path.cubicTo(4,5, 6,0, 1,0);
3557     path.close();
3558     pathB.setFillType(SkPath::kWinding_FillType);
3559     pathB.moveTo(0,6);
3560     pathB.cubicTo(0,1, 1,0, 5,4);
3561     pathB.close();
3562     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3563 }
3564 
cubicOp118(skiatest::Reporter * reporter,const char * filename)3565 static void cubicOp118(skiatest::Reporter* reporter, const char* filename) {
3566     SkPath path, pathB;
3567     path.setFillType(SkPath::kWinding_FillType);
3568     path.moveTo(0,1);
3569     path.cubicTo(4,6, 5,1, 6,2);
3570     path.close();
3571     pathB.setFillType(SkPath::kWinding_FillType);
3572     pathB.moveTo(1,5);
3573     pathB.cubicTo(2,6, 1,0, 6,4);
3574     pathB.close();
3575     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3576 }
3577 
loop1(skiatest::Reporter * reporter,const char * filename)3578 static void loop1(skiatest::Reporter* reporter, const char* filename) {
3579     SkPath path, pathB;
3580     path.moveTo(0,1);
3581     path.cubicTo(1,5, -5.66666651f,3.33333349f, 8.83333302f,2.33333349f);
3582     path.close();
3583     pathB.moveTo(1,5);
3584     pathB.cubicTo(-5.66666651f,3.33333349f, 8.83333302f,2.33333349f, 0,1);
3585     pathB.close();
3586     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3587 }
3588 
3589 #include "SkPathOpsCubic.h"
3590 
loop1asQuad(skiatest::Reporter * reporter,const char * filename)3591 static void loop1asQuad(skiatest::Reporter* reporter, const char* filename) {
3592     CubicPts cubic1 = {{{0,1}, {1,5}, {-5.66666651f,3.33333349f}, {8.83333302f,2.33333349f}}};
3593     CubicPts cubic2 = {{{1,5}, {-5.66666651f,3.33333349f}, {8.83333302f,2.33333349f}, {0,1}}};
3594     SkDCubic c1, c2;
3595     c1.debugSet(cubic1.fPts);
3596     c2.debugSet(cubic2.fPts);
3597     double c1InflectionTs[2], c2InflectionTs[2];
3598     SkDEBUGCODE(int c1InfTCount =) c1.findInflections(c1InflectionTs);
3599     SkASSERT(c1InfTCount == 2);
3600     SkDEBUGCODE(int c2InfTCount =) c2.findInflections(c2InflectionTs);
3601     SkASSERT(c2InfTCount == 1);
3602     SkASSERT(c1InflectionTs[0] > c1InflectionTs[1]);
3603     SkDCubicPair c1pair = c1.chopAt(c1InflectionTs[0]);
3604     SkDCubicPair c1apair = c1pair.first().chopAt(c1InflectionTs[1]);
3605     SkDCubicPair c2pair = c2.chopAt(c2InflectionTs[0]);
3606     SkDQuad q1[2] = { c1pair.first().toQuad(), c1pair.second().toQuad() };
3607     SkDQuad q1a[2] = { c1apair.first().toQuad(), c1apair.second().toQuad() };
3608     SkDQuad q2[2] = { c2pair.first().toQuad(), c2pair.second().toQuad() };
3609     SkPath path, pathB;
3610     path.moveTo(q1a[0].fPts[0].asSkPoint());
3611     path.quadTo(q1a[0].fPts[1].asSkPoint(), q1a[0].fPts[2].asSkPoint());
3612     path.quadTo(q1a[1].fPts[1].asSkPoint(), q1a[1].fPts[2].asSkPoint());
3613     path.quadTo(q1[1].fPts[1].asSkPoint(), q1[1].fPts[2].asSkPoint());
3614     path.close();
3615     pathB.moveTo(q2[0].fPts[0].asSkPoint());
3616     pathB.quadTo(q2[0].fPts[1].asSkPoint(), q2[0].fPts[2].asSkPoint());
3617     pathB.quadTo(q2[1].fPts[1].asSkPoint(), q2[1].fPts[2].asSkPoint());
3618     pathB.close();
3619     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3620 }
3621 
loop2(skiatest::Reporter * reporter,const char * filename)3622 static void loop2(skiatest::Reporter* reporter, const char* filename) {
3623     SkPath path, pathB;
3624     path.moveTo(0,1);
3625     path.cubicTo(3,4, 3.f,4.f, 4.5f,1.5f);
3626     path.close();
3627     pathB.moveTo(3,4);
3628     pathB.cubicTo(3.f,4.f, 4.5f,1.5f, 0,1);
3629     pathB.close();
3630     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3631 }
3632 
loop3(skiatest::Reporter * reporter,const char * filename)3633 static void loop3(skiatest::Reporter* reporter, const char* filename) {
3634     SkPath path, pathB;
3635     path.moveTo(0,1);
3636     path.cubicTo(3,5, -3.66666651f,0, 10.5f,-1.66666651f);
3637     path.close();
3638     pathB.moveTo(3,5);
3639     pathB.cubicTo(-3.66666651f,0, 10.5f,-1.66666651f, 0,1);
3640     pathB.close();
3641     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3642 }
3643 
loop4(skiatest::Reporter * reporter,const char * filename)3644 static void loop4(skiatest::Reporter* reporter, const char* filename) {
3645     SkPath path, pathB;
3646     path.moveTo(0,5);
3647     path.cubicTo(1,5, 1,4, 0.833333313f,3);
3648     path.close();
3649     pathB.moveTo(1,5);
3650     pathB.cubicTo(1,4, 0.833333313f,3, 0,5);
3651     pathB.close();
3652     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3653 }
3654 
3655 #include "SkParsePath.h"
3656 
issue3517(skiatest::Reporter * reporter,const char * filename)3657 static void issue3517(skiatest::Reporter* reporter, const char* filename) {
3658     SkPath path, pathB;
3659 
3660     const char str[] = "M31.35 57.75L31.35 57.75C31.9 57.7486 32.45 57.7948 33 57.7413C33.55 57.6878 34.1 57.5014 34.65 57.4291C35.2 57.3569 35.75 57.3223 36.3 57.3079C36.85 57.2935 37.4 57.3143 37.95 57.3428C38.5 57.3712 39.05 57.4112 39.6 57.4786C40.15 57.546 40.7 57.7029 41.25 57.7472C41.8 57.7916 42.35 57.7962 42.9 57.7445C43.45 57.6928 44 57.5345 44.55 57.4373C45.1 57.34 45.65 57.2115 46.2 57.1611C46.75 57.1107 47.3 57.1371 47.85 57.1349C48.4 57.1327 48.95 57.144 49.5 57.1478C50.05 57.1516 50.6 57.1553 51.15 57.1579C51.7 57.1605 52.25 57.1601 52.8 57.1634C53.35 57.1667 53.9 57.1731 54.45 57.1776C55 57.182 55.55 57.1916 56.1 57.19C56.65 57.1884 57.2 57.178 57.75 57.168C58.3 57.158 58.85 57.1355 59.4 57.1299C59.95 57.1243 60.5 57.1338 61.05 57.1345C61.6 57.1352 62.15 57.124 62.7 57.134C63.25 57.1441 63.8 57.1731 64.35 57.195C64.9 57.2169 65.45 57.2532 66 57.2655C66.55 57.2778 67.1 57.2647 67.65 57.2687C68.2 57.2728 68.75 57.267 69.3 57.2896C69.85 57.3122 70.4 57.371 70.95 57.4044C71.5 57.4377 72.05 57.4668 72.6 57.4896C73.15 57.5123 73.7 57.545 74.25 57.5408C74.8 57.5365 75.35 57.5068 75.9 57.4641C76.45 57.4213 77 57.3244 77.55 57.2842C78.1 57.244 78.65 57.2163 79.2 57.2228C79.75 57.2293 80.3 57.29 80.85 57.3232C81.4 57.3563 81.95 57.396 82.5 57.4219C83.05 57.4478 83.6 57.4637 84.15 57.4787C84.7 57.4937 85.25 57.5011 85.8 57.5121C86.35 57.523 86.9 57.5411 87.45 57.5444C88 57.5477 88.55 57.5663 89.1 57.5318C89.65 57.4972 90.2 57.3126 90.75 57.337C91.3 57.3613 91.85 57.6088 92.4 57.6776C92.95 57.7465 93.5 57.7379 94.05 57.75C94.6 57.7621 95.15 57.75 95.7 57.75L95.7 57.75L31.35 57.75Z";
3661     SkParsePath::FromSVGString(str, &path);
3662 
3663     const char strB[] = "M31.35 57.75L31.35 57.75C31.9 57.7514 32.45 57.7052 33 57.7587C33.55 57.8122 34.1 57.9986 34.65 58.0709C35.2 58.1431 35.75 58.1777 36.3 58.1921C36.85 58.2065 37.4 58.1857 37.95 58.1572C38.5 58.1288 39.05 58.0888 39.6 58.0214C40.15 57.954 40.7 57.7971 41.25 57.7528C41.8 57.7084 42.35 57.7038 42.9 57.7555C43.45 57.8072 44 57.9655 44.55 58.0627C45.1 58.16 45.65 58.2885 46.2 58.3389C46.75 58.3893 47.3 58.3629 47.85 58.3651C48.4 58.3673 48.95 58.356 49.5 58.3522C50.05 58.3484 50.6 58.3447 51.15 58.3421C51.7 58.3395 52.25 58.3399 52.8 58.3366C53.35 58.3333 53.9 58.3269 54.45 58.3224C55 58.318 55.55 58.3084 56.1 58.31C56.65 58.3116 57.2 58.322 57.75 58.332C58.3 58.342 58.85 58.3645 59.4 58.3701C59.95 58.3757 60.5 58.3662 61.05 58.3655C61.6 58.3648 62.15 58.376 62.7 58.366C63.25 58.3559 63.8 58.3269 64.35 58.305C64.9 58.2831 65.45 58.2468 66 58.2345C66.55 58.2222 67.1 58.2353 67.65 58.2313C68.2 58.2272 68.75 58.233 69.3 58.2104C69.85 58.1878 70.4 58.129 70.95 58.0956C71.5 58.0623 72.05 58.0332 72.6 58.0104C73.15 57.9877 73.7 57.955 74.25 57.9592C74.8 57.9635 75.35 57.9932 75.9 58.0359C76.45 58.0787 77 58.1756 77.55 58.2158C78.1 58.256 78.65 58.2837 79.2 58.2772C79.75 58.2707 80.3 58.21 80.85 58.1768C81.4 58.1437 81.95 58.104 82.5 58.0781C83.05 58.0522 83.6 58.0363 84.15 58.0213C84.7 58.0063 85.25 57.9989 85.8 57.9879C86.35 57.977 86.9 57.9589 87.45 57.9556C88 57.9523 88.55 57.9337 89.1 57.9682C89.65 58.0028 90.2 58.1874 90.75 58.163C91.3 58.1387 91.85 57.8912 92.4 57.8224C92.95 57.7535 93.5 57.7621 94.05 57.75C94.6 57.7379 95.15 57.75 95.7 57.75L95.7 57.75L31.35 57.75Z";
3664     SkParsePath::FromSVGString(strB, &pathB);
3665     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
3666 }
3667 
cubicOp119(skiatest::Reporter * reporter,const char * filename)3668 static void cubicOp119(skiatest::Reporter* reporter, const char* filename) {
3669     SkPath path, pathB;
3670     path.setFillType(SkPath::kWinding_FillType);
3671     path.moveTo(0,1);
3672     path.cubicTo(3,5, 2,1, 3,1);
3673     path.close();
3674     pathB.setFillType(SkPath::kWinding_FillType);
3675     pathB.moveTo(1,2);
3676     pathB.cubicTo(1,3, 1,0, 5,3);
3677     pathB.close();
3678     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3679 }
3680 
cubicOp120(skiatest::Reporter * reporter,const char * filename)3681 static void cubicOp120(skiatest::Reporter* reporter, const char* filename) {
3682     SkPath path, pathB;
3683     path.setFillType(SkPath::kWinding_FillType);
3684     path.moveTo(0,1);
3685     path.cubicTo(2,4, 2,1, 4,0);
3686     path.close();
3687     pathB.setFillType(SkPath::kWinding_FillType);
3688     pathB.moveTo(1,2);
3689     pathB.cubicTo(0,4, 1,0, 4,2);
3690     pathB.close();
3691     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3692 }
3693 
cubicOp121(skiatest::Reporter * reporter,const char * filename)3694 static void cubicOp121(skiatest::Reporter* reporter, const char* filename) {
3695     SkPath path, pathB;
3696     path.setFillType(SkPath::kWinding_FillType);
3697     path.moveTo(0,1);
3698     path.cubicTo(3,4, 3,2, 4,3);
3699     path.close();
3700     pathB.setFillType(SkPath::kWinding_FillType);
3701     pathB.moveTo(2,3);
3702     pathB.cubicTo(3,4, 1,0, 4,3);
3703     pathB.close();
3704     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3705 }
3706 
3707 // FIXME : haven't debugged this failure yet
cubicOp122(skiatest::Reporter * reporter,const char * filename)3708 static void cubicOp122(skiatest::Reporter* reporter, const char* filename) {
3709     SkPath path, pathB;
3710     path.setFillType(SkPath::kWinding_FillType);
3711     path.moveTo(0,1);
3712     path.cubicTo(3,5, 4,1, 4,0);
3713     path.close();
3714     pathB.setFillType(SkPath::kWinding_FillType);
3715     pathB.moveTo(1,4);
3716     pathB.cubicTo(0,4, 1,0, 5,3);
3717     pathB.close();
3718     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3719 }
3720 
cubicOp123(skiatest::Reporter * reporter,const char * filename)3721 static void cubicOp123(skiatest::Reporter* reporter, const char* filename) {
3722     SkPath path, pathB;
3723     path.setFillType(SkPath::kWinding_FillType);
3724     path.moveTo(0,1);
3725     path.cubicTo(1,5, 2,0, 6,0);
3726     path.close();
3727     pathB.setFillType(SkPath::kWinding_FillType);
3728     pathB.moveTo(0,2);
3729     pathB.cubicTo(0,6, 1,0, 5,1);
3730     pathB.close();
3731     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3732 }
3733 
loop5(skiatest::Reporter * reporter,const char * filename)3734 static void loop5(skiatest::Reporter* reporter, const char* filename) {
3735     SkPath path, pathB;
3736     path.moveTo(0,2);
3737     path.cubicTo(1,2, 1,1.66666663f, 0.833333313f,1.33333325f);
3738     path.close();
3739     pathB.moveTo(1,2);
3740     pathB.cubicTo(1,1.66666663f, 0.833333313f,1.33333325f, 0,2);
3741     pathB.close();
3742     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3743 }
3744 
loop6(skiatest::Reporter * reporter,const char * filename)3745 static void loop6(skiatest::Reporter* reporter, const char* filename) {
3746     SkPath path, pathB;
3747     path.moveTo(0,1);
3748     path.cubicTo(1,3, -1.66666675f,1.66666663f, 4.16666651f,1.00000012f);
3749     path.close();
3750     pathB.moveTo(1,3);
3751     pathB.cubicTo(-1.66666675f,1.66666663f, 4.16666651f,1.00000012f, 0,1);
3752     pathB.close();
3753     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3754 }
3755 
cubicOp124(skiatest::Reporter * reporter,const char * filename)3756 static void cubicOp124(skiatest::Reporter* reporter, const char* filename) {
3757     SkPath path, pathB;
3758     path.setFillType(SkPath::kWinding_FillType);
3759     path.moveTo(0,1);
3760     path.cubicTo(1,5, 6,0, 3,0);
3761     path.close();
3762     pathB.setFillType(SkPath::kWinding_FillType);
3763     pathB.moveTo(0,6);
3764     pathB.cubicTo(0,3, 1,0, 5,1);
3765     pathB.close();
3766     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3767 }
3768 
cubicOp125(skiatest::Reporter * reporter,const char * filename)3769 static void cubicOp125(skiatest::Reporter* reporter, const char* filename) {
3770     SkPath path, pathB;
3771     path.setFillType(SkPath::kWinding_FillType);
3772     path.moveTo(0,1);
3773     path.cubicTo(3,6, 3,1, 6,2);
3774     path.close();
3775     pathB.setFillType(SkPath::kWinding_FillType);
3776     pathB.moveTo(1,3);
3777     pathB.cubicTo(2,6, 1,0, 6,3);
3778     pathB.close();
3779     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3780 }
3781 
cubicOp126(skiatest::Reporter * reporter,const char * filename)3782 static void cubicOp126(skiatest::Reporter* reporter, const char* filename) {
3783     SkPath path, pathB;
3784     path.setFillType(SkPath::kWinding_FillType);
3785     path.moveTo(0,1);
3786     path.cubicTo(0,3, 6,0, 2,1);
3787     path.close();
3788     pathB.setFillType(SkPath::kWinding_FillType);
3789     pathB.moveTo(0,6);
3790     pathB.cubicTo(1,2, 1,0, 3,0);
3791     pathB.close();
3792     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3793 }
3794 
cubicOp127(skiatest::Reporter * reporter,const char * filename)3795 static void cubicOp127(skiatest::Reporter* reporter, const char* filename) {
3796     SkPath path, pathB;
3797     path.setFillType(SkPath::kWinding_FillType);
3798     path.moveTo(0,1);
3799     path.cubicTo(1,5, 6,0, 3,0);
3800     path.close();
3801     pathB.setFillType(SkPath::kWinding_FillType);
3802     pathB.moveTo(0,6);
3803     pathB.cubicTo(0,3, 1,0, 5,1);
3804     pathB.close();
3805     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3806 }
3807 
cubicOp128(skiatest::Reporter * reporter,const char * filename)3808 static void cubicOp128(skiatest::Reporter* reporter, const char* filename) {
3809     SkPath path, pathB;
3810     path.setFillType(SkPath::kWinding_FillType);
3811     path.moveTo(0,1);
3812     path.cubicTo(0,3, 3,2, 5,2);
3813     path.close();
3814     pathB.setFillType(SkPath::kWinding_FillType);
3815     pathB.moveTo(2,3);
3816     pathB.cubicTo(2,5, 1,0, 3,0);
3817     pathB.close();
3818     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3819 }
3820 
cubicOp129(skiatest::Reporter * reporter,const char * filename)3821 static void cubicOp129(skiatest::Reporter* reporter, const char* filename) {
3822     SkPath path, pathB;
3823     path.setFillType(SkPath::kWinding_FillType);
3824     path.moveTo(5,6);
3825     path.cubicTo(3,4, 2,0, 2,1);
3826     path.close();
3827     pathB.setFillType(SkPath::kWinding_FillType);
3828     pathB.moveTo(0,2);
3829     pathB.cubicTo(1,2, 6,5, 4,3);
3830     pathB.close();
3831     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3832 }
3833 
cubicOp130(skiatest::Reporter * reporter,const char * filename)3834 static void cubicOp130(skiatest::Reporter* reporter, const char* filename) {
3835     SkPath path, pathB;
3836     path.setFillType(SkPath::kWinding_FillType);
3837     path.moveTo(5,6);
3838     path.cubicTo(4,6, 3,0, 2,1);
3839     path.close();
3840     pathB.setFillType(SkPath::kWinding_FillType);
3841     pathB.moveTo(0,3);
3842     pathB.cubicTo(1,2, 6,5, 6,4);
3843     pathB.close();
3844     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3845 }
3846 
3847 #include "SkGeometry.h"
3848 
complex_to_quads(const SkPoint pts[],SkPath * path)3849 static void complex_to_quads(const SkPoint pts[], SkPath* path) {
3850     SkScalar loopT[3];
3851     if (SkDCubic::ComplexBreak(pts, loopT)) {
3852         SkPoint cubicPair[7];
3853         SkChopCubicAt(pts, cubicPair, loopT[0]);
3854         SkDCubic c1, c2;
3855         c1.set(cubicPair);
3856         c2.set(&cubicPair[3]);
3857         SkDQuad q1 = c1.toQuad();
3858         SkDQuad q2 = c2.toQuad();
3859         path->quadTo(q1[1].asSkPoint(), q1[2].asSkPoint());
3860         path->quadTo(q2[1].asSkPoint(), q2[2].asSkPoint());
3861     } else {
3862         path->cubicTo(pts[1], pts[2], pts[3]);
3863     }
3864 }
3865 
cubicOp130a(skiatest::Reporter * reporter,const char * filename)3866 static void cubicOp130a(skiatest::Reporter* reporter, const char* filename) {
3867     SkPath path, pathB;
3868     path.setFillType(SkPath::kWinding_FillType);
3869     path.moveTo(5,6);
3870     SkPoint pts[] = { {5,6}, {4,6}, {3,0}, {2,1} };
3871     complex_to_quads(pts, &path);
3872     path.close();
3873     pathB.setFillType(SkPath::kWinding_FillType);
3874     pathB.moveTo(0,3);
3875     SkPoint pts2[] = { {0,3}, {1,2}, {6,5}, {6,4} };
3876     complex_to_quads(pts2, &path);
3877     pathB.close();
3878     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3879 }
3880 
cubicOp131(skiatest::Reporter * reporter,const char * filename)3881 static void cubicOp131(skiatest::Reporter* reporter, const char* filename) {
3882     SkPath path, pathB;
3883     path.setFillType(SkPath::kWinding_FillType);
3884     path.moveTo(0,1);
3885     path.cubicTo(3,4, 3,0, 6,2);
3886     path.close();
3887     pathB.setFillType(SkPath::kWinding_FillType);
3888     pathB.moveTo(0,3);
3889     pathB.cubicTo(2,6, 1,0, 4,3);
3890     pathB.close();
3891     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3892 }
3893 
circlesOp1(skiatest::Reporter * reporter,const char * filename)3894 static void circlesOp1(skiatest::Reporter* reporter, const char* filename) {
3895     SkPath path, pathB;
3896     path.setFillType(SkPath::kWinding_FillType);
3897     path.addCircle(0, 1, 2, SkPath::kCCW_Direction);
3898     pathB.setFillType(SkPath::kWinding_FillType);
3899     pathB.addCircle(0, 1, 1, SkPath::kCW_Direction);
3900     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3901 }
3902 
circlesOp2(skiatest::Reporter * reporter,const char * filename)3903 static void circlesOp2(skiatest::Reporter* reporter, const char* filename) {
3904     SkPath path, pathB;
3905     path.setFillType(SkPath::kWinding_FillType);
3906     path.addCircle(0, 1, 4, SkPath::kCCW_Direction);
3907     pathB.setFillType(SkPath::kWinding_FillType);
3908     pathB.addCircle(0, 4, 3, SkPath::kCW_Direction);
3909     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3910 }
3911 
rRect1x(skiatest::Reporter * reporter,const char * filename)3912 static void rRect1x(skiatest::Reporter* reporter, const char* filename) {
3913     SkPath path, pathB;
3914     path.setFillType(SkPath::kEvenOdd_FillType);
3915     path.moveTo(20.65f, 5.65f);
3916     path.conicTo(20.65f, 1.13612f, 25.1404f, 0.65f, 0.888488f);
3917     path.lineTo(25.65f, 0.65f);
3918     path.lineTo(26.1596f, 0.67604f);
3919     path.conicTo(30.65f, 1.13612f, 30.65f, 5.65f, 0.888488f);
3920     path.lineTo(30.65f, 25.65f);
3921     path.conicTo(30.65f, 20.65f, 25.65f, 20.65f, 0.707107f);
3922     path.lineTo(20.65f, 20.65f);
3923     path.lineTo(20.65f, 5.65f);
3924     path.close();
3925     path.moveTo(20.65f, 20.65f);
3926     path.lineTo(5.65f, 20.65f);
3927     path.conicTo(0.65f, 20.65f, 0.65f, 25.65f, 0.707107f);
3928     path.lineTo(0.65f, 45.65f);
3929     path.conicTo(0.65f, 50.65f, 5.65f, 50.65f, 0.707107f);
3930     path.lineTo(25.65f, 50.65f);
3931     path.conicTo(30.65f, 50.65f, 30.65f, 45.65f, 0.707107f);
3932     path.lineTo(30.65f, 25.65f);
3933     path.conicTo(30.65f, 30.65f, 25.65f, 30.65f, 0.707107f);
3934     path.conicTo(20.65f, 30.65f, 20.65f, 25.65f, 0.707107f);
3935     path.lineTo(20.65f, 20.65f);
3936     path.close();
3937     SkPath path1(path);
3938 
3939     path.reset();
3940     path.setFillType(SkPath::kWinding_FillType);
3941     path.moveTo(20.65f, 45.65f);
3942     path.lineTo(20.65f, 25.65f);
3943     path.conicTo(20.65f, 20.65f, 25.65f, 20.65f, 0.707107f);
3944     path.lineTo(45.65f, 20.65f);
3945     path.conicTo(50.65f, 20.65f, 50.65f, 25.65f, 0.707107f);
3946     path.lineTo(50.65f, 45.65f);
3947     path.conicTo(50.65f, 50.65f, 45.65f, 50.65f, 0.707107f);
3948     path.lineTo(25.65f, 50.65f);
3949     path.conicTo(20.65f, 50.65f, 20.65f, 45.65f, 0.707107f);
3950     path.close();
3951     SkPath path2(path);
3952 
3953     testPathOp(reporter, path1, path2, kDifference_SkPathOp, filename);
3954 }
3955 
loop7(skiatest::Reporter * reporter,const char * filename)3956 static void loop7(skiatest::Reporter* reporter, const char* filename) {
3957     SkPath path, pathB;
3958     path.moveTo(0,1);
3959     path.cubicTo(3,4, -1,0, 8.5f,-2.5f);
3960     path.close();
3961     pathB.moveTo(3,4);
3962     pathB.cubicTo(-1,0, 8.5f,-2.5f, 0,1);
3963     pathB.close();
3964     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3965 }
3966 
rects5(skiatest::Reporter * reporter,const char * filename)3967 static void rects5(skiatest::Reporter* reporter, const char* filename) {
3968     SkPath path, pathB;
3969     path.setFillType(SkPath::kWinding_FillType);
3970     path.addRect(5, 5, 6, 6, SkPath::kCW_Direction);
3971     path.addRect(5, 5, 6, 6, SkPath::kCW_Direction);
3972     pathB.setFillType(SkPath::kEvenOdd_FillType);
3973     pathB.addRect(0, 0, 6, 6, SkPath::kCW_Direction);
3974     pathB.addRect(5, 5, 6, 6, SkPath::kCW_Direction);
3975     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
3976 }
3977 
loop8(skiatest::Reporter * reporter,const char * filename)3978 static void loop8(skiatest::Reporter* reporter, const char* filename) {
3979     SkPath path, pathB;
3980     path.moveTo(0,1);
3981     path.cubicTo(1,4, -3.83333325f,0.166666627f, 6,-1);
3982     path.close();
3983     pathB.moveTo(1,4);
3984     pathB.cubicTo(-3.83333325f,0.166666627f, 6,-1, 0,1);
3985     pathB.close();
3986     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3987 }
3988 
loop9(skiatest::Reporter * reporter,const char * filename)3989 static void loop9(skiatest::Reporter* reporter, const char* filename) {
3990     SkPath path, pathB;
3991     path.moveTo(0,1);
3992     path.cubicTo(1,3, -2.5f,0, 3.33333325f,-0.666666627f);
3993     path.close();
3994     pathB.moveTo(1,3);
3995     pathB.cubicTo(-2.5f,0, 3.33333325f,-0.666666627f, 0,1);
3996     pathB.close();
3997     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
3998 }
3999 
circlesOp3(skiatest::Reporter * reporter,const char * filename)4000 static void circlesOp3(skiatest::Reporter* reporter, const char* filename) {
4001     SkPath path, pathB;
4002     path.setFillType(SkPath::kWinding_FillType);
4003     path.addCircle(0, 1, 2, SkPath::kCCW_Direction);
4004     pathB.setFillType(SkPath::kWinding_FillType);
4005     pathB.addCircle(3, 5, 3, SkPath::kCW_Direction);
4006     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4007 }
4008 
loop10(skiatest::Reporter * reporter,const char * filename)4009 static void loop10(skiatest::Reporter* reporter, const char* filename) {
4010     SkPath path, pathB;
4011     path.moveTo(5,6);
4012     path.cubicTo(1,2, 1,2, -3.66666651f,13.333334f);
4013     path.close();
4014     pathB.moveTo(1,2);
4015     pathB.cubicTo(1,2, -3.66666651f,13.333334f, 5,6);
4016     pathB.close();
4017     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4018 }
4019 
loop11(skiatest::Reporter * reporter,const char * filename)4020 static void loop11(skiatest::Reporter* reporter, const char* filename) {
4021     SkPath path, pathB;
4022     path.moveTo(0,1);
4023     path.cubicTo(1,3, -1.83333349f,1.33333337f, 4,-1);
4024     path.close();
4025     pathB.moveTo(1,3);
4026     pathB.cubicTo(-1.83333349f,1.33333337f, 4,-1, 0,1);
4027     pathB.close();
4028     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4029 }
4030 
cubicOp132(skiatest::Reporter * reporter,const char * filename)4031 static void cubicOp132(skiatest::Reporter* reporter, const char* filename) {
4032     SkPath path, pathB;
4033     path.setFillType(SkPath::kWinding_FillType);
4034     path.moveTo(5,6);
4035     path.cubicTo(3,4, 3,0, 3,2);
4036     path.close();
4037     pathB.setFillType(SkPath::kWinding_FillType);
4038     pathB.moveTo(0,3);
4039     pathB.cubicTo(2,3, 6,5, 4,3);
4040     pathB.close();
4041     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4042 }
4043 
loop12(skiatest::Reporter * reporter,const char * filename)4044 static void loop12(skiatest::Reporter* reporter, const char* filename) {
4045     SkPath path, pathB;
4046     path.moveTo(1,2);
4047     path.cubicTo(0,6, -3.16666675f,3.66666675f, 6.33333349f,3.33333349f);
4048     path.close();
4049     pathB.moveTo(0,6);
4050     pathB.cubicTo(-3.16666675f,3.66666675f, 6.33333349f,3.33333349f, 1,2);
4051     pathB.close();
4052     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4053 }
4054 
cubicOp133(skiatest::Reporter * reporter,const char * filename)4055 static void cubicOp133(skiatest::Reporter* reporter, const char* filename) {
4056     SkPath path, pathB;
4057     path.setFillType(SkPath::kWinding_FillType);
4058     path.moveTo(5,6);
4059     path.cubicTo(5,6, 5,0, 4,1);
4060     path.close();
4061     pathB.setFillType(SkPath::kWinding_FillType);
4062     pathB.moveTo(0,5);
4063     pathB.cubicTo(1,4, 6,5, 6,5);
4064     pathB.close();
4065     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4066 }
4067 
cubicOp134(skiatest::Reporter * reporter,const char * filename)4068 static void cubicOp134(skiatest::Reporter* reporter, const char* filename) {
4069     SkPath path, pathB;
4070     path.setFillType(SkPath::kWinding_FillType);
4071     path.moveTo(5,6);
4072     path.cubicTo(5,6, 6,0, 3,1);
4073     path.close();
4074     pathB.setFillType(SkPath::kWinding_FillType);
4075     pathB.moveTo(0,6);
4076     pathB.cubicTo(1,3, 6,5, 6,5);
4077     pathB.close();
4078     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4079 }
4080 
cubicOp135(skiatest::Reporter * reporter,const char * filename)4081 static void cubicOp135(skiatest::Reporter* reporter, const char* filename) {
4082     SkPath path, pathB;
4083     path.setFillType(SkPath::kWinding_FillType);
4084     path.moveTo(5,6);
4085     path.cubicTo(5,6, 6,0, 4,1);
4086     path.close();
4087     pathB.setFillType(SkPath::kWinding_FillType);
4088     pathB.moveTo(0,6);
4089     pathB.cubicTo(1,4, 6,5, 6,5);
4090     pathB.close();
4091     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4092 }
4093 
cubicOp136(skiatest::Reporter * reporter,const char * filename)4094 static void cubicOp136(skiatest::Reporter* reporter, const char* filename) {
4095     SkPath path, pathB;
4096     path.setFillType(SkPath::kWinding_FillType);
4097     path.moveTo(5,6);
4098     path.cubicTo(5,6, 5,0, 3,1);
4099     path.close();
4100     pathB.setFillType(SkPath::kWinding_FillType);
4101     pathB.moveTo(0,5);
4102     pathB.cubicTo(1,3, 6,5, 6,5);
4103     pathB.close();
4104     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4105 }
4106 
cubicOp136a(skiatest::Reporter * reporter,const char * filename)4107 static void cubicOp136a(skiatest::Reporter* reporter, const char* filename) {
4108     SkPath path, pathB;
4109     path.setFillType(SkPath::kWinding_FillType);
4110     path.moveTo(5,6);
4111     path.quadTo(5,0, 3,1);
4112     path.close();
4113     pathB.setFillType(SkPath::kWinding_FillType);
4114     pathB.moveTo(0,5);
4115     pathB.cubicTo(1,3, 6,5, 6,5);
4116     pathB.close();
4117     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4118 }
4119 
cubics137(skiatest::Reporter * reporter,const char * filename)4120 static void cubics137(skiatest::Reporter* reporter, const char* filename) {
4121     SkPath path, pathB;
4122     path.setFillType(SkPath::kWinding_FillType);
4123     path.moveTo(0, 5);
4124     path.cubicTo(3, 6, 1, 0, 3, 2);
4125     path.close();
4126     pathB.setFillType(SkPath::kWinding_FillType);
4127     pathB.moveTo(0, 1);
4128     pathB.cubicTo(2, 3, 5, 0, 6, 3);
4129     pathB.close();
4130     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4131 }
4132 
cubics138(skiatest::Reporter * reporter,const char * filename)4133 static void cubics138(skiatest::Reporter* reporter, const char* filename) {
4134     SkPath path, pathB;
4135     path.setFillType(SkPath::kWinding_FillType);
4136     path.moveTo(0, 5);
4137     path.cubicTo(3, 6, 1, 0, 4, 2);
4138     path.close();
4139     pathB.setFillType(SkPath::kWinding_FillType);
4140     pathB.moveTo(0, 1);
4141     pathB.cubicTo(2, 4, 5, 0, 6, 3);
4142     pathB.close();
4143     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4144 }
4145 
4146 // three curves intersect successfully nearby -- the angle only gets 2 of the 3 pts
cubicOp139(skiatest::Reporter * reporter,const char * filename)4147 static void cubicOp139(skiatest::Reporter* reporter, const char* filename) {
4148     SkPath path, pathB;
4149     path.setFillType(SkPath::kWinding_FillType);
4150     path.moveTo(0,2);
4151     path.cubicTo(0,4, 3,1, 5,1);
4152     path.close();
4153     pathB.setFillType(SkPath::kWinding_FillType);
4154     pathB.moveTo(1,3);
4155     pathB.cubicTo(1,5, 2,0, 4,0);
4156     pathB.close();
4157     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4158 }
4159 
cubicOp140(skiatest::Reporter * reporter,const char * filename)4160 static void cubicOp140(skiatest::Reporter* reporter, const char* filename) {
4161     SkPath path, pathB;
4162     path.setFillType(SkPath::kWinding_FillType);
4163     path.moveTo(0,2);
4164     path.cubicTo(1,2, 5,4, 3,2);
4165     path.close();
4166     pathB.setFillType(SkPath::kWinding_FillType);
4167     pathB.moveTo(4,5);
4168     pathB.cubicTo(2,3, 2,0, 2,1);
4169     pathB.close();
4170     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4171 }
4172 
cubicOp141(skiatest::Reporter * reporter,const char * filename)4173 static void cubicOp141(skiatest::Reporter* reporter, const char* filename) {
4174     SkPath path, pathB;
4175     path.setFillType(SkPath::kWinding_FillType);
4176     path.moveTo(0,2);
4177     path.cubicTo(1,2, 6,4, 3,2);
4178     path.close();
4179     pathB.setFillType(SkPath::kWinding_FillType);
4180     pathB.moveTo(4,6);
4181     pathB.cubicTo(2,3, 2,0, 2,1);
4182     pathB.close();
4183     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4184 }
4185 
quadRect1(skiatest::Reporter * reporter,const char * filename)4186 static void quadRect1(skiatest::Reporter* reporter, const char* filename) {
4187     SkPath path, pathB;
4188     path.moveTo(6,15);
4189     path.quadTo(16,0, 8,4);
4190     path.quadTo(2,7, 12,12);
4191     path.close();
4192     pathB.addRect(4,11, 13,16);
4193     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4194 }
4195 
quadRect2(skiatest::Reporter * reporter,const char * filename)4196 static void quadRect2(skiatest::Reporter* reporter, const char* filename) {
4197     SkPath path, pathB;
4198     path.moveTo(5,12);
4199     path.quadTo(15,7, 9,4);
4200     path.quadTo(1,0, 11,15);
4201     path.close();
4202     pathB.addRect(4,11, 13,16);
4203     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4204 }
4205 
quadRect3(skiatest::Reporter * reporter,const char * filename)4206 static void quadRect3(skiatest::Reporter* reporter, const char* filename) {
4207     SkPath path, pathB;
4208     path.moveTo(12,12);
4209     path.quadTo(2,7, 8,4);
4210     path.quadTo(16,0, 6,15);
4211     path.close();
4212     pathB.addRect(4,11, 13,16);
4213     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4214 }
4215 
quadRect4(skiatest::Reporter * reporter,const char * filename)4216 static void quadRect4(skiatest::Reporter* reporter, const char* filename) {
4217     SkPath path, pathB;
4218     path.moveTo(11,15);
4219     path.quadTo(1,0, 9,4);
4220     path.quadTo(15,7, 5,12);
4221     path.close();
4222     pathB.addRect(4,11, 13,16);
4223     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4224 }
4225 
quadRect5(skiatest::Reporter * reporter,const char * filename)4226 static void quadRect5(skiatest::Reporter* reporter, const char* filename) {
4227     SkPath path, pathB;
4228     path.moveTo(11,13);
4229     path.quadTo(4,4, 8,4);
4230     path.quadTo(12,4, 5,13);
4231     path.close();
4232     pathB.addRect(4,11, 13,16);
4233     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4234 }
4235 
quadRect6(skiatest::Reporter * reporter,const char * filename)4236 static void quadRect6(skiatest::Reporter* reporter, const char* filename) {
4237     SkPath path, pathB;
4238     path.moveTo(5,13);
4239     path.quadTo(12,4, 8,4);
4240     path.quadTo(4,4, 11,13);
4241     path.close();
4242     pathB.addRect(4,11, 13,16);
4243     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4244 }
4245 
loops4i(skiatest::Reporter * reporter,const char * filename)4246 static void loops4i(skiatest::Reporter* reporter, const char* filename) {
4247     SkPath path, pathB;
4248     path.setFillType(SkPath::kWinding_FillType);
4249     path.moveTo(0, 3);
4250     path.cubicTo(0, 2, 0, 2, -1.66666663f, 2.16666675f);
4251     path.close();
4252     pathB.setFillType(SkPath::kWinding_FillType);
4253     pathB.moveTo(0, 2);
4254     pathB.cubicTo(0, 2, -1.66666663f, 2.16666675f, 0, 3);
4255     pathB.close();
4256     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4257 }
4258 
loops5i(skiatest::Reporter * reporter,const char * filename)4259 static void loops5i(skiatest::Reporter* reporter, const char* filename) {
4260     SkPath path, pathB;
4261     path.setFillType(SkPath::kWinding_FillType);
4262     path.moveTo(1, 2);
4263     path.cubicTo(0, 2, 0, 2, 0.166666672f, 2.66666675f);
4264     path.close();
4265     pathB.setFillType(SkPath::kWinding_FillType);
4266     pathB.moveTo(0, 2);
4267     pathB.cubicTo(0, 2, 0.166666672f, 2.66666675f, 1, 2);
4268     pathB.close();
4269     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4270 }
4271 
cubicOp142(skiatest::Reporter * reporter,const char * filename)4272 static void cubicOp142(skiatest::Reporter* reporter, const char* filename) {
4273     SkPath path, pathB;
4274     path.setFillType(SkPath::kWinding_FillType);
4275     path.moveTo(5,6);
4276     path.cubicTo(2,5, 2,1, 1,0);
4277     path.close();
4278     pathB.setFillType(SkPath::kWinding_FillType);
4279     pathB.moveTo(1,2);
4280     pathB.cubicTo(0,1, 6,5, 5,2);
4281     pathB.close();
4282     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4283 }
4284 
cubics6d(skiatest::Reporter * reporter,const char * filename)4285 static void cubics6d(skiatest::Reporter* reporter, const char* filename) {
4286     SkPath path, pathB;
4287     path.setFillType(SkPath::kWinding_FillType);
4288     path.moveTo(3, 5);
4289     path.cubicTo(1, 5, 4, 2, 4, 0);
4290     path.close();
4291     pathB.setFillType(SkPath::kWinding_FillType);
4292     pathB.moveTo(2, 4);
4293     pathB.cubicTo(0, 4, 5, 3, 5, 1);
4294     pathB.close();
4295     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4296 }
4297 
cubics7d(skiatest::Reporter * reporter,const char * filename)4298 static void cubics7d(skiatest::Reporter* reporter, const char* filename) {
4299     SkPath path, pathB;
4300     path.setFillType(SkPath::kWinding_FillType);
4301     path.moveTo(2, 6);
4302     path.cubicTo(2, 4, 5, 1, 3, 1);
4303     path.close();
4304     pathB.setFillType(SkPath::kWinding_FillType);
4305     pathB.moveTo(1, 5);
4306     pathB.cubicTo(1, 3, 6, 2, 4, 2);
4307     pathB.close();
4308     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4309 }
4310 
cubics8d(skiatest::Reporter * reporter,const char * filename)4311 static void cubics8d(skiatest::Reporter* reporter, const char* filename) {
4312     SkPath path, pathB;
4313     path.setFillType(SkPath::kWinding_FillType);
4314     path.moveTo(2, 5);
4315     path.cubicTo(2, 4, 5, 1, 3, 2);
4316     path.close();
4317     pathB.setFillType(SkPath::kWinding_FillType);
4318     pathB.moveTo(1, 5);
4319     pathB.cubicTo(2, 3, 5, 2, 4, 2);
4320     pathB.close();
4321     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4322 }
4323 
cubics9d(skiatest::Reporter * reporter,const char * filename)4324 static void cubics9d(skiatest::Reporter* reporter, const char* filename) {
4325     SkPath path, pathB;
4326     path.setFillType(SkPath::kWinding_FillType);
4327     path.moveTo(2, 4);
4328     path.cubicTo(2, 6, 3, 1, 5, 1);
4329     path.close();
4330     pathB.setFillType(SkPath::kWinding_FillType);
4331     pathB.moveTo(1, 3);
4332     pathB.cubicTo(1, 5, 4, 2, 6, 2);
4333     pathB.close();
4334     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4335 }
4336 
cubics10u(skiatest::Reporter * reporter,const char * filename)4337 static void cubics10u(skiatest::Reporter* reporter, const char* filename) {
4338     SkPath path, pathB;
4339     path.setFillType(SkPath::kWinding_FillType);
4340     path.moveTo(2, 4);
4341     path.cubicTo(1, 6, 4, 1, 5, 1);
4342     path.close();
4343     pathB.setFillType(SkPath::kWinding_FillType);
4344     pathB.moveTo(1, 4);
4345     pathB.cubicTo(1, 5, 4, 2, 6, 1);
4346     pathB.close();
4347     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
4348 }
4349 
cubics11i(skiatest::Reporter * reporter,const char * filename)4350 static void cubics11i(skiatest::Reporter* reporter, const char* filename) {
4351     SkPath path, pathB;
4352     path.setFillType(SkPath::kWinding_FillType);
4353     path.moveTo(2, 4);
4354     path.cubicTo(2, 5, 3, 2, 5, 1);
4355     path.close();
4356     pathB.setFillType(SkPath::kWinding_FillType);
4357     pathB.moveTo(2, 3);
4358     pathB.cubicTo(1, 5, 4, 2, 5, 2);
4359     pathB.close();
4360     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4361 }
4362 
cubics12d(skiatest::Reporter * reporter,const char * filename)4363 static void cubics12d(skiatest::Reporter* reporter, const char* filename) {
4364     SkPath path, pathB;
4365     path.setFillType(SkPath::kWinding_FillType);
4366     path.moveTo(2, 4);
4367     path.cubicTo(0, 4, 5, 3, 5, 1);
4368     path.close();
4369     pathB.setFillType(SkPath::kWinding_FillType);
4370     pathB.moveTo(3, 5);
4371     pathB.cubicTo(1, 5, 4, 2, 4, 0);
4372     pathB.close();
4373     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4374 }
4375 
cubics13d(skiatest::Reporter * reporter,const char * filename)4376 static void cubics13d(skiatest::Reporter* reporter, const char* filename) {
4377     SkPath path, pathB;
4378     path.setFillType(SkPath::kWinding_FillType);
4379     path.moveTo(2, 3);
4380     path.cubicTo(1, 5, 4, 2, 5, 2);
4381     path.close();
4382     pathB.setFillType(SkPath::kWinding_FillType);
4383     pathB.moveTo(2, 4);
4384     pathB.cubicTo(2, 5, 3, 2, 5, 1);
4385     pathB.close();
4386     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4387 }
4388 
cubics14d(skiatest::Reporter * reporter,const char * filename)4389 static void cubics14d(skiatest::Reporter* reporter, const char* filename) {
4390     SkPath path, pathB;
4391     path.setFillType(SkPath::kWinding_FillType);
4392     path.moveTo(2, 3);
4393     path.cubicTo(0, 4, 3, 1, 3, 0);
4394     path.close();
4395     pathB.setFillType(SkPath::kWinding_FillType);
4396     pathB.moveTo(1, 3);
4397     pathB.cubicTo(0, 3, 3, 2, 4, 0);
4398     pathB.close();
4399     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4400 }
4401 
cubics15d(skiatest::Reporter * reporter,const char * filename)4402 static void cubics15d(skiatest::Reporter* reporter, const char* filename) {
4403     SkPath path, pathB;
4404     path.setFillType(SkPath::kWinding_FillType);
4405     path.moveTo(1, 5);
4406     path.cubicTo(3, 5, 4, 0, 4, 2);
4407     path.close();
4408     pathB.setFillType(SkPath::kWinding_FillType);
4409     pathB.moveTo(0, 4);
4410     pathB.cubicTo(2, 4, 5, 1, 5, 3);
4411     pathB.close();
4412     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4413 }
4414 
cubics16i(skiatest::Reporter * reporter,const char * filename)4415 static void cubics16i(skiatest::Reporter* reporter, const char* filename) {
4416     SkPath path, pathB;
4417     path.setFillType(SkPath::kWinding_FillType);
4418     path.moveTo(1, 5);
4419     path.cubicTo(2, 5, 5, 0, 4, 2);
4420     path.close();
4421     pathB.setFillType(SkPath::kWinding_FillType);
4422     pathB.moveTo(0, 5);
4423     pathB.cubicTo(2, 4, 5, 1, 5, 2);
4424     pathB.close();
4425     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4426 }
4427 
cubics17d(skiatest::Reporter * reporter,const char * filename)4428 static void cubics17d(skiatest::Reporter* reporter, const char* filename) {
4429     SkPath path, pathB;
4430     path.setFillType(SkPath::kWinding_FillType);
4431     path.moveTo(1, 5);
4432     path.cubicTo(3, 4, 4, 1, 4, 2);
4433     path.close();
4434     pathB.setFillType(SkPath::kWinding_FillType);
4435     pathB.moveTo(1, 4);
4436     pathB.cubicTo(2, 4, 5, 1, 4, 3);
4437     pathB.close();
4438     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4439 }
4440 
cubics18d(skiatest::Reporter * reporter,const char * filename)4441 static void cubics18d(skiatest::Reporter* reporter, const char* filename) {
4442     SkPath path, pathB;
4443     path.setFillType(SkPath::kWinding_FillType);
4444     path.moveTo(1, 5);
4445     path.cubicTo(1, 3, 4, 0, 2, 0);
4446     path.close();
4447     pathB.setFillType(SkPath::kWinding_FillType);
4448     pathB.moveTo(0, 4);
4449     pathB.cubicTo(0, 2, 5, 1, 3, 1);
4450     pathB.close();
4451     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4452 }
4453 
cubics19d(skiatest::Reporter * reporter,const char * filename)4454 static void cubics19d(skiatest::Reporter* reporter, const char* filename) {
4455     SkPath path, pathB;
4456     path.setFillType(SkPath::kWinding_FillType);
4457     path.moveTo(1, 5);
4458     path.cubicTo(2, 3, 5, 2, 4, 2);
4459     path.close();
4460     pathB.setFillType(SkPath::kWinding_FillType);
4461     pathB.moveTo(2, 5);
4462     pathB.cubicTo(2, 4, 5, 1, 3, 2);
4463     pathB.close();
4464     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4465 }
4466 
cubicOp157(skiatest::Reporter * reporter,const char * filename)4467 static void cubicOp157(skiatest::Reporter* reporter, const char* filename) {
4468     SkPath path, pathB;
4469     path.setFillType(SkPath::kWinding_FillType);
4470     path.moveTo(1,5);
4471     path.cubicTo(1,3, 6,2, 4,2);
4472     path.close();
4473     pathB.setFillType(SkPath::kWinding_FillType);
4474     pathB.moveTo(2,6);
4475     pathB.cubicTo(2,4, 5,1, 3,1);
4476     pathB.close();
4477     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4478 }
4479 
cubics20d(skiatest::Reporter * reporter,const char * filename)4480 static void cubics20d(skiatest::Reporter* reporter, const char* filename) {
4481     SkPath path, pathB;
4482     path.setFillType(SkPath::kWinding_FillType);
4483     path.moveTo(1, 2);
4484     path.cubicTo(0, 3, 6, 0, 3, 2);
4485     path.close();
4486     pathB.setFillType(SkPath::kWinding_FillType);
4487     pathB.moveTo(0, 6);
4488     pathB.cubicTo(2, 3, 2, 1, 3, 0);
4489     pathB.close();
4490     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
4491 }
4492 
loops20i(skiatest::Reporter * reporter,const char * filename)4493 static void loops20i(skiatest::Reporter* reporter, const char* filename) {
4494     SkPath path, pathB;
4495     path.setFillType(SkPath::kWinding_FillType);
4496     path.moveTo(1, 2);
4497     path.cubicTo(0, 2, 0.833333313f, 2, 1, 3.66666651f);
4498     path.close();
4499     pathB.setFillType(SkPath::kWinding_FillType);
4500     pathB.moveTo(0, 2);
4501     pathB.cubicTo(0.833333313f, 2, 1, 3.66666651f, 1, 2);
4502     pathB.close();
4503     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4504 }
4505 
loops21i(skiatest::Reporter * reporter,const char * filename)4506 static void loops21i(skiatest::Reporter* reporter, const char* filename) {
4507     SkPath path, pathB;
4508     path.setFillType(SkPath::kWinding_FillType);
4509     path.moveTo(1, 2);
4510     path.cubicTo(0, 2, 0.833333313f, 2, 1, 4);
4511     path.close();
4512     pathB.setFillType(SkPath::kWinding_FillType);
4513     pathB.moveTo(0, 2);
4514     pathB.cubicTo(0.833333313f, 2, 1, 4, 1, 2);
4515     pathB.close();
4516     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4517 }
4518 
loops22i(skiatest::Reporter * reporter,const char * filename)4519 static void loops22i(skiatest::Reporter* reporter, const char* filename) {
4520     SkPath path, pathB;
4521     path.setFillType(SkPath::kWinding_FillType);
4522     path.moveTo(1, 3);
4523     path.cubicTo(0, 3, 0.833333313f, 3, 1, 4.66666651f);
4524     path.close();
4525     pathB.setFillType(SkPath::kWinding_FillType);
4526     pathB.moveTo(0, 3);
4527     pathB.cubicTo(0.833333313f, 3, 1, 4.66666651f, 1, 3);
4528     pathB.close();
4529     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4530 }
4531 
loops23i(skiatest::Reporter * reporter,const char * filename)4532 static void loops23i(skiatest::Reporter* reporter, const char* filename) {
4533     SkPath path, pathB;
4534     path.setFillType(SkPath::kWinding_FillType);
4535     path.moveTo(1, 5);
4536     path.cubicTo(0, 1, 6.16666698f, 5.66666698f, -5.66666651f, 6.66666651f);
4537     path.close();
4538     pathB.setFillType(SkPath::kWinding_FillType);
4539     pathB.moveTo(0, 1);
4540     pathB.cubicTo(6.16666698f, 5.66666698f, -5.66666651f, 6.66666651f, 1, 5);
4541     pathB.close();
4542     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4543 }
4544 
loops24i(skiatest::Reporter * reporter,const char * filename)4545 static void loops24i(skiatest::Reporter* reporter, const char* filename) {
4546     SkPath path, pathB;
4547     path.setFillType(SkPath::kWinding_FillType);
4548     path.moveTo(1, 2);
4549     path.cubicTo(0, 2, 0.833333313f, 2, 1, 3);
4550     path.close();
4551     pathB.setFillType(SkPath::kWinding_FillType);
4552     pathB.moveTo(0, 2);
4553     pathB.cubicTo(0.833333313f, 2, 1, 3, 1, 2);
4554     pathB.close();
4555     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4556 }
4557 
loops25i(skiatest::Reporter * reporter,const char * filename)4558 static void loops25i(skiatest::Reporter* reporter, const char* filename) {
4559     SkPath path, pathB;
4560     path.setFillType(SkPath::kWinding_FillType);
4561     path.moveTo(1, 5);
4562     path.cubicTo(0, 5, 0.833333313f, 5, 1, 7);
4563     path.close();
4564     pathB.setFillType(SkPath::kWinding_FillType);
4565     pathB.moveTo(0, 5);
4566     pathB.cubicTo(0.833333313f, 5, 1, 7, 1, 5);
4567     pathB.close();
4568     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4569 }
4570 
loops26i(skiatest::Reporter * reporter,const char * filename)4571 static void loops26i(skiatest::Reporter* reporter, const char* filename) {
4572     SkPath path, pathB;
4573     path.setFillType(SkPath::kWinding_FillType);
4574     path.moveTo(1, 6);
4575     path.cubicTo(0, 2, 6.16666698f, 6.66666698f, -5.66666651f, 7.66666651f);
4576     path.close();
4577     pathB.setFillType(SkPath::kWinding_FillType);
4578     pathB.moveTo(0, 2);
4579     pathB.cubicTo(6.16666698f, 6.66666698f, -5.66666651f, 7.66666651f, 1, 6);
4580     pathB.close();
4581     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4582 }
4583 
loops27i(skiatest::Reporter * reporter,const char * filename)4584 static void loops27i(skiatest::Reporter* reporter, const char* filename) {
4585     SkPath path, pathB;
4586     path.setFillType(SkPath::kWinding_FillType);
4587     path.moveTo(1, 3);
4588     path.cubicTo(0, 3, 0.833333313f, 3, 1, 4.33333349f);
4589     path.close();
4590     pathB.setFillType(SkPath::kWinding_FillType);
4591     pathB.moveTo(0, 3);
4592     pathB.cubicTo(0.833333313f, 3, 1, 4.33333349f, 1, 3);
4593     pathB.close();
4594     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4595 }
4596 
loops28i(skiatest::Reporter * reporter,const char * filename)4597 static void loops28i(skiatest::Reporter* reporter, const char* filename) {
4598     SkPath path, pathB;
4599     path.setFillType(SkPath::kWinding_FillType);
4600     path.moveTo(2, 3);
4601     path.cubicTo(1, 3, 1.83333337f, 3, 2, 4.66666651f);
4602     path.close();
4603     pathB.setFillType(SkPath::kWinding_FillType);
4604     pathB.moveTo(1, 3);
4605     pathB.cubicTo(1.83333337f, 3, 2, 4.66666651f, 2, 3);
4606     pathB.close();
4607     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4608 }
4609 
loops29i(skiatest::Reporter * reporter,const char * filename)4610 static void loops29i(skiatest::Reporter* reporter, const char* filename) {
4611     SkPath path, pathB;
4612     path.setFillType(SkPath::kWinding_FillType);
4613     path.moveTo(2, 4);
4614     path.cubicTo(0, 4, 1.66666663f, 4, 2, 7.33333302f);
4615     path.close();
4616     pathB.setFillType(SkPath::kWinding_FillType);
4617     pathB.moveTo(0, 4);
4618     pathB.cubicTo(1.66666663f, 4, 2, 7.33333302f, 2, 4);
4619     pathB.close();
4620     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4621 }
4622 
loops30i(skiatest::Reporter * reporter,const char * filename)4623 static void loops30i(skiatest::Reporter* reporter, const char* filename) {
4624     SkPath path, pathB;
4625     path.setFillType(SkPath::kWinding_FillType);
4626     path.moveTo(2, 4);
4627     path.cubicTo(0, 4, 1.66666663f, 4, 2, 8);
4628     path.close();
4629     pathB.setFillType(SkPath::kWinding_FillType);
4630     pathB.moveTo(0, 4);
4631     pathB.cubicTo(1.66666663f, 4, 2, 8, 2, 4);
4632     pathB.close();
4633     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4634 }
4635 
loops31i(skiatest::Reporter * reporter,const char * filename)4636 static void loops31i(skiatest::Reporter* reporter, const char* filename) {
4637     SkPath path, pathB;
4638     path.setFillType(SkPath::kWinding_FillType);
4639     path.moveTo(2, 5);
4640     path.cubicTo(1, 5, 1.83333337f, 5, 2, 6.66666651f);
4641     path.close();
4642     pathB.setFillType(SkPath::kWinding_FillType);
4643     pathB.moveTo(1, 5);
4644     pathB.cubicTo(1.83333337f, 5, 2, 6.66666651f, 2, 5);
4645     pathB.close();
4646     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4647 }
4648 
loops32i(skiatest::Reporter * reporter,const char * filename)4649 static void loops32i(skiatest::Reporter* reporter, const char* filename) {
4650     SkPath path, pathB;
4651     path.setFillType(SkPath::kWinding_FillType);
4652     path.moveTo(2, 6);
4653     path.cubicTo(1, 6, 1.83333337f, 6, 2, 8);
4654     path.close();
4655     pathB.setFillType(SkPath::kWinding_FillType);
4656     pathB.moveTo(1, 6);
4657     pathB.cubicTo(1.83333337f, 6, 2, 8, 2, 6);
4658     pathB.close();
4659     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4660 }
4661 
loops33i(skiatest::Reporter * reporter,const char * filename)4662 static void loops33i(skiatest::Reporter* reporter, const char* filename) {
4663     SkPath path, pathB;
4664     path.setFillType(SkPath::kWinding_FillType);
4665     path.moveTo(2, 6);
4666     path.cubicTo(1, 2, 7.16666698f, 6.66666698f, -4.66666651f, 7.66666651f);
4667     path.close();
4668     pathB.setFillType(SkPath::kWinding_FillType);
4669     pathB.moveTo(1, 2);
4670     pathB.cubicTo(7.16666698f, 6.66666698f, -4.66666651f, 7.66666651f, 2, 6);
4671     pathB.close();
4672     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4673 }
4674 
loops33iMod(skiatest::Reporter * reporter,const char * filename)4675 static void loops33iMod(skiatest::Reporter* reporter, const char* filename) {
4676     SkPoint pts[] = {{2, 6}, {1, 2}, {7.16666698f, 6.66666698f}, {-4.66666651f, 7.66666651f},
4677                      {1, 2}, {7.16666698f, 6.66666698f}, {-4.66666651f, 7.66666651f}, {2, 6}};
4678     bool up = false;
4679     float offset = 0.0380172729f;
4680     float step = 7.62939453e-006f;
4681     bool lastResult = true;
4682  //   for (int i = 0; i < 30; ++i) {
4683         SkString name(filename);
4684  //       name.appendS32(i);
4685  //       if (i > 0) {
4686  //           SkDebugf("\n\n<div id=\"%s\">\n", name.c_str());
4687  //       }
4688         pts[5].fY = 6.66666698f + offset;
4689         SkPath path, pathB;
4690         path.setFillType(SkPath::kWinding_FillType);
4691         path.moveTo(pts[0]);
4692         path.cubicTo(pts[1], pts[2], pts[3]);
4693         path.close();
4694         pathB.setFillType(SkPath::kWinding_FillType);
4695         pathB.moveTo(pts[4]);
4696         pathB.cubicTo(pts[5], pts[6], pts[7]);
4697         pathB.close();
4698         bool result = testPathOp(reporter, path, pathB, kIntersect_SkPathOp, name.c_str());
4699         if (lastResult != result) {
4700             up = !up;
4701         }
4702         step /= 2;
4703         offset += up ? step : -step;
4704         lastResult = result;
4705  //   }
4706 }
4707 
4708 
loops33iAsQuads(skiatest::Reporter * reporter,const char * filename)4709 static void loops33iAsQuads(skiatest::Reporter* reporter, const char* filename) {
4710     SkPath path, pathB;
4711     path.setFillType(SkPath::kWinding_FillType);
4712     path.moveTo(2, 6);
4713     path.cubicTo(1, 2, 7.16666698f, 6.66666698f, -4.66666651f, 7.66666651f);
4714     path.close();
4715     pathB.setFillType(SkPath::kWinding_FillType);
4716     pathB.moveTo(1, 2);
4717     pathB.cubicTo(7.16666698f, 6.66666698f, -4.66666651f, 7.66666651f, 2, 6);
4718     pathB.close();
4719     SkPath qPath, qPathB;
4720     CubicPathToQuads(path, &qPath);
4721     CubicPathToQuads(pathB, &qPathB);
4722     testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
4723 }
4724 
loops34i(skiatest::Reporter * reporter,const char * filename)4725 static void loops34i(skiatest::Reporter* reporter, const char* filename) {
4726     SkPath path, pathB;
4727     path.setFillType(SkPath::kWinding_FillType);
4728     path.moveTo(3, 4);
4729     path.cubicTo(0, 4, 2.5f, 4, 3, 9);
4730     path.close();
4731     pathB.setFillType(SkPath::kWinding_FillType);
4732     pathB.moveTo(0, 4);
4733     pathB.cubicTo(2.5f, 4, 3, 9, 3, 4);
4734     pathB.close();
4735     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4736 }
4737 
loops35i(skiatest::Reporter * reporter,const char * filename)4738 static void loops35i(skiatest::Reporter* reporter, const char* filename) {
4739     SkPath path, pathB;
4740     path.setFillType(SkPath::kWinding_FillType);
4741     path.moveTo(3, 4);
4742     path.cubicTo(0, 4, 2.5f, 4, 3, 10);
4743     path.close();
4744     pathB.setFillType(SkPath::kWinding_FillType);
4745     pathB.moveTo(0, 4);
4746     pathB.cubicTo(2.5f, 4, 3, 10, 3, 4);
4747     pathB.close();
4748     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4749 }
4750 
loops36i(skiatest::Reporter * reporter,const char * filename)4751 static void loops36i(skiatest::Reporter* reporter, const char* filename) {
4752     SkPath path, pathB;
4753     path.setFillType(SkPath::kWinding_FillType);
4754     path.moveTo(3, 4);
4755     path.cubicTo(1, 4, 2.66666675f, 4, 3, 8);
4756     path.close();
4757     pathB.setFillType(SkPath::kWinding_FillType);
4758     pathB.moveTo(1, 4);
4759     pathB.cubicTo(2.66666675f, 4, 3, 8, 3, 4);
4760     pathB.close();
4761     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4762 }
4763 
loops37i(skiatest::Reporter * reporter,const char * filename)4764 static void loops37i(skiatest::Reporter* reporter, const char* filename) {
4765     SkPath path, pathB;
4766     path.setFillType(SkPath::kWinding_FillType);
4767     path.moveTo(2, 4);
4768     path.cubicTo(1, 4, 1.83333337f, 4, 2, 5.33333349f);
4769     path.close();
4770     pathB.setFillType(SkPath::kWinding_FillType);
4771     pathB.moveTo(1, 4);
4772     pathB.cubicTo(1.83333337f, 4, 2, 5.33333349f, 2, 4);
4773     pathB.close();
4774     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4775 }
4776 
loops38i(skiatest::Reporter * reporter,const char * filename)4777 static void loops38i(skiatest::Reporter* reporter, const char* filename) {
4778     SkPath path, pathB;
4779     path.setFillType(SkPath::kWinding_FillType);
4780     path.moveTo(3, 4);
4781     path.cubicTo(2, 4, 2.83333325f, 4, 3, 6);
4782     path.close();
4783     pathB.setFillType(SkPath::kWinding_FillType);
4784     pathB.moveTo(2, 4);
4785     pathB.cubicTo(2.83333325f, 4, 3, 6, 3, 4);
4786     pathB.close();
4787     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4788 }
4789 
loops39i(skiatest::Reporter * reporter,const char * filename)4790 static void loops39i(skiatest::Reporter* reporter, const char* filename) {
4791     SkPath path, pathB;
4792     path.setFillType(SkPath::kWinding_FillType);
4793     path.moveTo(3, 5);
4794     path.cubicTo(0, 5, 2.5f, 5, 3, 10);
4795     path.close();
4796     pathB.setFillType(SkPath::kWinding_FillType);
4797     pathB.moveTo(0, 5);
4798     pathB.cubicTo(2.5f, 5, 3, 10, 3, 5);
4799     pathB.close();
4800     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4801 }
4802 
loops40i(skiatest::Reporter * reporter,const char * filename)4803 static void loops40i(skiatest::Reporter* reporter, const char* filename) {
4804     SkPath path, pathB;
4805     path.setFillType(SkPath::kWinding_FillType);
4806     path.moveTo(3, 5);
4807     path.cubicTo(0, 5, 2.5f, 5, 3, 11);
4808     path.close();
4809     pathB.setFillType(SkPath::kWinding_FillType);
4810     pathB.moveTo(0, 5);
4811     pathB.cubicTo(2.5f, 5, 3, 11, 3, 5);
4812     pathB.close();
4813     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4814 }
4815 
loops40iAsQuads(skiatest::Reporter * reporter,const char * filename)4816 static void loops40iAsQuads(skiatest::Reporter* reporter, const char* filename) {
4817     SkPath path, pathB;
4818     path.setFillType(SkPath::kWinding_FillType);
4819     path.moveTo(3, 5);
4820     path.cubicTo(0, 5, 2.5f, 5, 3, 11);
4821     path.close();
4822     pathB.setFillType(SkPath::kWinding_FillType);
4823     pathB.moveTo(0, 5);
4824     pathB.cubicTo(2.5f, 5, 3, 11, 3, 5);
4825     pathB.close();
4826     SkPath qPath, qPathB;
4827     CubicPathToQuads(path, &qPath);
4828     CubicPathToQuads(pathB, &qPathB);
4829     testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
4830 }
4831 
loops44i(skiatest::Reporter * reporter,const char * filename)4832 static void loops44i(skiatest::Reporter* reporter, const char* filename) {
4833     SkPath path, pathB;
4834     path.setFillType(SkPath::kWinding_FillType);
4835     path.moveTo(1, 5);
4836     path.cubicTo(0, 1, 7.33333302f, 5.33333349f, -7, 7);
4837     path.close();
4838     pathB.setFillType(SkPath::kWinding_FillType);
4839     pathB.moveTo(0, 1);
4840     pathB.cubicTo(7.33333302f, 5.33333349f, -7, 7, 1, 5);
4841     pathB.close();
4842     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4843 }
4844 
loops45i(skiatest::Reporter * reporter,const char * filename)4845 static void loops45i(skiatest::Reporter* reporter, const char* filename) {
4846     SkPath path, pathB;
4847     path.setFillType(SkPath::kWinding_FillType);
4848     path.moveTo(1, 6);
4849     path.cubicTo(0, 2, 7.33333302f, 6.33333302f, -7, 8);
4850     path.close();
4851     pathB.setFillType(SkPath::kWinding_FillType);
4852     pathB.moveTo(0, 2);
4853     pathB.cubicTo(7.33333302f, 6.33333302f, -7, 8, 1, 6);
4854     pathB.close();
4855     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4856 }
4857 
loops46i(skiatest::Reporter * reporter,const char * filename)4858 static void loops46i(skiatest::Reporter* reporter, const char* filename) {
4859     SkPath path, pathB;
4860     path.setFillType(SkPath::kWinding_FillType);
4861     path.moveTo(2, 6);
4862     path.cubicTo(1, 2, 8.33333302f, 6.33333302f, -6, 8);
4863     path.close();
4864     pathB.setFillType(SkPath::kWinding_FillType);
4865     pathB.moveTo(1, 2);
4866     pathB.cubicTo(8.33333302f, 6.33333302f, -6, 8, 2, 6);
4867     pathB.close();
4868     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4869 }
4870 
4871 /*
4872 FAILED: d:\cygwin\puregit\tests\pathopsextendedtest.cpp:346    0 */
loops47i(skiatest::Reporter * reporter,const char * filename)4873 static void loops47i(skiatest::Reporter* reporter, const char* filename) {
4874     SkPath path, pathB;
4875     path.setFillType(SkPath::kWinding_FillType);
4876     path.moveTo(2, 4);
4877     path.cubicTo(0, 1, 6, 5.83333302f, -4, 8);
4878     path.close();
4879     pathB.setFillType(SkPath::kWinding_FillType);
4880     pathB.moveTo(0, 1);
4881     pathB.cubicTo(6, 5.83333302f, -4, 8, 2, 4);
4882     pathB.close();
4883     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4884 }
4885 
loops48i(skiatest::Reporter * reporter,const char * filename)4886 static void loops48i(skiatest::Reporter* reporter, const char* filename) {
4887     SkPath path, pathB;
4888     path.setFillType(SkPath::kWinding_FillType);
4889     path.moveTo(2, 6);
4890     path.cubicTo(0, 1, 9.33333302f, 6.83333302f, -8.33333302f, 9.16666603f);
4891     path.close();
4892     pathB.setFillType(SkPath::kWinding_FillType);
4893     pathB.moveTo(0, 1);
4894     pathB.cubicTo(9.33333302f, 6.83333302f, -8.33333302f, 9.16666603f, 2, 6);
4895     pathB.close();
4896     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4897 }
4898 
loops49i(skiatest::Reporter * reporter,const char * filename)4899 static void loops49i(skiatest::Reporter* reporter, const char* filename) {
4900     SkPath path, pathB;
4901     path.setFillType(SkPath::kWinding_FillType);
4902     path.moveTo(0, 2);
4903     path.cubicTo(1, 4, -0.166666687f, 2.66666675f, 1.66666675f, 2);
4904     path.close();
4905     pathB.setFillType(SkPath::kWinding_FillType);
4906     pathB.moveTo(1, 4);
4907     pathB.cubicTo(-0.166666687f, 2.66666675f, 1.66666675f, 2, 0, 2);
4908     pathB.close();
4909     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4910 }
4911 
loops50i(skiatest::Reporter * reporter,const char * filename)4912 static void loops50i(skiatest::Reporter* reporter, const char* filename) {
4913     SkPath path, pathB;
4914     path.setFillType(SkPath::kWinding_FillType);
4915     path.moveTo(0, 3);
4916     path.cubicTo(1, 5, -0.166666687f, 3.66666675f, 1.66666675f, 3);
4917     path.close();
4918     pathB.setFillType(SkPath::kWinding_FillType);
4919     pathB.moveTo(1, 5);
4920     pathB.cubicTo(-0.166666687f, 3.66666675f, 1.66666675f, 3, 0, 3);
4921     pathB.close();
4922     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4923 }
4924 
loops51i(skiatest::Reporter * reporter,const char * filename)4925 static void loops51i(skiatest::Reporter* reporter, const char* filename) {
4926     SkPath path, pathB;
4927     path.setFillType(SkPath::kWinding_FillType);
4928     path.moveTo(1, 2);
4929     path.cubicTo(2, 4, 0.833333313f, 2.66666675f, 2.66666675f, 2);
4930     path.close();
4931     pathB.setFillType(SkPath::kWinding_FillType);
4932     pathB.moveTo(2, 4);
4933     pathB.cubicTo(0.833333313f, 2.66666675f, 2.66666675f, 2, 1, 2);
4934     pathB.close();
4935     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4936 }
4937 
loops52i(skiatest::Reporter * reporter,const char * filename)4938 static void loops52i(skiatest::Reporter* reporter, const char* filename) {
4939     SkPath path, pathB;
4940     path.setFillType(SkPath::kWinding_FillType);
4941     path.moveTo(1, 3);
4942     path.cubicTo(2, 5, 0.833333313f, 3.66666675f, 2.66666675f, 3);
4943     path.close();
4944     pathB.setFillType(SkPath::kWinding_FillType);
4945     pathB.moveTo(2, 5);
4946     pathB.cubicTo(0.833333313f, 3.66666675f, 2.66666675f, 3, 1, 3);
4947     pathB.close();
4948     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4949 }
4950 
loops53i(skiatest::Reporter * reporter,const char * filename)4951 static void loops53i(skiatest::Reporter* reporter, const char* filename) {
4952     SkPath path, pathB;
4953     path.setFillType(SkPath::kWinding_FillType);
4954     path.moveTo(2, 3);
4955     path.cubicTo(3, 5, 1.83333325f, 3.66666675f, 3.66666651f, 3);
4956     path.close();
4957     pathB.setFillType(SkPath::kWinding_FillType);
4958     pathB.moveTo(3, 5);
4959     pathB.cubicTo(1.83333325f, 3.66666675f, 3.66666651f, 3, 2, 3);
4960     pathB.close();
4961     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4962 }
4963 
loops54i(skiatest::Reporter * reporter,const char * filename)4964 static void loops54i(skiatest::Reporter* reporter, const char* filename) {
4965     SkPath path, pathB;
4966     path.setFillType(SkPath::kWinding_FillType);
4967     path.moveTo(0, 2);
4968     path.cubicTo(1, 4, 0, 3, 1.66666675f, 2);
4969     path.close();
4970     pathB.setFillType(SkPath::kWinding_FillType);
4971     pathB.moveTo(1, 4);
4972     pathB.cubicTo(0, 3, 1.66666675f, 2, 0, 2);
4973     pathB.close();
4974     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4975 }
4976 
loops55i(skiatest::Reporter * reporter,const char * filename)4977 static void loops55i(skiatest::Reporter* reporter, const char* filename) {
4978     SkPath path, pathB;
4979     path.setFillType(SkPath::kWinding_FillType);
4980     path.moveTo(0, 3);
4981     path.cubicTo(1, 5, 0, 4, 1.66666675f, 3);
4982     path.close();
4983     pathB.setFillType(SkPath::kWinding_FillType);
4984     pathB.moveTo(1, 5);
4985     pathB.cubicTo(0, 4, 1.66666675f, 3, 0, 3);
4986     pathB.close();
4987     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
4988 }
4989 
loops56i(skiatest::Reporter * reporter,const char * filename)4990 static void loops56i(skiatest::Reporter* reporter, const char* filename) {
4991     SkPath path, pathB;
4992     path.setFillType(SkPath::kWinding_FillType);
4993     path.moveTo(1, 2);
4994     path.cubicTo(2, 4, 0.99999994f, 3, 2.66666675f, 2);
4995     path.close();
4996     pathB.setFillType(SkPath::kWinding_FillType);
4997     pathB.moveTo(2, 4);
4998     pathB.cubicTo(0.99999994f, 3, 2.66666675f, 2, 1, 2);
4999     pathB.close();
5000     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5001 }
5002 
loops57i(skiatest::Reporter * reporter,const char * filename)5003 static void loops57i(skiatest::Reporter* reporter, const char* filename) {
5004     SkPath path, pathB;
5005     path.setFillType(SkPath::kWinding_FillType);
5006     path.moveTo(1, 3);
5007     path.cubicTo(2, 5, 0.99999994f, 4, 2.66666675f, 3);
5008     path.close();
5009     pathB.setFillType(SkPath::kWinding_FillType);
5010     pathB.moveTo(2, 5);
5011     pathB.cubicTo(0.99999994f, 4, 2.66666675f, 3, 1, 3);
5012     pathB.close();
5013     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5014 }
5015 
loops58i(skiatest::Reporter * reporter,const char * filename)5016 static void loops58i(skiatest::Reporter* reporter, const char* filename) {
5017     SkPath path, pathB;
5018     path.setFillType(SkPath::kWinding_FillType);
5019     path.moveTo(2, 3);
5020     path.cubicTo(3, 5, 2, 4, 3.66666651f, 3);
5021     path.close();
5022     pathB.setFillType(SkPath::kWinding_FillType);
5023     pathB.moveTo(3, 5);
5024     pathB.cubicTo(2, 4, 3.66666651f, 3, 2, 3);
5025     pathB.close();
5026     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5027 }
5028 
loops58iAsQuads(skiatest::Reporter * reporter,const char * filename)5029 static void loops58iAsQuads(skiatest::Reporter* reporter, const char* filename) {
5030     SkPath path, pathB;
5031     path.setFillType(SkPath::kWinding_FillType);
5032     path.moveTo(2, 3);
5033     path.cubicTo(3, 5, 2, 4, 3.66666651f, 3);
5034     path.close();
5035     pathB.setFillType(SkPath::kWinding_FillType);
5036     pathB.moveTo(3, 5);
5037     pathB.cubicTo(2, 4, 3.66666651f, 3, 2, 3);
5038     pathB.close();
5039     SkPath qPath, qPathB;
5040     CubicPathToQuads(path, &qPath);
5041     CubicPathToQuads(pathB, &qPathB);
5042 //    SkPoint from = {2.61714339f,1.90228665f};
5043 //    SkPoint to = {2.617045833359139f,1.9013528935803314f};
5044 //    path_edit(from, to, &qPathB);
5045     testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
5046 }
5047 
loops59i(skiatest::Reporter * reporter,const char * filename)5048 static void loops59i(skiatest::Reporter* reporter, const char* filename) {
5049     SkPath path, pathB;
5050     path.setFillType(SkPath::kWinding_FillType);
5051     path.moveTo(0, 6);
5052     path.cubicTo(1, 2, 7.33333302f, 1.66666663f, -7.5f, 2);
5053     path.close();
5054     pathB.setFillType(SkPath::kWinding_FillType);
5055     pathB.moveTo(1, 2);
5056     pathB.cubicTo(7.33333302f, 1.66666663f, -7.5f, 2, 0, 6);
5057     pathB.close();
5058     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5059 }
5060 
loops59iasQuads(skiatest::Reporter * reporter,const char * filename)5061 static void loops59iasQuads(skiatest::Reporter* reporter, const char* filename) {
5062     SkPath path, pathB;
5063     path.setFillType(SkPath::kWinding_FillType);
5064     path.moveTo(0, 6);
5065     path.cubicTo(1, 2, 7.33333302f, 1.66666663f, -7.5f, 2);
5066     path.close();
5067     pathB.setFillType(SkPath::kWinding_FillType);
5068     pathB.moveTo(1, 2);
5069     pathB.cubicTo(7.33333302f, 1.66666663f, -7.5f, 2, 0, 6);
5070     pathB.close();
5071     SkPath qPath, qPathB;
5072     CubicPathToQuads(path, &qPath);
5073     CubicPathToQuads(pathB, &qPathB);
5074     SkPoint from = {2.61714339f,1.90228665f};
5075     SkPoint to = {2.617045833359139f,1.9013528935803314f};
5076     path_edit(from, to, &qPathB);
5077     testPathOp(reporter, qPath, qPathB, kIntersect_SkPathOp, filename);
5078 }
5079 
cubics41d(skiatest::Reporter * reporter,const char * filename)5080 static void cubics41d(skiatest::Reporter* reporter, const char* filename) {
5081     SkPath path, pathB;
5082     path.setFillType(SkPath::kWinding_FillType);
5083     path.moveTo(0, 1);
5084     path.cubicTo(1, 4, 3, 0, 3, 1);
5085     path.close();
5086     pathB.setFillType(SkPath::kWinding_FillType);
5087     pathB.moveTo(0, 3);
5088     pathB.cubicTo(1, 3, 1, 0, 4, 1);
5089     pathB.close();
5090     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5091 }
5092 
loops61i(skiatest::Reporter * reporter,const char * filename)5093 void loops61i(skiatest::Reporter* reporter, const char* filename) {
5094     SkPath path, pathB;
5095     path.setFillType(SkPath::kWinding_FillType);
5096     path.moveTo(0, 1);
5097     path.cubicTo(1, 5, -6.33333302f, 0.666666627f, 8, -1);
5098     path.close();
5099     pathB.setFillType(SkPath::kWinding_FillType);
5100     pathB.moveTo(1, 5);
5101     pathB.cubicTo(-6.33333302f, 0.666666627f, 8, -1, 0, 1);
5102     pathB.close();
5103     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5104 }
5105 
loops62i(skiatest::Reporter * reporter,const char * filename)5106 static void loops62i(skiatest::Reporter* reporter, const char* filename) {
5107     SkPath path, pathB;
5108     path.setFillType(SkPath::kWinding_FillType);
5109     path.moveTo(0, 2);
5110     path.cubicTo(1, 6, -6.33333302f, 1.66666663f, 8, 0);
5111     path.close();
5112     pathB.setFillType(SkPath::kWinding_FillType);
5113     pathB.moveTo(1, 6);
5114     pathB.cubicTo(-6.33333302f, 1.66666663f, 8, 0, 0, 2);
5115     pathB.close();
5116     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5117 }
5118 
loops63i(skiatest::Reporter * reporter,const char * filename)5119 static void loops63i(skiatest::Reporter* reporter, const char* filename) {
5120     SkPath path, pathB;
5121     path.setFillType(SkPath::kWinding_FillType);
5122     path.moveTo(0, 1);
5123     path.cubicTo(2, 4, -4, -0.833333254f, 6, -3);
5124     path.close();
5125     pathB.setFillType(SkPath::kWinding_FillType);
5126     pathB.moveTo(2, 4);
5127     pathB.cubicTo(-4, -0.833333254f, 6, -3, 0, 1);
5128     pathB.close();
5129     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5130 }
5131 
cubics44d(skiatest::Reporter * reporter,const char * filename)5132 static void cubics44d(skiatest::Reporter* reporter, const char* filename) {
5133     SkPath path, pathB;
5134     path.setFillType(SkPath::kWinding_FillType);
5135     path.moveTo(3, 4);
5136     path.cubicTo(2, 5, 3, 1, 6, 2);
5137     path.close();
5138     pathB.setFillType(SkPath::kWinding_FillType);
5139     pathB.moveTo(1, 3);
5140     pathB.cubicTo(2, 6, 4, 3, 5, 2);
5141     pathB.close();
5142     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5143 }
5144 
cubics45u(skiatest::Reporter * reporter,const char * filename)5145 static void cubics45u(skiatest::Reporter* reporter, const char* filename) {
5146     SkPath path, pathB;
5147     path.setFillType(SkPath::kWinding_FillType);
5148     path.moveTo(1, 3);
5149     path.cubicTo(2, 6, 4, 3, 5, 2);
5150     path.close();
5151     pathB.setFillType(SkPath::kWinding_FillType);
5152     pathB.moveTo(3, 4);
5153     pathB.cubicTo(2, 5, 3, 1, 6, 2);
5154     pathB.close();
5155     testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
5156 }
5157 
fuzz38(skiatest::Reporter * reporter,const char * filename)5158 static void fuzz38(skiatest::Reporter* reporter, const char* filename) {
5159     SkPath path, pathB;
5160     path.moveTo(100.34f, 303.312f);
5161     path.lineTo(-1e+08, 303.312f);
5162     path.lineTo(102, 310.156f);
5163     path.lineTo(100.34f, 310.156f);
5164     path.lineTo(100.34f, 303.312f);
5165     path.close();
5166     testPathOpCheck(reporter, path, pathB, kUnion_SkPathOp, filename, true);
5167 }
5168 
crbug_526025(skiatest::Reporter * reporter,const char * filename)5169 static void crbug_526025(skiatest::Reporter* reporter, const char* filename) {
5170     SkPath path;
5171     path.setFillType((SkPath::FillType) 1);
5172 path.moveTo(SkBits2Float(0x43b40000), SkBits2Float(0xcf000000));  // 360, -2.14748e+09f
5173 path.cubicTo(SkBits2Float(0x4e0d628f), SkBits2Float(0xceffffff), SkBits2Float(0x4e800003), SkBits2Float(0xcec6b143), SkBits2Float(0x4e800002), SkBits2Float(0xce7ffffc));  // 5.93012e+08f, -2.14748e+09f, 1.07374e+09f, -1.66675e+09f, 1.07374e+09f, -1.07374e+09f
5174 path.cubicTo(SkBits2Float(0x4e800002), SkBits2Float(0xcde53aee), SkBits2Float(0x4e0d6292), SkBits2Float(0xc307820e), SkBits2Float(0x44627d00), SkBits2Float(0x437ffff2));  // 1.07374e+09f, -4.80731e+08f, 5.93012e+08f, -135.508f, 905.953f, 256
5175 path.lineTo(SkBits2Float(0x444bf3bc), SkBits2Float(0x4460537e));  // 815.808f, 897.305f
5176 path.lineTo(SkBits2Float(0x43553abd), SkBits2Float(0x440f3cbd));  // 213.229f, 572.949f
5177 path.lineTo(SkBits2Float(0x42000000), SkBits2Float(0x41800000));  // 32, 16
5178 path.lineTo(SkBits2Float(0x42c80000), SkBits2Float(0x44000000));  // 100, 512
5179 path.lineTo(SkBits2Float(0x43553abd), SkBits2Float(0x440f3cbd));  // 213.229f, 572.949f
5180 path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x44800000));  // 360, 1024
5181 path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x45816000));  // 360, 4140
5182 
5183     SkPath path1(path);
5184     path.reset();
5185     path.setFillType((SkPath::FillType) 0);
5186 path.moveTo(SkBits2Float(0x42fe0000), SkBits2Float(0x43a08000));  // 127, 321
5187 path.lineTo(SkBits2Float(0x45d5c000), SkBits2Float(0x43870000));  // 6840, 270
5188 path.lineTo(SkBits2Float(0xd0a00000), SkBits2Float(0x4cbebc20));  // -2.14748e+10f, 1e+08
5189 path.lineTo(SkBits2Float(0x451f7000), SkBits2Float(0x42800000));  // 2551, 64
5190 path.lineTo(SkBits2Float(0x42fe0000), SkBits2Float(0x43a08000));  // 127, 321
5191 path.close();
5192 
5193     SkPath path2(path);
5194     testPathOp(reporter, path1, path2, (SkPathOp) 2, filename);
5195 }
5196 
fuzzX_392(skiatest::Reporter * reporter,const char * filename)5197 static void fuzzX_392(skiatest::Reporter* reporter, const char* filename) {
5198     SkPath path;
5199     path.setFillType(SkPath::kEvenOdd_FillType);
5200 path.moveTo(SkBits2Float(0x41e80000), SkBits2Float(0x43bde212));  // 29, 379.766f
5201 path.lineTo(SkBits2Float(0x41e80000), SkBits2Float(0x43bdc7ef));  // 29, 379.562f
5202 path.conicTo(SkBits2Float(0x42a5861e), SkBits2Float(0x43c61f86), SkBits2Float(0x430b0610), SkBits2Float(0x43c61f86), SkBits2Float(0x3f7d23f3));  // 82.7619f, 396.246f, 139.024f, 396.246f, 0.98883f
5203 path.conicTo(SkBits2Float(0x42a58e20), SkBits2Float(0x43c61f86), SkBits2Float(0x41e80000), SkBits2Float(0x43bde212), SkBits2Float(0x3f7d2cf5));  // 82.7776f, 396.246f, 29, 379.766f, 0.988967f
5204 path.close();
5205 
5206     SkPath path1(path);
5207     path.setFillType(SkPath::kWinding_FillType);
5208 path.moveTo(SkBits2Float(0xc36c7bd8), SkBits2Float(0xc3a31d72));  // -236.484f, -326.23f
5209 path.lineTo(SkBits2Float(0xc367a4ae), SkBits2Float(0xc3a31d72));  // -231.643f, -326.23f
5210 path.lineTo(SkBits2Float(0x430b0610), SkBits2Float(0x43c61f86));  // 139.024f, 396.246f
5211 path.lineTo(SkBits2Float(0xc36c7bd8), SkBits2Float(0x43c61f86));  // -236.484f, 396.246f
5212 
5213     SkPath path2(path);
5214     testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
5215 }
5216 
dean2(skiatest::Reporter * reporter,const char * filename)5217 static void dean2(skiatest::Reporter* reporter, const char* filename) {
5218     SkPath path;
5219     path.setFillType((SkPath::FillType) 0);
5220 path.moveTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b)); // 0.669749f, 13.2891f
5221 path.cubicTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b), SkBits2Float(0x41531912), SkBits2Float(0x3f130322), SkBits2Float(0x4154a02b), SkBits2Float(0x3f2b74b3)); // 0.669749f, 13.2891f, 13.1936f, 0.574267f, 13.2891f, 0.669749f
5222 path.cubicTo(SkBits2Float(0x414a835a), SkBits2Float(0x3ec07ba6), SkBits2Float(0x413fcc0d), SkBits2Float(0x3e193319), SkBits2Float(0x4134a02b), SkBits2Float(0x00000000)); // 12.6571f, 0.375943f, 11.9873f, 0.149609f, 11.2891f, 0
5223 path.lineTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b)); // 0.669749f, 13.2891f
5224 path.close();
5225     SkPath path1(path);
5226 
5227     path.reset();
5228     path.setFillType((SkPath::FillType) 0);
5229 path.moveTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b)); // 0.669749f, 13.2891f
5230 path.cubicTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b), SkBits2Float(0x41531912), SkBits2Float(0x3f130322), SkBits2Float(0x4154a02b), SkBits2Float(0x3f2b74b3)); // 0.669749f, 13.2891f, 13.1936f, 0.574267f, 13.2891f, 0.669749f
5231 path.lineTo(SkBits2Float(0x417ab74b), SkBits2Float(0x4154a02b)); // 15.6697f, 13.2891f
5232 path.lineTo(SkBits2Float(0x3f2b74b3), SkBits2Float(0x4154a02b)); // 0.669749f, 13.2891f
5233 path.close();
5234     SkPath path2(path);
5235     testPathOp(reporter, path1, path2, kIntersect_SkPathOp, filename);
5236 }
5237 
cubics_d(skiatest::Reporter * reporter,const char * filename)5238 static void cubics_d(skiatest::Reporter* reporter, const char* filename) {
5239     SkPath path, pathB;
5240     path.setFillType(SkPath::kWinding_FillType);
5241     path.moveTo(0, 1);
5242     path.cubicTo(3, 5, 1, 0, 3, 0);
5243     path.close();
5244     pathB.setFillType(SkPath::kWinding_FillType);
5245     pathB.moveTo(0, 1);
5246     pathB.cubicTo(0, 3, 1, 0, 5, 3);
5247     pathB.close();
5248     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5249 }
5250 
cubics_d2(skiatest::Reporter * reporter,const char * filename)5251 static void cubics_d2(skiatest::Reporter* reporter, const char* filename) {
5252     SkPath path, pathB;
5253     path.setFillType(SkPath::kWinding_FillType);
5254     path.moveTo(0, 1);
5255     path.cubicTo(2, 5, 2, 0, 2, 1);
5256     path.close();
5257     pathB.setFillType(SkPath::kWinding_FillType);
5258     pathB.moveTo(0, 2);
5259     pathB.cubicTo(1, 2, 1, 0, 5, 2);
5260     pathB.close();
5261     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5262 }
5263 
loops_i1(skiatest::Reporter * reporter,const char * filename)5264 static void loops_i1(skiatest::Reporter* reporter, const char* filename) {
5265     SkPath path, pathB;
5266     path.setFillType(SkPath::kWinding_FillType);
5267     path.moveTo(2, 3);
5268     path.cubicTo(0, 4, -0.333333343f, 4.66666651f, 3, 5.83333349f);
5269     path.close();
5270     pathB.setFillType(SkPath::kWinding_FillType);
5271     pathB.moveTo(0, 4);
5272     pathB.cubicTo(-0.333333343f, 4.66666651f, 3, 5.83333349f, 2, 3);
5273     pathB.close();
5274     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5275 }
5276 
loops_i2(skiatest::Reporter * reporter,const char * filename)5277 static void loops_i2(skiatest::Reporter* reporter, const char* filename) {
5278     SkPath path, pathB;
5279     path.setFillType(SkPath::kWinding_FillType);
5280     path.moveTo(2, 4);
5281     path.cubicTo(0, 5, -0.333333343f, 5.66666651f, 3, 6.83333302f);
5282     path.close();
5283     pathB.setFillType(SkPath::kWinding_FillType);
5284     pathB.moveTo(0, 5);
5285     pathB.cubicTo(-0.333333343f, 5.66666651f, 3, 6.83333302f, 2, 4);
5286     pathB.close();
5287     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5288 }
5289 
loops_i3(skiatest::Reporter * reporter,const char * filename)5290 static void loops_i3(skiatest::Reporter* reporter, const char* filename) {
5291     SkPath path, pathB;
5292     path.setFillType(SkPath::kWinding_FillType);
5293     path.moveTo(2, 5);
5294     path.cubicTo(0, 6, -0.333333343f, 6.66666651f, 3, 7.83333302f);
5295     path.close();
5296     pathB.setFillType(SkPath::kWinding_FillType);
5297     pathB.moveTo(0, 6);
5298     pathB.cubicTo(-0.333333343f, 6.66666651f, 3, 7.83333302f, 2, 5);
5299     pathB.close();
5300     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5301 }
5302 
loops_i4(skiatest::Reporter * reporter,const char * filename)5303 static void loops_i4(skiatest::Reporter* reporter, const char* filename) {
5304     SkPath path, pathB;
5305     path.setFillType(SkPath::kWinding_FillType);
5306     path.moveTo(3, 4);
5307     path.cubicTo(1, 5, 0.666666627f, 5.66666651f, 4, 6.83333302f);
5308     path.close();
5309     pathB.setFillType(SkPath::kWinding_FillType);
5310     pathB.moveTo(1, 5);
5311     pathB.cubicTo(0.666666627f, 5.66666651f, 4, 6.83333302f, 3, 4);
5312     pathB.close();
5313     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5314 }
5315 
loops_i5(skiatest::Reporter * reporter,const char * filename)5316 static void loops_i5(skiatest::Reporter* reporter, const char* filename) {
5317     SkPath path, pathB;
5318     path.setFillType(SkPath::kWinding_FillType);
5319     path.moveTo(3, 5);
5320     path.cubicTo(1, 6, 0.666666627f, 6.66666651f, 4, 7.83333302f);
5321     path.close();
5322     pathB.setFillType(SkPath::kWinding_FillType);
5323     pathB.moveTo(1, 6);
5324     pathB.cubicTo(0.666666627f, 6.66666651f, 4, 7.83333302f, 3, 5);
5325     pathB.close();
5326     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5327 }
5328 
loops_i6(skiatest::Reporter * reporter,const char * filename)5329 static void loops_i6(skiatest::Reporter* reporter, const char* filename) {
5330     SkPath path, pathB;
5331     path.setFillType(SkPath::kWinding_FillType);
5332     path.moveTo(4, 5);
5333     path.cubicTo(2, 6, 1.66666663f, 6.66666651f, 5, 7.83333302f);
5334     path.close();
5335     pathB.setFillType(SkPath::kWinding_FillType);
5336     pathB.moveTo(2, 6);
5337     pathB.cubicTo(1.66666663f, 6.66666651f, 5, 7.83333302f, 4, 5);
5338     pathB.close();
5339     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5340 }
5341 
cubics_d3(skiatest::Reporter * reporter,const char * filename)5342 static void cubics_d3(skiatest::Reporter* reporter, const char* filename) {
5343     SkPath path, pathB;
5344     path.setFillType(SkPath::kWinding_FillType);
5345     path.moveTo(3, 4);
5346     path.cubicTo(0, 6, 6, 1, 4, 2);
5347     path.close();
5348     pathB.setFillType(SkPath::kWinding_FillType);
5349     pathB.moveTo(1, 6);
5350     pathB.cubicTo(2, 4, 4, 3, 6, 0);
5351     pathB.close();
5352     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5353 }
5354 
cubics_o(skiatest::Reporter * reporter,const char * filename)5355 static void cubics_o(skiatest::Reporter* reporter, const char* filename) {
5356     SkPath path, pathB;
5357     path.setFillType(SkPath::kWinding_FillType);
5358     path.moveTo(1, 4);
5359     path.cubicTo(2, 6, 5, 0, 5, 3);
5360     path.close();
5361     pathB.setFillType(SkPath::kWinding_FillType);
5362     pathB.moveTo(0, 5);
5363     pathB.cubicTo(3, 5, 4, 1, 6, 2);
5364     pathB.close();
5365     testPathOp(reporter, path, pathB, kXOR_SkPathOp, filename);
5366 }
5367 
cubicOp158(skiatest::Reporter * reporter,const char * filename)5368 static void cubicOp158(skiatest::Reporter* reporter, const char* filename) {
5369     SkPath path, pathB;
5370     path.setFillType(SkPath::kWinding_FillType);
5371     path.moveTo(0,1);
5372     path.cubicTo(2,4, 2,0, 2,0);
5373     path.close();
5374     pathB.setFillType(SkPath::kWinding_FillType);
5375     pathB.moveTo(0,2);
5376     pathB.cubicTo(0,2, 1,0, 4,2);
5377     pathB.close();
5378     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5379 }
5380 
loop17(skiatest::Reporter * reporter,const char * filename)5381 static void loop17(skiatest::Reporter* reporter, const char* filename) {
5382     SkPath path, pathB;
5383     path.moveTo(1, 2);
5384     path.cubicTo(0, 3, -0.333333343f, 3.33333325f, 0.833333373f, 3.5f);
5385     path.close();
5386     pathB.moveTo(0, 3);
5387     pathB.cubicTo(-0.333333343f, 3.33333325f, 0.833333373f, 3.5f, 1, 2);
5388     pathB.close();
5389     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5390 }
5391 
circlesOp4(skiatest::Reporter * reporter,const char * filename)5392 static void circlesOp4(skiatest::Reporter* reporter, const char* filename) {
5393     SkPath path, pathB;
5394     path.setFillType(SkPath::kWinding_FillType);
5395     path.addCircle(0, 1, 5, SkPath::kCW_Direction);
5396     pathB.setFillType(SkPath::kWinding_FillType);
5397     pathB.addCircle(0, 1, 0, SkPath::kCW_Direction);
5398     testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
5399 }
5400 
bug5240(skiatest::Reporter * reporter,const char * filename)5401 static void bug5240(skiatest::Reporter* reporter, const char* filename) {
5402  SkPath path;
5403 path.moveTo(815, 82);
5404 path.cubicTo(814.4794311523438f, 82.7868881225586f, 814.5330810546875f,
5405 82.6266555786133f, 814.5291137695312f, 82.6252212524414f);
5406 path.cubicTo(814.5229492187500f, 82.6230010986328f, 814.3790283203125f,
5407 83.0008087158203f, 813.8533935546875f, 82.7072601318359f);
5408 path.close();
5409     testPathOp(reporter, path, path, kUnion_SkPathOp, filename);
5410 }
5411 
android1(skiatest::Reporter * reporter,const char * filename)5412 static void android1(skiatest::Reporter* reporter, const char* filename) {
5413  SkPath path, pathB;
5414 path.moveTo(SkBits2Float(0xc0a00000), SkBits2Float(0x00000000));  // -5, 0
5415 path.lineTo(SkBits2Float(0x44866000), SkBits2Float(0x00000000));  // 1075, 0
5416 path.lineTo(SkBits2Float(0x44866000), SkBits2Float(0x43720000));  // 1075, 242
5417 path.lineTo(SkBits2Float(0xc0a00000), SkBits2Float(0x43720000));  // -5, 242
5418 path.lineTo(SkBits2Float(0xc0a00000), SkBits2Float(0x00000000));  // -5, 0
5419 path.close();
5420 pathB.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
5421 pathB.lineTo(SkBits2Float(0x44870000), SkBits2Float(0x00000000));  // 1080, 0
5422 pathB.lineTo(SkBits2Float(0x44870000), SkBits2Float(0x43720000));  // 1080, 242
5423 pathB.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x43720000));  // 0, 242
5424 pathB.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
5425 pathB.close();
5426     testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
5427 }
5428 
5429 
5430 static void (*skipTest)(skiatest::Reporter* , const char* filename) = 0;
5431 static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;
5432 static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;
5433 
5434 #define TEST(name) { name, #name }
5435 
5436 static struct TestDesc tests[] = {
5437     TEST(android1),
5438     TEST(bug5240),
5439     TEST(circlesOp4),
5440     TEST(loop17),
5441     TEST(cubicOp158),
5442     TEST(loops_i1),
5443     TEST(loops_i2),
5444     TEST(loops_i3),
5445     TEST(loops_i4),
5446     TEST(loops_i5),
5447     TEST(loops_i6),
5448     TEST(cubics_d3),
5449     TEST(cubics_o),
5450     TEST(cubics_d2),
5451     TEST(cubics_d),
5452     TEST(dean2),
5453     TEST(fuzzX_392),
5454     TEST(crbug_526025),
5455     TEST(fuzz38),
5456     TEST(cubics44d),
5457     TEST(cubics45u),
5458     TEST(loops61i),
5459     TEST(loops62i),
5460     TEST(loops63i),
5461     TEST(loops58iAsQuads),
5462     TEST(cubics41d),
5463     TEST(loops59iasQuads),
5464     TEST(loops59i),
5465     TEST(loops44i),
5466     TEST(loops45i),
5467     TEST(loops46i),
5468     TEST(loops47i),
5469     TEST(loops48i),
5470     TEST(loops49i),
5471     TEST(loops50i),
5472     TEST(loops51i),
5473     TEST(loops52i),
5474     TEST(loops53i),
5475     TEST(loops54i),
5476     TEST(loops55i),
5477     TEST(loops56i),
5478     TEST(loops57i),
5479     TEST(loops58i),
5480     TEST(loops33iMod),
5481     TEST(loops33iAsQuads),
5482     TEST(loops33i),
5483     TEST(loops40i),
5484     TEST(loops40iAsQuads),
5485     TEST(loops39i),
5486     TEST(loops38i),
5487     TEST(loops37i),
5488     TEST(loops36i),
5489     TEST(loops35i),
5490     TEST(loops34i),
5491     TEST(loops32i),
5492     TEST(loops31i),
5493     TEST(loops30i),
5494     TEST(loops29i),
5495     TEST(loops28i),
5496     TEST(loops27i),
5497     TEST(loops26i),
5498     TEST(loops25i),
5499     TEST(loops24i),
5500     TEST(loops23i),
5501     TEST(loops22i),
5502     TEST(loops21i),
5503     TEST(loops20i),
5504     TEST(cubics20d),
5505     TEST(cubics6d),
5506     TEST(cubics7d),
5507     TEST(cubics8d),
5508     TEST(cubics9d),
5509     TEST(cubics10u),
5510     TEST(cubics11i),
5511     TEST(cubics12d),
5512     TEST(cubics13d),
5513     TEST(cubics14d),
5514     TEST(cubics15d),
5515     TEST(cubics16i),
5516     TEST(cubics17d),
5517     TEST(cubics18d),
5518     TEST(cubics19d),
5519     TEST(cubicOp157),
5520     TEST(cubicOp142),
5521     TEST(loops4i),
5522     TEST(quadRect1),
5523     TEST(quadRect2),
5524     TEST(quadRect3),
5525     TEST(quadRect4),
5526     TEST(quadRect5),
5527     TEST(quadRect6),
5528     TEST(cubicOp141),
5529     TEST(cubicOp58d),
5530     TEST(loops5i),
5531     TEST(cubicOp140),
5532     TEST(cubicOp139),
5533     TEST(cubics138),
5534     TEST(cubics137),
5535     TEST(cubicOp136a),
5536     TEST(cubicOp136),
5537     TEST(cubicOp135),
5538     TEST(cubicOp134),
5539     TEST(cubicOp133),
5540     TEST(loop12),
5541     TEST(cubicOp132),
5542     TEST(loop11),
5543     TEST(loop10),
5544     TEST(circlesOp3),
5545     TEST(loop9),
5546     TEST(loop8),
5547     TEST(rects5),
5548     TEST(loop7),
5549     TEST(cubicOp130a),
5550     TEST(rRect1x),
5551     TEST(circlesOp2),
5552     TEST(circlesOp1),
5553     TEST(cubicOp131),
5554     TEST(cubicOp130),
5555     TEST(cubicOp129),
5556     TEST(cubicOp128),
5557     TEST(cubicOp127),
5558     TEST(cubicOp126),
5559     TEST(cubicOp125),
5560     TEST(cubicOp124),
5561     TEST(loop6),
5562     TEST(loop5),
5563     TEST(cubicOp123),
5564     TEST(cubicOp122),
5565     TEST(cubicOp121),
5566     TEST(cubicOp120),
5567     TEST(cubicOp119),
5568     TEST(loop4),
5569     TEST(loop3),
5570     TEST(loop2),
5571     TEST(loop1asQuad),
5572     TEST(loop1),
5573     TEST(issue3517),
5574     TEST(cubicOp118),
5575     TEST(cubicOp117),
5576     TEST(cubicOp116),
5577     TEST(testRect2),
5578     TEST(testRect1),
5579     TEST(cubicOp115),
5580     TEST(issue2753),
5581     TEST(cubicOp114),
5582     TEST(issue2808),
5583     TEST(cubicOp114asQuad),
5584     TEST(rects4),
5585     TEST(rects3),
5586     TEST(rects2),
5587     TEST(rects1),
5588     TEST(issue2540),
5589     TEST(issue2504),
5590     TEST(kari1),
5591     TEST(quadOp10i),
5592     TEST(cubicOp113),
5593     TEST(skpcarrot_is24),
5594     TEST(issue1417),
5595     TEST(cubicOp112),
5596     TEST(skpadspert_net23),
5597     TEST(skpadspert_de11),
5598     TEST(findFirst1),
5599     TEST(xOp2i),
5600     TEST(xOp3i),
5601     TEST(xOp1u),
5602     TEST(xOp1i),
5603     TEST(cubicOp111),
5604     TEST(cubicOp110),
5605     TEST(cubicOp109),
5606     TEST(cubicOp108),
5607     TEST(cubicOp107),
5608     TEST(cubicOp106),
5609     TEST(cubicOp105),
5610     TEST(cubicOp104),
5611     TEST(cubicOp103),
5612     TEST(cubicOp102),
5613     TEST(cubicOp101),
5614     TEST(cubicOp100),
5615     TEST(cubicOp99),
5616     TEST(issue1435),
5617     TEST(cubicOp98x),
5618     TEST(cubicOp97x),
5619     TEST(skpcarpetplanet_ru22),
5620     TEST(cubicOp96d),
5621     TEST(cubicOp95u),
5622     TEST(skpadbox_lt15),
5623     TEST(skpagentxsites_com55),
5624     TEST(skpadventistmission_org572),
5625     TEST(skpadoption_org196),
5626     TEST(skpbambootheme_com12),
5627     TEST(skpbakosoft_com10),
5628     TEST(skpakmmos_ru100),
5629     TEST(skpbangalorenest_com4),
5630     TEST(skpbingoentertainment_net189),
5631     TEST(skpbestred_ru37),
5632     TEST(skpbenzoteh_ru152),
5633     TEST(skpcamcorder_kz21),
5634     TEST(skpcaffelavazzait_com_ua21),
5635     TEST(skpcarrefour_ro62),
5636     TEST(skpcavablar_net563),
5637     TEST(skpinsomnia_gr72),
5638     TEST(skpadbox_lt8),
5639     TEST(skpact_com43),
5640     TEST(skpacesoftech_com47),
5641     TEST(skpabcspark_ca103),
5642     TEST(cubicOp94u),
5643     TEST(cubicOp93d),
5644     TEST(cubicOp92i),
5645     TEST(skpadithya_putr4_blogspot_com551),
5646     TEST(skpadindex_de4),
5647     TEST(skpaiaigames_com870),
5648     TEST(skpaaalgarve_org53),
5649     TEST(skpkkiste_to716),
5650     TEST(cubicOp91u),
5651     TEST(cubicOp90u),
5652     TEST(cubicOp89u),
5653     TEST(cubicOp88u),
5654     TEST(cubicOp87u),
5655     TEST(cubicOp86i),
5656     TEST(loopEdge2),
5657     TEST(loopEdge1),
5658     TEST(rectOp3x),
5659     TEST(rectOp2i),
5660     TEST(rectOp1i),
5661     TEST(issue1418b),
5662     TEST(cubicOp85i),
5663     TEST(issue1418),
5664     TEST(skpkkiste_to98),
5665     TEST(skpahrefs_com29),
5666     TEST(cubicOp85d),
5667     TEST(skpahrefs_com88),
5668     TEST(skphealth_com76),
5669     TEST(skpancestry_com1),
5670     TEST(skpbyte_com1),
5671     TEST(skpeldorado_com_ua1),
5672     TEST(skp96prezzi1),
5673     TEST(skpClip2),
5674     TEST(skpClip1),
5675     TEST(cubicOp84d),
5676     TEST(cubicOp83i),
5677     TEST(cubicOp82i),
5678     TEST(cubicOp81d),
5679     TEST(cubicOp80i),
5680     TEST(cubicOp79u),
5681     TEST(cubicOp78u),
5682     TEST(cubicOp77i),
5683     TEST(cubicOp76u),
5684     TEST(cubicOp75d),
5685     TEST(cubicOp74d),
5686     TEST(cubicOp73d),
5687     TEST(cubicOp72i),
5688     TEST(cubicOp71d),
5689     TEST(skp5),
5690     TEST(skp4),
5691     TEST(skp3),
5692     TEST(skp2),
5693     TEST(skp1),
5694     TEST(rRect1),
5695     TEST(cubicOp70d),
5696     TEST(cubicOp69d),
5697     TEST(cubicOp68u),
5698     TEST(cubicOp67u),
5699     TEST(cubicOp66u),
5700     TEST(rectOp1d),
5701     TEST(cubicOp65d),
5702     TEST(cubicOp64d),
5703     TEST(cubicOp63d),
5704     TEST(cubicOp62d),
5705     TEST(cubicOp61d),
5706     TEST(cubicOp60d),
5707     TEST(cubicOp59d),
5708     TEST(cubicOp57d),
5709     TEST(cubicOp56d),
5710     TEST(cubicOp55d),
5711     TEST(cubicOp54d),
5712     TEST(cubicOp53d),
5713     TEST(cubicOp52d),
5714     TEST(cubicOp51d),
5715     TEST(cubicOp50d),
5716     TEST(cubicOp49d),
5717     TEST(cubicOp48d),
5718     TEST(cubicOp47d),
5719     TEST(cubicOp46d),
5720     TEST(cubicOp45d),
5721     TEST(cubicOp44d),
5722     TEST(cubicOp43d),
5723     TEST(cubicOp42d),
5724     TEST(cubicOp41i),
5725     TEST(cubicOp40d),
5726     TEST(cubicOp39d),
5727     TEST(cubicOp38d),
5728     TEST(cubicOp37d),
5729     TEST(cubicOp36u),
5730     TEST(cubicOp35d),
5731     TEST(cubicOp34d),
5732     TEST(cubicOp33i),
5733     TEST(cubicOp32d),
5734     TEST(cubicOp31d),
5735     TEST(cubicOp31x),
5736     TEST(cubicOp31u),
5737     TEST(cubicOp30d),
5738     TEST(cubicOp29d),
5739     TEST(cubicOp28u),
5740     TEST(cubicOp27d),
5741     TEST(cubicOp26d),
5742     TEST(cubicOp25i),
5743     TEST(testOp8d),
5744     TEST(testDiff1),
5745     TEST(testIntersect1),
5746     TEST(testUnion1),
5747     TEST(testXor1),
5748     TEST(testDiff2),
5749     TEST(testIntersect2),
5750     TEST(testUnion2),
5751     TEST(testXor2),
5752     TEST(testOp1d),
5753     TEST(testOp2d),
5754     TEST(testOp3d),
5755     TEST(testOp1u),
5756     TEST(testOp4d),
5757     TEST(testOp5d),
5758     TEST(testOp6d),
5759     TEST(testOp7d),
5760     TEST(testOp2u),
5761 
5762     TEST(cubicOp24d),
5763     TEST(cubicOp23d),
5764     TEST(cubicOp22d),
5765     TEST(cubicOp21d),
5766     TEST(cubicOp20d),
5767     TEST(cubicOp19i),
5768     TEST(cubicOp18d),
5769     TEST(cubicOp17d),
5770     TEST(cubicOp16d),
5771     TEST(cubicOp15d),
5772     TEST(cubicOp14d),
5773     TEST(cubicOp13d),
5774     TEST(cubicOp12d),
5775     TEST(cubicOp11d),
5776     TEST(cubicOp10d),
5777     TEST(cubicOp1i),
5778     TEST(cubicOp9d),
5779     TEST(quadOp9d),
5780     TEST(lineOp9d),
5781     TEST(cubicOp8d),
5782     TEST(cubicOp7d),
5783     TEST(cubicOp6d),
5784     TEST(cubicOp5d),
5785     TEST(cubicOp3d),
5786     TEST(cubicOp2d),
5787     TEST(cubicOp1d),
5788 };
5789 
5790 static const size_t testCount = SK_ARRAY_COUNT(tests);
5791 
5792 static struct TestDesc subTests[] = {
5793     TEST(loops47i),
5794     TEST(loops61i),
5795     TEST(loops62i),
5796     TEST(issue3517),
5797 };
5798 
5799 static const size_t subTestCount = SK_ARRAY_COUNT(subTests);
5800 
5801 static void (*firstSubTest)(skiatest::Reporter* , const char* filename) = 0;
5802 
5803 static bool runSubTests = false;
5804 static bool runSubTestsFirst = true;
5805 static bool runReverse = false;
5806 
DEF_TEST(PathOpsOp,reporter)5807 DEF_TEST(PathOpsOp, reporter) {
5808 #if DEBUG_SHOW_TEST_NAME
5809     strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
5810 #endif
5811     if (runSubTests && runSubTestsFirst) {
5812         RunTestSet(reporter, subTests, subTestCount, firstSubTest, nullptr, stopTest, runReverse);
5813     }
5814     RunTestSet(reporter, tests, testCount, firstTest, skipTest, stopTest, runReverse);
5815     if (runSubTests && !runSubTestsFirst) {
5816         RunTestSet(reporter, subTests, subTestCount, firstSubTest, nullptr, stopTest, runReverse);
5817     }
5818 }
5819 
fuzz535151(skiatest::Reporter * reporter,const char * filename)5820 static void fuzz535151(skiatest::Reporter* reporter, const char* filename) {
5821     SkPath one;
5822     one.setFillType(SkPath::kWinding_FillType);
5823     SkPath two;
5824     two.setFillType(SkPath::kWinding_FillType);
5825     two.moveTo(0, 0);
5826     two.lineTo(0, 50);
5827     two.lineTo(4.29497e+09f, 50);
5828     SkPath dummy;
5829     testPathOpFuzz(reporter, one, two, kIntersect_SkPathOp, filename);
5830 }
5831 
bufferOverflow(skiatest::Reporter * reporter,const char * filename)5832 static void bufferOverflow(skiatest::Reporter* reporter, const char* filename) {
5833     SkPath path;
5834     path.addRect(0,0, 300,170141183460469231731687303715884105728.f);
5835     SkPath pathB;
5836     pathB.addRect(0,0, 300,16);
5837     testPathOpFuzz(reporter, path, pathB, kUnion_SkPathOp, filename);
5838 }
5839 
5840 // m 100,0 60,170 -160,-110 200,0 -170,11000000000 z
fuzz433(skiatest::Reporter * reporter,const char * filename)5841 static void fuzz433(skiatest::Reporter* reporter, const char* filename) {
5842     SkPath path1, path2;
5843     path1.moveTo(100,0);
5844     path1.lineTo(60,170);
5845     path1.lineTo(-160,-110);
5846     path1.lineTo(200,0);
5847     path1.lineTo(-170,11000000000.0f);
5848     path1.close();
5849 
5850     path2.moveTo(100 + 20,0 + 20);
5851     path2.lineTo(60 + 20,170 + 20);
5852     path2.lineTo(-160 + 20,-110 + 20);
5853     path2.lineTo(200 + 20,0 + 20);
5854     path2.lineTo(-170 + 20,11000000000.0f + 20);
5855     path2.close();
5856 
5857     testPathOpFuzz(reporter, path1, path2, kIntersect_SkPathOp, filename);
5858 }
5859 
fuzz433b(skiatest::Reporter * reporter,const char * filename)5860 static void fuzz433b(skiatest::Reporter* reporter, const char* filename) {
5861     SkPath path1, path2;
5862     path1.setFillType(SkPath::kEvenOdd_FillType);
5863     path1.moveTo(140, 40);
5864     path1.lineTo(200, 210);
5865     path1.lineTo(40, 100);
5866     path1.lineTo(240, 100);
5867     path1.lineTo(70, 1.1e+10f);
5868     path1.lineTo(140, 40);
5869     path1.close();
5870 
5871     path1.setFillType(SkPath::kWinding_FillType);
5872     path2.moveTo(190, 60);
5873     path2.lineTo(250, 230);
5874     path2.lineTo(90, 120);
5875     path2.lineTo(290, 120);
5876     path2.lineTo(120, 1.1e+10f);
5877     path2.lineTo(190, 60);
5878     path2.close();
5879 
5880     testPathOpFuzz(reporter, path1, path2, kUnion_SkPathOp, filename);
5881 }
5882 
fuzz487a(skiatest::Reporter * reporter,const char * filename)5883 static void fuzz487a(skiatest::Reporter* reporter, const char* filename) {
5884     SkPath path;
5885     path.setFillType((SkPath::FillType) 0);
5886 path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
5887 path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
5888 path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x429a6666), SkBits2Float(0x42f9999a), SkBits2Float(0x4275999a), SkBits2Float(0x42d70001), SkBits2Float(0x42633333));
5889 path.lineTo(SkBits2Float(0x42e90001), SkBits2Float(0x41b8cccc));
5890 path.cubicTo(SkBits2Float(0x42dc6667), SkBits2Float(0x41ab3332), SkBits2Float(0x42cf3334), SkBits2Float(0x41a3ffff), SkBits2Float(0x42c20001), SkBits2Float(0x41a3ffff));
5891 path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
5892 path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
5893 path.cubicTo(SkBits2Float(0x429c6668), SkBits2Float(0x425d999a), SkBits2Float(0x4279999c), SkBits2Float(0x42886667), SkBits2Float(0x42673335), SkBits2Float(0x42ab0000));
5894 path.lineTo(SkBits2Float(0x41c0ccd0), SkBits2Float(0x42990000));
5895 path.cubicTo(SkBits2Float(0x41b33336), SkBits2Float(0x42a5999a), SkBits2Float(0x41ac0003), SkBits2Float(0x42b2cccd), SkBits2Float(0x41ac0003), SkBits2Float(0x42c00000));
5896 path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
5897 path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
5898 path.cubicTo(SkBits2Float(0x4261999c), SkBits2Float(0x434d3333), SkBits2Float(0x4364e667), SkBits2Float(0x4346b333), SkBits2Float(0x4364e667), SkBits2Float(0x43400000));
5899 path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
5900 path.close();
5901 
5902     SkPath path1(path);
5903     path.reset();
5904     path.setFillType((SkPath::FillType) 0);
5905 path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
5906 path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
5907 path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x42a20000), SkBits2Float(0x43016667), SkBits2Float(0x4287cccd), SkBits2Float(0x42ea999a), SkBits2Float(0x4273999a));
5908 path.lineTo(SkBits2Float(0x4306cccd), SkBits2Float(0x41f5999a));
5909 path.cubicTo(SkBits2Float(0x42f76667), SkBits2Float(0x41c26667), SkBits2Float(0x42dd999a), SkBits2Float(0x41a4cccd), SkBits2Float(0x42c23334), SkBits2Float(0x41a4cccd));
5910 path.lineTo(SkBits2Float(0x42c23334), SkBits2Float(0x425e0000));
5911 path.cubicTo(SkBits2Float(0x42a43334), SkBits2Float(0x425e0000), SkBits2Float(0x428a0001), SkBits2Float(0x427ecccd), SkBits2Float(0x42780002), SkBits2Float(0x4297999a));
5912 path.lineTo(SkBits2Float(0x41fccccd), SkBits2Float(0x42693333));
5913 path.cubicTo(SkBits2Float(0x41c9999a), SkBits2Float(0x428acccd), SkBits2Float(0x41ac0000), SkBits2Float(0x42a4999a), SkBits2Float(0x41ac0000), SkBits2Float(0x42c00000));
5914 path.lineTo(SkBits2Float(0x4261999a), SkBits2Float(0x42c00000));
5915 path.cubicTo(SkBits2Float(0x4261999a), SkBits2Float(0x42de0000), SkBits2Float(0x42813333), SkBits2Float(0x42f83333), SkBits2Float(0x42996666), SkBits2Float(0x4303199a));
5916 path.cubicTo(SkBits2Float(0x4272cccc), SkBits2Float(0x4303199a), SkBits2Float(0x423d3332), SkBits2Float(0x430de667), SkBits2Float(0x422d9999), SkBits2Float(0x431cb334));
5917 path.lineTo(SkBits2Float(0x7086a1dc), SkBits2Float(0x42eecccd));
5918 path.lineTo(SkBits2Float(0x41eb3333), SkBits2Float(0xc12ccccd));
5919 path.lineTo(SkBits2Float(0x42053333), SkBits2Float(0xc1cccccd));
5920 path.lineTo(SkBits2Float(0x42780000), SkBits2Float(0xc18f3334));
5921 path.cubicTo(SkBits2Float(0x43206666), SkBits2Float(0x43134ccd), SkBits2Float(0x43213333), SkBits2Float(0x430db333), SkBits2Float(0x43213333), SkBits2Float(0x43080000));
5922 path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
5923 path.close();
5924 
5925     SkPath path2(path);
5926     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
5927 }
5928 
fuzz487b(skiatest::Reporter * reporter,const char * filename)5929 static void fuzz487b(skiatest::Reporter* reporter, const char* filename) {
5930     SkPath path;
5931     path.setFillType((SkPath::FillType) 0);
5932 path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
5933 path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
5934 path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x429a6666), SkBits2Float(0x42f9999a), SkBits2Float(0x4275999a), SkBits2Float(0x42d70001), SkBits2Float(0x42633333));
5935 path.lineTo(SkBits2Float(0x42e90001), SkBits2Float(0x41b8cccc));
5936 path.cubicTo(SkBits2Float(0x42dc6667), SkBits2Float(0x41ab3332), SkBits2Float(0x42cf3334), SkBits2Float(0x41a3ffff), SkBits2Float(0x42c20001), SkBits2Float(0x41a3ffff));
5937 path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
5938 path.lineTo(SkBits2Float(0x42c20001), SkBits2Float(0x425d999a));
5939 path.cubicTo(SkBits2Float(0x429c6668), SkBits2Float(0x425d999a), SkBits2Float(0x4279999c), SkBits2Float(0x42886667), SkBits2Float(0x42673335), SkBits2Float(0x42ab0000));
5940 path.lineTo(SkBits2Float(0x41c0ccd0), SkBits2Float(0x42990000));
5941 path.cubicTo(SkBits2Float(0x41b33336), SkBits2Float(0x42a5999a), SkBits2Float(0x41ac0003), SkBits2Float(0x42b2cccd), SkBits2Float(0x41ac0003), SkBits2Float(0x42c00000));
5942 path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
5943 path.lineTo(SkBits2Float(0x4261999c), SkBits2Float(0x42c00000));
5944 path.cubicTo(SkBits2Float(0x4261999c), SkBits2Float(0x434d3333), SkBits2Float(0x4364e667), SkBits2Float(0x4346b333), SkBits2Float(0x4364e667), SkBits2Float(0x43400000));
5945 path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
5946 path.close();
5947 
5948     SkPath path1(path);
5949     path.reset();
5950     path.setFillType((SkPath::FillType) 0);
5951 path.moveTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
5952 path.lineTo(SkBits2Float(0x4309999a), SkBits2Float(0x42c00000));
5953 path.cubicTo(SkBits2Float(0x4309999a), SkBits2Float(0x42a20000), SkBits2Float(0x43016667), SkBits2Float(0x4287cccd), SkBits2Float(0x42ea999a), SkBits2Float(0x4273999a));
5954 path.lineTo(SkBits2Float(0x4306cccd), SkBits2Float(0x41f5999a));
5955 path.cubicTo(SkBits2Float(0x42f76667), SkBits2Float(0x41c26667), SkBits2Float(0x42dd999a), SkBits2Float(0x41a4cccd), SkBits2Float(0x42c23334), SkBits2Float(0x41a4cccd));
5956 path.lineTo(SkBits2Float(0x42c23334), SkBits2Float(0x425e0000));
5957 path.cubicTo(SkBits2Float(0x42a43334), SkBits2Float(0x425e0000), SkBits2Float(0x428a0001), SkBits2Float(0x427ecccd), SkBits2Float(0x42780002), SkBits2Float(0x4297999a));
5958 path.lineTo(SkBits2Float(0x41fccccd), SkBits2Float(0x42693333));
5959 path.cubicTo(SkBits2Float(0x41c9999a), SkBits2Float(0x428acccd), SkBits2Float(0x41ac0000), SkBits2Float(0x42a4999a), SkBits2Float(0x41ac0000), SkBits2Float(0x42c00000));
5960 path.lineTo(SkBits2Float(0x4261999a), SkBits2Float(0x42c00000));
5961 path.cubicTo(SkBits2Float(0x4261999a), SkBits2Float(0x42de0000), SkBits2Float(0x42813333), SkBits2Float(0x42f83333), SkBits2Float(0x42996666), SkBits2Float(0x4303199a));
5962 path.cubicTo(SkBits2Float(0x4272cccc), SkBits2Float(0x4303199a), SkBits2Float(0x423d3332), SkBits2Float(0x430de667), SkBits2Float(0x422d9999), SkBits2Float(0x431cb334));
5963 path.lineTo(SkBits2Float(0x7086a1dc), SkBits2Float(0x42eecccd));
5964 path.lineTo(SkBits2Float(0x41eb3333), SkBits2Float(0xc12ccccd));
5965 path.lineTo(SkBits2Float(0x42053333), SkBits2Float(0xc1cccccd));
5966 path.lineTo(SkBits2Float(0x42780000), SkBits2Float(0xc18f3334));
5967 path.cubicTo(SkBits2Float(0x43206666), SkBits2Float(0x43134ccd), SkBits2Float(0x43213333), SkBits2Float(0x430db333), SkBits2Float(0x43213333), SkBits2Float(0x43080000));
5968 path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
5969 path.close();
5970 
5971     SkPath path2(path);
5972     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
5973 }
5974 
fuzz714(skiatest::Reporter * reporter,const char * filename)5975 static void fuzz714(skiatest::Reporter* reporter, const char* filename) {
5976     SkPath path;
5977     path.setFillType((SkPath::FillType) 1);
5978 path.moveTo(SkBits2Float(0x430c0000), SkBits2Float(0x42200000));
5979 path.lineTo(SkBits2Float(0x43480000), SkBits2Float(0x43520000));
5980 path.lineTo(SkBits2Float(0x42200000), SkBits2Float(0x42c80000));
5981 path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x42c80000));  // 2.22222e+022f
5982 path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x43520000));  // 2.22222e+022f
5983 path.lineTo(SkBits2Float(0x430c0000), SkBits2Float(0x42200000));
5984 path.close();
5985 
5986     SkPath path1(path);
5987     path.reset();
5988     path.setFillType((SkPath::FillType) 0);
5989 path.moveTo(SkBits2Float(0x43200000), SkBits2Float(0x42700000));
5990 path.lineTo(SkBits2Float(0x435c0000), SkBits2Float(0x43660000));
5991 path.lineTo(SkBits2Float(0x42700000), SkBits2Float(0x42f00000));
5992 path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x42f00000));  // 2.22222e+022f
5993 path.lineTo(SkBits2Float(0x64969569), SkBits2Float(0x43660000));  // 2.22222e+022f
5994 path.lineTo(SkBits2Float(0x43200000), SkBits2Float(0x42700000));
5995 path.close();
5996 
5997     SkPath path2(path);
5998     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
5999 }
6000 
fuzz1(skiatest::Reporter * reporter,const char * filename)6001 static void fuzz1(skiatest::Reporter* reporter, const char* filename) {
6002     SkPath path;
6003     path.setFillType((SkPath::FillType) 0);
6004 path.moveTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
6005 path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
6006 path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
6007 path.quadTo(SkBits2Float(0xffc00000), SkBits2Float(0x7f800000), SkBits2Float(0xffc00000), SkBits2Float(0x7f800000));
6008 path.quadTo(SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000));
6009 path.quadTo(SkBits2Float(0xff000001), SkBits2Float(0xffc00000), SkBits2Float(0xffc00000), SkBits2Float(0xffc00000));
6010 path.quadTo(SkBits2Float(0xffc00000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xff000001));
6011 path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0xff000001), SkBits2Float(0x7f800000), SkBits2Float(0xffc00000));
6012 path.quadTo(SkBits2Float(0x7f800000), SkBits2Float(0xffc00000), SkBits2Float(0x7f800000), SkBits2Float(0x7f800000));
6013 path.close();
6014 
6015     SkPath path1(path);
6016     path.reset();
6017     path.setFillType((SkPath::FillType) 0);
6018 
6019     SkPath path2(path);
6020     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
6021 }
6022 
6023 
fuzz753_91(skiatest::Reporter * reporter,const char * filename)6024 static void fuzz753_91(skiatest::Reporter* reporter, const char* filename) {
6025     SkPath path;
6026     path.setFillType((SkPath::FillType) 0);
6027 path.moveTo(SkBits2Float(0x42910000), SkBits2Float(0x00000000));  // 72.5f, 0
6028 path.lineTo(SkBits2Float(0x42166668), SkBits2Float(0x00000000));  // 37.6f, 0
6029 path.cubicTo(SkBits2Float(0x42166668), SkBits2Float(0xc1966668), SkBits2Float(0x41c66668), SkBits2Float(0xc20a6666), SkBits2Float(0x40f00010), SkBits2Float(0xc21ccccd));  // 37.6f, -18.8f, 24.8f, -34.6f, 7.50001f, -39.2f
6030 path.lineTo(SkBits2Float(0x41840004), SkBits2Float(0xc291cccd));  // 16.5f, -72.9f
6031 path.lineTo(SkBits2Float(0x42fb6668), SkBits2Float(0x42c73334));  // 125.7f, 99.6f
6032 path.lineTo(SkBits2Float(0x43646668), SkBits2Float(0x43880ccd));  // 228.4f, 272.1f
6033 
6034     SkPath path1(path);
6035     path.reset();
6036     path.setFillType((SkPath::FillType) 0);
6037 path.moveTo(SkBits2Float(0x428bf702), SkBits2Float(0xcf223cbf));  // 69.9824f, -2.72189e+09f
6038 path.lineTo(SkBits2Float(0x42112d68), SkBits2Float(0xcf223cbf));  // 36.2943f, -2.72189e+09f
6039 path.cubicTo(SkBits2Float(0x4220d9fc), SkBits2Float(0xcf223cc0), SkBits2Float(0x420ee118), SkBits2Float(0xcf223cc0), SkBits2Float(0x41cef2f8), SkBits2Float(0xcf223cc0));  // 40.2129f, -2.72189e+09f, 35.7198f, -2.72189e+09f, 25.8686f, -2.72189e+09f
6040 path.lineTo(SkBits2Float(0x424a99e0), SkBits2Float(0xcf223cc0));  // 50.6503f, -2.72189e+09f
6041 path.cubicTo(SkBits2Float(0x42266e32), SkBits2Float(0xcf223cc0), SkBits2Float(0x41f0fa20), SkBits2Float(0xcf223cc0), SkBits2Float(0x41872ed4), SkBits2Float(0xcf223cc0));  // 41.6076f, -2.72189e+09f, 30.1221f, -2.72189e+09f, 16.8979f, -2.72189e+09f
6042 path.lineTo(SkBits2Float(0x40f8fbe0), SkBits2Float(0xcf223cc0));  // 7.78075f, -2.72189e+09f
6043 
6044     SkPath path2(path);
6045     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
6046 }
6047 
bug597926_0(skiatest::Reporter * reporter,const char * filename)6048 static void bug597926_0(skiatest::Reporter* reporter, const char* filename) {
6049 SkPath path;
6050 path.setFillType((SkPath::FillType) 0);
6051 path.moveTo(SkBits2Float(0x43b38000), SkBits2Float(0x433e0000));  // 359, 190
6052 path.lineTo(SkBits2Float(0x40c00000), SkBits2Float(0x449ce000));  // 6, 1255
6053 path.cubicTo(SkBits2Float(0x438c0000), SkBits2Float(0x4497a000), SkBits2Float(0x43e40000), SkBits2Float(0x44750000), SkBits2Float(0x41000000), SkBits2Float(0x44aa2000));  // 280, 1213, 456, 980, 8, 1361
6054 path.moveTo(SkBits2Float(0x43290000), SkBits2Float(0x4431c000));  // 169, 711
6055 path.lineTo(SkBits2Float(0xd987d6ba), SkBits2Float(0xd93d0ad4));  // -4.7794e+15f, -3.32567e+15f
6056 path.conicTo(SkBits2Float(0x43cc8000), SkBits2Float(0x445b8000), SkBits2Float(0xd888b096), SkBits2Float(0xd9a1ebfa), SkBits2Float(0x3ebcb199));  // 409, 878, -1.20234e+15f, -5.69712e+15f, 0.368542f
6057 path.cubicTo(SkBits2Float(0x43c00000), SkBits2Float(0x443a8000), SkBits2Float(0x42380000), SkBits2Float(0x4421c000), SkBits2Float(0x42500000), SkBits2Float(0x448ca000));  // 384, 746, 46, 647, 52, 1125
6058 path.quadTo(SkBits2Float(0x43948000), SkBits2Float(0x42ac0000), SkBits2Float(0x43880000), SkBits2Float(0x4487e000));  // 297, 86, 272, 1087
6059 SkPath path1(path);
6060 path.reset();
6061 path.setFillType((SkPath::FillType) 0);
6062 path.moveTo(SkBits2Float(0xc51d735c), SkBits2Float(0xc49db029));  // -2519.21f, -1261.51f
6063 path.cubicTo(SkBits2Float(0xc51d1dbd), SkBits2Float(0xc49d7a3f), SkBits2Float(0xc51c524a), SkBits2Float(0xc49d1610), SkBits2Float(0xc51d1a96), SkBits2Float(0xc49d86a6));  // -2513.86f, -1259.82f, -2501.14f, -1256.69f, -2513.66f, -1260.21f
6064 path.cubicTo(SkBits2Float(0xc51cd471), SkBits2Float(0xc49d54d0), SkBits2Float(0xc51c2e51), SkBits2Float(0xc49d0081), SkBits2Float(0xc51d197b), SkBits2Float(0xc49d7927));  // -2509.28f, -1258.65f, -2498.89f, -1256.02f, -2513.59f, -1259.79f
6065 path.quadTo(SkBits2Float(0xc51bf7eb), SkBits2Float(0xc49cf010), SkBits2Float(0xc51ba866), SkBits2Float(0xc49cb9e6));  // -2495.49f, -1255.5f, -2490.52f, -1253.81f
6066 path.cubicTo(SkBits2Float(0xc51bac0d), SkBits2Float(0xc49cc50e), SkBits2Float(0xc51c29eb), SkBits2Float(0xc49cfb01), SkBits2Float(0xc51c5bca), SkBits2Float(0xc49d1fa6));  // -2490.75f, -1254.16f, -2498.62f, -1255.84f, -2501.74f, -1256.99f
6067 SkPath path2(path);
6068 testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
6069 }
6070 
fuzz1450_0(skiatest::Reporter * reporter,const char * filename)6071 static void fuzz1450_0(skiatest::Reporter* reporter, const char* filename) {
6072 SkPath path;
6073 path.moveTo(SkBits2Float(0x43b40000), SkBits2Float(0xcf000000));  // 360, -2.14748e+09f
6074 path.conicTo(SkBits2Float(0x4e800002), SkBits2Float(0xcf000000), SkBits2Float(0x4e800002), SkBits2Float(0xce7ffffe), SkBits2Float(0x3f3504f4));  // 1.07374e+09f, -2.14748e+09f, 1.07374e+09f, -1.07374e+09f, 0.707107f
6075 path.conicTo(SkBits2Float(0x4e800002), SkBits2Float(0x43800001), SkBits2Float(0x43348000), SkBits2Float(0x43800001), SkBits2Float(0x3f3504f4));  // 1.07374e+09f, 256, 180.5f, 256, 0.707107f
6076 SkPath path1(path);
6077 path.reset();
6078 path.moveTo(SkBits2Float(0x43b40000), SkBits2Float(0x45816000));  // 360, 4140
6079 path.conicTo(SkBits2Float(0x43b40005), SkBits2Float(0x458a945d), SkBits2Float(0x45610000), SkBits2Float(0x458a945d), SkBits2Float(0x3f3504f3));  // 360, 4434.55f, 3600, 4434.55f, 0.707107f
6080 path.conicTo(SkBits2Float(0x45d5bfff), SkBits2Float(0x458a945d), SkBits2Float(0x45d5bfff), SkBits2Float(0x45816000), SkBits2Float(0x3f3504f3));  // 6840, 4434.55f, 6840, 4140, 0.707107f
6081 path.lineTo(SkBits2Float(0x42c80000), SkBits2Float(0x44000000));  // 100, 512
6082 path.lineTo(SkBits2Float(0x42000000), SkBits2Float(0x41800000));  // 32, 16
6083 path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x44800000));  // 360, 1024
6084 path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x45816000));  // 360, 4140
6085 path.close();
6086 SkPath path2(path);
6087 testPathOpFuzz(reporter, path1, path2, kUnion_SkPathOp, filename);
6088 }
6089 
fuzz1450_1(skiatest::Reporter * reporter,const char * filename)6090 static void fuzz1450_1(skiatest::Reporter* reporter, const char* filename) {
6091 SkPath path;
6092 path.setFillType(SkPath::kEvenOdd_FillType);
6093 path.moveTo(SkBits2Float(0x4e800002), SkBits2Float(0xce7ffffe));  // 1.07374e+09f, -1.07374e+09f
6094 path.conicTo(SkBits2Float(0x4e800002), SkBits2Float(0xcf000000), SkBits2Float(0x43b40000), SkBits2Float(0xcf000000), SkBits2Float(0x3f3504f4));  // 1.07374e+09f, -2.14748e+09f, 360, -2.14748e+09f, 0.707107f
6095 path.lineTo(SkBits2Float(0x43348000), SkBits2Float(0x43800001));  // 180.5f, 256
6096 path.lineTo(SkBits2Float(0x42000000), SkBits2Float(0x41800000));  // 32, 16
6097 path.lineTo(SkBits2Float(0x42c80000), SkBits2Float(0x44000000));  // 100, 512
6098 path.lineTo(SkBits2Float(0x43553abd), SkBits2Float(0x440f3cbd));  // 213.229f, 572.949f
6099 path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x44800000));  // 360, 1024
6100 path.lineTo(SkBits2Float(0x43b40000), SkBits2Float(0x45816000));  // 360, 4140
6101 path.conicTo(SkBits2Float(0x43b40005), SkBits2Float(0x458a945d), SkBits2Float(0x45610000), SkBits2Float(0x458a945d), SkBits2Float(0x3f3504f3));  // 360, 4434.55f, 3600, 4434.55f, 0.707107f
6102 path.conicTo(SkBits2Float(0x45d5bfff), SkBits2Float(0x458a945d), SkBits2Float(0x45d5bfff), SkBits2Float(0x45816000), SkBits2Float(0x3f3504f3));  // 6840, 4434.55f, 6840, 4140, 0.707107f
6103 path.lineTo(SkBits2Float(0x43553abd), SkBits2Float(0x440f3cbd));  // 213.229f, 572.949f
6104 path.lineTo(SkBits2Float(0x43348000), SkBits2Float(0x43800001));  // 180.5f, 256
6105 path.conicTo(SkBits2Float(0x4e800002), SkBits2Float(0x43800001), SkBits2Float(0x4e800002), SkBits2Float(0xce7ffffe), SkBits2Float(0x3f3504f4));  // 1.07374e+09f, 256, 1.07374e+09f, -1.07374e+09f, 0.707107f
6106 path.close();
6107 SkPath path1(path);
6108 path.reset();
6109 path.moveTo(SkBits2Float(0x42fe0000), SkBits2Float(0x43a08000));  // 127, 321
6110 path.lineTo(SkBits2Float(0x45d5c000), SkBits2Float(0x43870000));  // 6840, 270
6111 path.lineTo(SkBits2Float(0xd0a00000), SkBits2Float(0x4cbebc20));  // -2.14748e+10f, 1e+08
6112 path.lineTo(SkBits2Float(0x451f7000), SkBits2Float(0x42800000));  // 2551, 64
6113 path.lineTo(SkBits2Float(0x42fe0000), SkBits2Float(0x43a08000));  // 127, 321
6114 path.close();
6115 SkPath path2(path);
6116 testPathOpFuzz(reporter, path1, path2, kUnion_SkPathOp, filename);
6117 }
6118 
fuzz763_9(skiatest::Reporter * reporter,const char * filename)6119 static void fuzz763_9(skiatest::Reporter* reporter, const char* filename) {
6120     SkPath path;
6121     path.setFillType((SkPath::FillType) 1);
6122 
6123     SkPath path1(path);
6124     path.reset();
6125     path.setFillType((SkPath::FillType) 0);
6126 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6127 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x7bc00321), SkBits2Float(0xed7a6a4b), SkBits2Float(0x1f212a8c));  // 2.49282e-13f, 4.78968e-34f, 1.99397e+36f, -4.84373e+27f, 3.41283e-20f
6128 path.lineTo(SkBits2Float(0x7bc00321), SkBits2Float(0xed7a6a4b));  // 1.99397e+36f, -4.84373e+27f
6129 path.lineTo(SkBits2Float(0x282a3a21), SkBits2Float(0x3a21df28));  // 9.4495e-15f, 0.000617492f
6130 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6131 path.close();
6132 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6133 path.quadTo(SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3), SkBits2Float(0x1d2a2928), SkBits2Float(0x63962be6));  // -8.10388e-33f, 0.00148185f, 2.25206e-21f, 5.54035e+21f
6134 path.moveTo(SkBits2Float(0x29272a81), SkBits2Float(0x2ab03a55));  // 3.71183e-14f, 3.13044e-13f
6135 path.quadTo(SkBits2Float(0x2720213b), SkBits2Float(0x3a214729), SkBits2Float(0xdf28282a), SkBits2Float(0x8a2f2121));  // 2.22225e-15f, 0.000615227f, -1.2117e+19f, -8.43217e-33f
6136 path.quadTo(SkBits2Float(0x373b3a27), SkBits2Float(0x201fc4c1), SkBits2Float(0x27576c2a), SkBits2Float(0x5921c25d));  // 1.11596e-05f, 1.35329e-19f, 2.98959e-15f, 2.8457e+15f
6137 path.quadTo(SkBits2Float(0x2720213b), SkBits2Float(0x3a214729), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21));  // 2.22225e-15f, 0.000615227f, -1.2117e+19f, 0.00105459f
6138 path.cubicTo(SkBits2Float(0x373b3ac5), SkBits2Float(0x201fc422), SkBits2Float(0x523a702a), SkBits2Float(0x27576c51), SkBits2Float(0x5921c25d), SkBits2Float(0x51523a70));  // 1.11598e-05f, 1.35327e-19f, 2.00186e+11f, 2.9896e-15f, 2.8457e+15f, 5.64327e+10f
6139 path.quadTo(SkBits2Float(0xd912102a), SkBits2Float(0x284f9a28), SkBits2Float(0xb38a1f30), SkBits2Float(0x3a3ac23a));  // -2.56957e+15f, 1.15242e-14f, -6.4318e-08f, 0.000712428f
6140 path.lineTo(SkBits2Float(0xc809272a), SkBits2Float(0x29b02829));  // -140445, 7.82294e-14f
6141 
6142     SkPath path2(path);
6143     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
6144 }
6145 
6146 
fuzz763_4(skiatest::Reporter * reporter,const char * filename)6147 static void fuzz763_4(skiatest::Reporter* reporter, const char* filename) {
6148     SkPath path;
6149     path.setFillType((SkPath::FillType) 1);
6150 
6151     SkPath path1(path);
6152     path.reset();
6153     path.setFillType((SkPath::FillType) 0);
6154 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6155 path.lineTo(SkBits2Float(0x555b3a2d), SkBits2Float(0x2a212a8c));  // 1.50652e+13f, 1.43144e-13f
6156 path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0));  // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f
6157 path.conicTo(SkBits2Float(0x3a2147ed), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac2b33a));  // 0.000615238f, -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148544f
6158 path.cubicTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x63962be6), SkBits2Float(0x295b2d2a), SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c275b));  // 2.25206e-21f, 5.54035e+21f, 4.86669e-14f, 3.19905e+24f, 9.6297e-12f, 2.48963e-13f
6159 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6160 path.close();
6161 path.moveTo(SkBits2Float(0x55685b1f), SkBits2Float(0x5b2d2968));  // 1.59674e+13f, 4.87407e+16f
6162 path.lineTo(SkBits2Float(0x2a212a8c), SkBits2Float(0x2a21081f));  // 1.43144e-13f, 1.43025e-13f
6163 path.conicTo(SkBits2Float(0xde6a4b7b), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x3a7bc003), SkBits2Float(0x47ed7a6a));  // -4.22068e+18f, 2.50338e-13f, 4.61198e-19f, 0.00096035f, 121589
6164 path.lineTo(SkBits2Float(0x55685b1f), SkBits2Float(0x5b2d2968));  // 1.59674e+13f, 4.87407e+16f
6165 path.close();
6166 path.moveTo(SkBits2Float(0x55685b1f), SkBits2Float(0x5b2d2968));  // 1.59674e+13f, 4.87407e+16f
6167 path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3));  // -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
6168 path.lineTo(SkBits2Float(0x2928088c), SkBits2Float(0x2be61d2a));  // 3.73109e-14f, 1.63506e-12f
6169 path.conicTo(SkBits2Float(0x2a812a63), SkBits2Float(0x2d292a27), SkBits2Float(0x5568295b), SkBits2Float(0x5b2d2968), SkBits2Float(0x552d6829));  // 2.29444e-13f, 9.6159e-12f, 1.5954e+13f, 4.87407e+16f, 1.19164e+13f
6170 path.conicTo(SkBits2Float(0x395b2d5b), SkBits2Float(0x68552768), SkBits2Float(0x555b2df0), SkBits2Float(0x1f722a8c), SkBits2Float(0x082a212a));  // 0.000209024f, 4.02636e+24f, 1.50619e+13f, 5.12807e-20f, 5.11965e-34f
6171 path.lineTo(SkBits2Float(0x55685b1f), SkBits2Float(0x5b2d2968));  // 1.59674e+13f, 4.87407e+16f
6172 path.close();
6173 path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6174 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2147ed7a), SkBits2Float(0x28282a3a), SkBits2Float(0x21df212a), SkBits2Float(0x033a8a3a));  // 6.14991e+25f, 6.77381e-19f, 9.33503e-15f, 1.51198e-18f, 5.48192e-37f
6175 
6176     SkPath path2(path);
6177     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
6178 }
6179 
fuzz763_3(skiatest::Reporter * reporter,const char * filename)6180 static void fuzz763_3(skiatest::Reporter* reporter, const char* filename) {
6181     SkPath path;
6182     path.setFillType((SkPath::FillType) 1);
6183 
6184     SkPath path1(path);
6185     path.reset();
6186     path.setFillType((SkPath::FillType) 0);
6187 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6188 path.lineTo(SkBits2Float(0x555b292d), SkBits2Float(0x2a212a8c));  // 1.50606e+13f, 1.43144e-13f
6189 path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x295b2d1f), SkBits2Float(0x29685568));  // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.86669e-14f, 5.15884e-14f
6190 path.conicTo(SkBits2Float(0x8c28295b), SkBits2Float(0x1f21212a), SkBits2Float(0xc0032a08), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced));  // -1.29547e-31f, 3.41205e-20f, -2.04944f, 3.04132e+35f, 5.77848e-19f
6191 path.moveTo(SkBits2Float(0x25682929), SkBits2Float(0x212a8c5b));  // 2.01367e-16f, 5.7784e-19f
6192 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4a7bc0));  // 4.7323e-37f, 6.11969e+25f
6193 path.conicTo(SkBits2Float(0x032108ed), SkBits2Float(0x283a7bc0), SkBits2Float(0x47ed7a6a), SkBits2Float(0x282a3a21), SkBits2Float(0x3a21ff28));  // 4.73239e-37f, 1.03519e-14f, 121589, 9.4495e-15f, 0.000617968f
6194 path.quadTo(SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3), SkBits2Float(0x2a292827), SkBits2Float(0x962be61d));  // -8.10388e-33f, 0.00148185f, 1.50241e-13f, -1.38859e-25f
6195 path.lineTo(SkBits2Float(0x295b2d2a), SkBits2Float(0x2d296868));  // 4.86669e-14f, 9.62972e-12f
6196 path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6197 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x898ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x3a7bc003), SkBits2Float(0x47ed7a6a));  // 6.14991e+25f, -3.39271e-33f, 4.61198e-19f, 0.00096035f, 121589
6198 path.lineTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6199 path.close();
6200 path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6201 path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0xb38a281a), SkBits2Float(0x29283ac2));  // -1.2117e+19f, 0.00105459f, -6.43342e-08f, 3.73545e-14f
6202 path.moveTo(SkBits2Float(0x962be61d), SkBits2Float(0x432a2927));  // -1.38859e-25f, 170.161f
6203 path.conicTo(SkBits2Float(0x3a2a552a), SkBits2Float(0x3b1e2ab0), SkBits2Float(0x29272021), SkBits2Float(0x3b3ac527), SkBits2Float(0x1fc42236));  // 0.000649768f, 0.00241343f, 3.71093e-14f, 0.00284989f, 8.30658e-20f
6204 path.cubicTo(SkBits2Float(0x27576c2a), SkBits2Float(0x5921c25d), SkBits2Float(0x51503a70), SkBits2Float(0x12102a10), SkBits2Float(0x633a28d9), SkBits2Float(0x29c80927));  // 2.98959e-15f, 2.8457e+15f, 5.58959e+10f, 4.54902e-28f, 3.43404e+21f, 8.88337e-14f
6205 path.lineTo(SkBits2Float(0x272927b0), SkBits2Float(0x5b392929));  // 2.3475e-15f, 5.21181e+16f
6206 path.moveTo(SkBits2Float(0x3a1127b4), SkBits2Float(0x2921ee3b));  // 0.000553723f, 3.59558e-14f
6207 path.cubicTo(SkBits2Float(0x5e215d3b), SkBits2Float(0x7828ee3a), SkBits2Float(0x8e28b03b), SkBits2Float(0x50783be8), SkBits2Float(0x9e0b8a3a), SkBits2Float(0x555b2d68));  // 2.90688e+18f, 1.37053e+34f, -2.07925e-30f, 1.66587e+10f, -7.38718e-21f, 1.50618e+13f
6208 path.moveTo(SkBits2Float(0x21081f3f), SkBits2Float(0x9fd4e62a));  // 4.61199e-19f, -9.01663e-20f
6209 path.cubicTo(SkBits2Float(0x3a293a2a), SkBits2Float(0x0e3bf0c5), SkBits2Float(0x3b29d42a), SkBits2Float(0x0f217265), SkBits2Float(0x2d5d2921), SkBits2Float(0x5568295b));  // 0.000645551f, 2.31655e-30f, 0.00259138f, 7.95994e-30f, 1.25715e-11f, 1.5954e+13f
6210 
6211     SkPath path2(path);
6212     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
6213 }
6214 
fuzz763_5(skiatest::Reporter * reporter,const char * filename)6215 static void fuzz763_5(skiatest::Reporter* reporter, const char* filename) {
6216     SkPath path;
6217     path.setFillType((SkPath::FillType) 1);
6218 
6219     SkPath path1(path);
6220     path.reset();
6221     path.setFillType((SkPath::FillType) 0);
6222 path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55));  // 4.76191e+16f, 1.51477e-13f
6223 path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b79), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0));  // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f
6224 path.conicTo(SkBits2Float(0x3a2147ed), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3));  // 0.000615238f, -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
6225 path.cubicTo(SkBits2Float(0xe62a2928), SkBits2Float(0x2a63962b), SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x001f2a21));  // -2.0089e+23f, 2.02138e-13f, 3.19905e+24f, 9.6297e-12f, 2.49282e-13f, 2.86201e-39f
6226 path.lineTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55));  // 4.76191e+16f, 1.51477e-13f
6227 path.close();
6228 path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55));  // 4.76191e+16f, 1.51477e-13f
6229 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x3a7bc003), SkBits2Float(0x47ed7a6a));  // 6.14991e+25f, 2.50338e-13f, 4.61198e-19f, 0.00096035f, 121589
6230 path.lineTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55));  // 4.76191e+16f, 1.51477e-13f
6231 path.close();
6232 path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x2a2a8c55));  // 4.76191e+16f, 1.51477e-13f
6233 path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3b21), SkBits2Float(0x28ee4f9a), SkBits2Float(0x68293b78));  // -1.2117e+19f, 0.00105462f, 2.64578e-14f, 3.19671e+24f
6234 path.lineTo(SkBits2Float(0x5b2d2968), SkBits2Float(0x5b2d8c55));  // 4.87407e+16f, 4.88495e+16f
6235 
6236     SkPath path2(path);
6237     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
6238 }
6239 
fuzz763_2(skiatest::Reporter * reporter,const char * filename)6240 static void fuzz763_2(skiatest::Reporter* reporter, const char* filename) {
6241     SkPath path;
6242     path.setFillType((SkPath::FillType) 1);
6243 
6244     SkPath path1(path);
6245     path.reset();
6246     path.setFillType((SkPath::FillType) 0);
6247 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6248 path.lineTo(SkBits2Float(0x555b292d), SkBits2Float(0x2a212a8c));  // 1.50606e+13f, 1.43144e-13f
6249 path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0));  // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f
6250 path.lineTo(SkBits2Float(0x081f2ad7), SkBits2Float(0x7bc00321));  // 4.78977e-34f, 1.99397e+36f
6251 path.moveTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828));  // 1.65317e-13f, -1.16126e+19f
6252 path.quadTo(SkBits2Float(0x4f1a3a8a), SkBits2Float(0x3ab38a28), SkBits2Float(0x29283ac2), SkBits2Float(0x962be62a));  // 2.58753e+09f, 0.00136978f, 3.73545e-14f, -1.38859e-25f
6253 path.cubicTo(SkBits2Float(0x272a812a), SkBits2Float(0x3a2a5529), SkBits2Float(0x3b1e2ab0), SkBits2Float(0x29272021), SkBits2Float(0x3b3ac527), SkBits2Float(0x1fc42237));  // 2.36623e-15f, 0.000649768f, 0.00241343f, 3.71093e-14f, 0.00284989f, 8.30658e-20f
6254 path.cubicTo(SkBits2Float(0x27576c2a), SkBits2Float(0x5921c25d), SkBits2Float(0x51523a70), SkBits2Float(0x12102a10), SkBits2Float(0x633a28d9), SkBits2Float(0x29c80927));  // 2.98959e-15f, 2.8457e+15f, 5.64327e+10f, 4.54902e-28f, 3.43404e+21f, 8.88337e-14f
6255 path.lineTo(SkBits2Float(0x29292727), SkBits2Float(0x21475b3b));  // 3.75595e-14f, 6.75446e-19f
6256 path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3));  // -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
6257 path.cubicTo(SkBits2Float(0x682d2928), SkBits2Float(0x555b6829), SkBits2Float(0x555b292d), SkBits2Float(0x2a212a8c), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 3.27091e+24f, 1.50775e+13f, 1.50606e+13f, 1.43144e-13f, 4.7323e-37f, 6.14991e+25f
6258 path.conicTo(SkBits2Float(0x295b2ded), SkBits2Float(0x29685568), SkBits2Float(0x8c555b2d), SkBits2Float(0xe61d2a2a), SkBits2Float(0x2a63962b));  // 4.86676e-14f, 5.15884e-14f, -1.64364e-31f, -1.85547e+23f, 2.02138e-13f
6259 path.conicTo(SkBits2Float(0x5568295b), SkBits2Float(0x5b2d2968), SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a), SkBits2Float(0x4b7bc003));  // 1.5954e+13f, 4.87407e+16f, 5.7784e-19f, 4.61198e-19f, 1.64987e+07f
6260 path.lineTo(SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21));  // 2.50338e-13f, 4.61198e-19f
6261 path.conicTo(SkBits2Float(0x6a3a7bc0), SkBits2Float(0x2147ed7a), SkBits2Float(0x28282a3a), SkBits2Float(0x8a3a21df), SkBits2Float(0x27b42a3a));  // 5.63611e+25f, 6.77381e-19f, 9.33503e-15f, -8.96194e-33f, 5.00058e-15f
6262 path.conicTo(SkBits2Float(0x2921217d), SkBits2Float(0x5e3a3b35), SkBits2Float(0x7828ee3a), SkBits2Float(0x8e28b03b), SkBits2Float(0x783be82a));  // 3.57782e-14f, 3.35484e+18f, 1.37053e+34f, -2.07925e-30f, 1.52448e+34f
6263 path.conicTo(SkBits2Float(0x8e0b8a3a), SkBits2Float(0x279fd4e6), SkBits2Float(0x7a293a2a), SkBits2Float(0x2a0ef0c5), SkBits2Float(0x653b29d4));  // -1.71996e-30f, 4.43622e-15f, 2.19669e+35f, 1.26957e-13f, 5.52409e+22f
6264 path.quadTo(SkBits2Float(0x29210f21), SkBits2Float(0x282a085d), SkBits2Float(0xc2ab2127), SkBits2Float(0xa6800028));  // 3.57623e-14f, 9.43871e-15f, -85.5648f, -8.88183e-16f
6265 path.lineTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828));  // 1.65317e-13f, -1.16126e+19f
6266 path.close();
6267 path.moveTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828));  // 1.65317e-13f, -1.16126e+19f
6268 path.quadTo(SkBits2Float(0x216a2770), SkBits2Float(0x2ab73b28), SkBits2Float(0x4b28f427), SkBits2Float(0x283b5b28));  // 7.93345e-19f, 3.25484e-13f, 1.10726e+07f, 1.04004e-14f
6269 path.lineTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828));  // 1.65317e-13f, -1.16126e+19f
6270 path.close();
6271 path.moveTo(SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828));  // 1.65317e-13f, -1.16126e+19f
6272 path.conicTo(SkBits2Float(0xf86d273b), SkBits2Float(0x27e523e3), SkBits2Float(0x2927e0f5), SkBits2Float(0x2ac0e729), SkBits2Float(0x6b492128));  // -1.92402e+34f, 6.35992e-15f, 3.72766e-14f, 3.42665e-13f, 2.43151e+26f
6273 path.cubicTo(SkBits2Float(0x2f273927), SkBits2Float(0xa83a2c21), SkBits2Float(0xd7122121), SkBits2Float(0x21212921), SkBits2Float(0x3be3db3a), SkBits2Float(0xa9deb63b));  // 1.52089e-10f, -1.03346e-14f, -1.60671e+14f, 5.46034e-19f, 0.00695362f, -9.89039e-14f
6274 
6275     SkPath path2(path);
6276     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
6277 }
6278 
6279 // crbug.com/626164
fuzz763_1c(skiatest::Reporter * reporter,const char * filename)6280 static void fuzz763_1c(skiatest::Reporter* reporter, const char* filename) {
6281     SkPath path;
6282     path.setFillType((SkPath::FillType) 0);
6283 
6284     SkPath path1(path);
6285     path.reset();
6286     path.setFillType((SkPath::FillType) 0);
6287     path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6288     path.cubicTo(SkBits2Float(0x1931204a), SkBits2Float(0x2ba1a14a), SkBits2Float(0x4a4a08ff), SkBits2Float(0x4a4a08ff), SkBits2Float(0x4a4a4a34), SkBits2Float(0x4a4a4a4a));  // 9.15721e-24f, 1.14845e-12f, 3.31014e+06f, 3.31014e+06f, 3.31432e+06f, 3.31432e+06f
6289     path.moveTo(SkBits2Float(0x000010a1), SkBits2Float(0x19312000));  // 5.96533e-42f, 9.15715e-24f
6290     path.cubicTo(SkBits2Float(0x4a4a4a4a), SkBits2Float(0x4a4a4a4a), SkBits2Float(0xa14a4a4a), SkBits2Float(0x08ff2ba1), SkBits2Float(0x08ff4a4a), SkBits2Float(0x4a344a4a));  // 3.31432e+06f, 3.31432e+06f, -6.85386e-19f, 1.53575e-33f, 1.53647e-33f, 2.95387e+06f
6291     path.cubicTo(SkBits2Float(0x4a4a4a4a), SkBits2Float(0x4a4a4a4a), SkBits2Float(0x2ba1a14a), SkBits2Float(0x4e4a08ff), SkBits2Float(0x4a4a4a4a), SkBits2Float(0xa1a181ff));  // 3.31432e+06f, 3.31432e+06f, 1.14845e-12f, 8.47397e+08f, 3.31432e+06f, -1.09442e-18f
6292 
6293     SkPath path2(path);
6294     SkPath dummy;
6295     testPathOpFuzz(reporter, path1, path2, (SkPathOp)4, filename);
6296 }
6297 
6298 // crbug.com/626186
fuzz763_1b(skiatest::Reporter * reporter,const char * filename)6299 static void fuzz763_1b(skiatest::Reporter* reporter, const char* filename) {
6300     SkPath path;
6301     path.setFillType((SkPath::FillType) 0);
6302     path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6303     path.cubicTo(SkBits2Float(0x0000ff07), SkBits2Float(0xf9f9ff00), SkBits2Float(0xfe0ef9f4), SkBits2Float(0xd9b105fb), SkBits2Float(0x000000f9), SkBits2Float(0xfe11f901));  // 9.14866e-41f, -1.62257e+35f, -4.75121e+37f, -6.22846e+15f, 3.48923e-43f, -4.85077e+37f
6304     path.lineTo(SkBits2Float(0xda1905ed), SkBits2Float(0x3c05fbfb));  // -1.0768e+16f, 0.00817775f
6305     path.cubicTo(SkBits2Float(0x3c3c3c3c), SkBits2Float(0x3c3c3c3c), SkBits2Float(0x253c7f00), SkBits2Float(0xfa00d3fa), SkBits2Float(0x250025fe), SkBits2Float(0x00000006));  // 0.011489f, 0.011489f, 1.63494e-16f, -1.67228e+35f, 1.11151e-16f, 8.40779e-45f
6306 
6307     SkPath path1(path);
6308     path.reset();
6309     path.setFillType((SkPath::FillType) 0);
6310     path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6311     path.quadTo(SkBits2Float(0x3c3c3c3c), SkBits2Float(0xfa253c3c), SkBits2Float(0xfefa00d3), SkBits2Float(0x25fad9df));  // 0.011489f, -2.14488e+35f, -1.66156e+38f, 4.35157e-16f
6312     path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6313     path.close();
6314     path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6315     path.lineTo(SkBits2Float(0x8dfefa00), SkBits2Float(0xf0f9fad9));  // -1.57141e-30f, -6.1892e+29f
6316     path.cubicTo(SkBits2Float(0x20fe58f9), SkBits2Float(0x0525fbed), SkBits2Float(0x1905ffff), SkBits2Float(0x01f9f9f9), SkBits2Float(0xfbfe0ef9), SkBits2Float(0xfb212fff));  // 4.30882e-19f, 7.80453e-36f, 6.92764e-24f, 9.18268e-38f, -2.63829e+36f, -8.36933e+35f
6317 
6318     SkPath path2(path);
6319     testPathOpFuzz(reporter, path1, path2, (SkPathOp)2, filename);
6320 }
6321 
fuzz763_1a(skiatest::Reporter * reporter,const char * filename)6322 static void fuzz763_1a(skiatest::Reporter* reporter, const char* filename) {
6323     SkPath path;
6324     path.setFillType((SkPath::FillType) 0);
6325     path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6326     path.cubicTo(SkBits2Float(0x154be880), SkBits2Float(0x80000640), SkBits2Float(0x5559a419), SkBits2Float(0x59d55928), SkBits2Float(0x80045959), SkBits2Float(0x40154be8));  // 4.11789e-26f, -2.24208e-42f, 1.49562e+13f, 7.50652e+15f, -3.99394e-40f, 2.33276f
6327 
6328     SkPath path1(path);
6329     path.reset();
6330     path.setFillType((SkPath::FillType) 0);
6331     path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6332     path.quadTo(SkBits2Float(0x5559a419), SkBits2Float(0x59d55928), SkBits2Float(0xbd595959), SkBits2Float(0x3f3f3f09));  // 1.49562e+13f, 7.50652e+15f, -0.0530637f, 0.747056f
6333     path.moveTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0x3f3f3f3f));  // 0.747059f, 0.747059f
6334     path.moveTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0xff3f3f3f));  // 0.747059f, -2.54211e+38f
6335     path.lineTo(SkBits2Float(0x09090909), SkBits2Float(0x3038d509));  // 1.6495e-33f, 6.72416e-10f
6336     path.conicTo(SkBits2Float(0x5947ffff), SkBits2Float(0x40e88004), SkBits2Float(0x00002059), SkBits2Float(0x28555900), SkBits2Float(0x5959d559));  // 3.51844e+15f, 7.26563f, 1.16042e-41f, 1.18432e-14f, 3.83217e+15f
6337     path.lineTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0xff3f3f3f));  // 0.747059f, -2.54211e+38f
6338     path.close();
6339     path.moveTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0xff3f3f3f));  // 0.747059f, -2.54211e+38f
6340     path.lineTo(SkBits2Float(0x38d57f4b), SkBits2Float(0x59597f4b));  // 0.000101803f, 3.82625e+15f
6341     path.lineTo(SkBits2Float(0x3f3f3f3f), SkBits2Float(0xff3f3f3f));  // 0.747059f, -2.54211e+38f
6342     path.close();
6343     path.moveTo(SkBits2Float(0x384700ff), SkBits2Float(0x0108804b));  // 4.74462e-05f, 2.50713e-38f
6344 
6345     SkPath path2(path);
6346     testPathOpFuzz(reporter, path1, path2, (SkPathOp)0, filename);
6347 }
6348 
6349 // crbug.com/627780
fuzz763_3a(skiatest::Reporter * reporter,const char * filename)6350 static void fuzz763_3a(skiatest::Reporter* reporter, const char* filename) {
6351     SkPath path;
6352     path.setFillType((SkPath::FillType) 1);
6353 
6354     SkPath path1(path);
6355     path.reset();
6356     path.setFillType((SkPath::FillType) 0);
6357 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6358 path.lineTo(SkBits2Float(0x555b292d), SkBits2Float(0x2a212a8c));  // 1.50606e+13f, 1.43144e-13f
6359 path.conicTo(SkBits2Float(0xc0032108), SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0));  // -2.04889f, 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f
6360 path.conicTo(SkBits2Float(0x3a2147ed), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3));  // 0.000615238f, -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
6361 path.cubicTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x63962be6), SkBits2Float(0x272a812a), SkBits2Float(0x295b2d29), SkBits2Float(0x2a685568), SkBits2Float(0x68295b2d));  // 2.25206e-21f, 5.54035e+21f, 2.36623e-15f, 4.86669e-14f, 2.06354e-13f, 3.19905e+24f
6362 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x7bc00321), SkBits2Float(0x7a6a4b77), SkBits2Float(0x3a214726));  // 2.49282e-13f, 4.78968e-34f, 1.99397e+36f, 3.04132e+35f, 0.000615226f
6363 path.moveTo(SkBits2Float(0x8adf2028), SkBits2Float(0x3a219a3a));  // -2.14862e-32f, 0.000616464f
6364 path.quadTo(SkBits2Float(0x3ab38e28), SkBits2Float(0x29283ac2), SkBits2Float(0x2be61d2a), SkBits2Float(0x812a4396));  // 0.0013699f, 3.73545e-14f, 1.63506e-12f, -3.12726e-38f
6365 
6366     SkPath path2(path);
6367     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
6368 }
6369 
6370 // crbug.com/627689
fuzz763_5a(skiatest::Reporter * reporter,const char * filename)6371 static void fuzz763_5a(skiatest::Reporter* reporter, const char* filename) {
6372     SkPath path;
6373     path.setFillType((SkPath::FillType) 1);
6374 path.moveTo(SkBits2Float(0x38bd8610), SkBits2Float(0x00000000));  // 9.03719e-05f, 0
6375 path.conicTo(SkBits2Float(0x4183d871), SkBits2Float(0x41fea321), SkBits2Float(0xb700ff00), SkBits2Float(0x4240b8b8), SkBits2Float(0x3b058283));  // 16.4807f, 31.8297f, -7.68877e-06f, 48.1804f, 0.0020372f
6376 path.lineTo(SkBits2Float(0x3a3a3ab8), SkBits2Float(0xb8b8b8b8));  // 0.000710409f, -8.80821e-05f
6377 path.conicTo(SkBits2Float(0x3a455ec8), SkBits2Float(0xb8b8b8b3), SkBits2Float(0x38b2418d), SkBits2Float(0xb730d014), SkBits2Float(0x3f7ffff3));  // 0.000752908f, -8.80821e-05f, 8.49991e-05f, -1.05389e-05f, 0.999999f
6378 path.quadTo(SkBits2Float(0x3a51246a), SkBits2Float(0xb6da45a3), SkBits2Float(0x38bc5c3c), SkBits2Float(0x00000000));  // 0.000797814f, -6.50501e-06f, 8.98172e-05f, 0
6379 path.lineTo(SkBits2Float(0x3a3a3ab8), SkBits2Float(0xb8b8b8b8));  // 0.000710409f, -8.80821e-05f
6380 path.quadTo(SkBits2Float(0x39a32d2d), SkBits2Float(0x00000000), SkBits2Float(0xb8a13a00), SkBits2Float(0x00000000));  // 0.000311234f, 0, -7.68788e-05f, 0
6381 path.lineTo(SkBits2Float(0x3a3a3ab8), SkBits2Float(0xb8b8b8b8));  // 0.000710409f, -8.80821e-05f
6382 path.quadTo(SkBits2Float(0x39ba814c), SkBits2Float(0xb838fed2), SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0.00035573f, -4.41063e-05f, 0, 0
6383 path.lineTo(SkBits2Float(0x38bd8610), SkBits2Float(0x00000000));  // 9.03719e-05f, 0
6384 path.close();
6385 
6386     SkPath path1(path);
6387     path.reset();
6388     path.setFillType((SkPath::FillType) 0);
6389 
6390     SkPath path2(path);
6391     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
6392 }
6393 
6394 // crbug.com/627401
fuzz763_2a(skiatest::Reporter * reporter,const char * filename)6395 static void fuzz763_2a(skiatest::Reporter* reporter, const char* filename) {
6396     SkPath path;
6397     path.setFillType((SkPath::FillType) 1);
6398 
6399     SkPath path1(path);
6400     path.reset();
6401     path.setFillType((SkPath::FillType) 0);
6402 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6403 path.quadTo(SkBits2Float(0x3e484500), SkBits2Float(0x164f3a30), SkBits2Float(0x49484801), SkBits2Float(0x7d0100c8));  // 0.195576f, 1.67397e-25f, 820352, 1.07172e+37f
6404 path.conicTo(SkBits2Float(0xff7f36fd), SkBits2Float(0x3e647d01), SkBits2Float(0x0c00f430), SkBits2Float(0x486b6448), SkBits2Float(0x00484848));  // -3.39239e+38f, 0.223133f, 9.93424e-32f, 241041, 6.63809e-39f
6405 path.lineTo(SkBits2Float(0x4f4f557d), SkBits2Float(0x48480112));  // 3.47849e+09f, 204804
6406 path.lineTo(SkBits2Float(0xf40c01ff), SkBits2Float(0x45008000));  // -4.43702e+31f, 2056
6407 path.moveTo(SkBits2Float(0x4bfffa00), SkBits2Float(0x7d4ac859));  // 3.35514e+07f, 1.68465e+37f
6408 path.conicTo(SkBits2Float(0x7d014f3e), SkBits2Float(0x00f4ff01), SkBits2Float(0x6b64480c), SkBits2Float(0x48484848), SkBits2Float(0x557d0100));  // 1.07426e+37f, 2.24993e-38f, 2.75975e+26f, 205089, 1.73863e+13f
6409 
6410     SkPath path2(path);
6411     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6412 }
6413 
6414 // crbug.com/627761
fuzz763_2b(skiatest::Reporter * reporter,const char * filename)6415 static void fuzz763_2b(skiatest::Reporter* reporter, const char* filename) {
6416     SkPath path;
6417     path.setFillType((SkPath::FillType) 1);
6418 
6419     SkPath path1(path);
6420     path.reset();
6421     path.setFillType((SkPath::FillType) 0);
6422 path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x212a8c55));  // 4.76191e+16f, 5.7784e-19f
6423 path.moveTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003));  // 0.00245715f, 1.64987e+07f
6424 path.lineTo(SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21));  // 2.50338e-13f, 4.61198e-19f
6425 path.conicTo(SkBits2Float(0x6a3a7bc0), SkBits2Float(0x4721ed7a), SkBits2Float(0x282a3a21), SkBits2Float(0x3a21df28), SkBits2Float(0x4f9a3a8a));  // 5.63611e+25f, 41453.5f, 9.4495e-15f, 0.000617492f, 5.17506e+09f
6426 path.lineTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003));  // 0.00245715f, 1.64987e+07f
6427 path.close();
6428 path.moveTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003));  // 0.00245715f, 1.64987e+07f
6429 path.cubicTo(SkBits2Float(0x273ac23a), SkBits2Float(0x1d2a2928), SkBits2Float(0x63962be6), SkBits2Float(0x272a812a), SkBits2Float(0x295b2d29), SkBits2Float(0x29685568));  // 2.5918e-15f, 2.25206e-21f, 5.54035e+21f, 2.36623e-15f, 4.86669e-14f, 5.15884e-14f
6430 path.lineTo(SkBits2Float(0x081f2a21), SkBits2Float(0x7bc00321));  // 4.78968e-34f, 1.99397e+36f
6431 path.lineTo(SkBits2Float(0x282a3a21), SkBits2Float(0x3a21df28));  // 9.4495e-15f, 0.000617492f
6432 path.lineTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003));  // 0.00245715f, 1.64987e+07f
6433 path.close();
6434 path.moveTo(SkBits2Float(0x3b21081f), SkBits2Float(0x4b7bc003));  // 0.00245715f, 1.64987e+07f
6435 path.quadTo(SkBits2Float(0x8a4fc29a), SkBits2Float(0x3ab3283a), SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6));  // -1.00033e-32f, 0.00136686f, 2.25206e-21f, 300.343f
6436 path.moveTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829));  // 4.87419e+16f, 3.71718e-14f
6437 path.conicTo(SkBits2Float(0x1e2ab03a), SkBits2Float(0x2920213b), SkBits2Float(0x3b3ac527), SkBits2Float(0xc422333b), SkBits2Float(0x6c2a9f1f));  // 9.03617e-21f, 3.5556e-14f, 0.00284989f, -648.8f, 8.25075e+26f
6438 path.quadTo(SkBits2Float(0xc25d2757), SkBits2Float(0x3a705921), SkBits2Float(0x2a105152), SkBits2Float(0x28d91210));  // -55.2884f, 0.000916855f, 1.2818e-13f, 2.40997e-14f
6439 path.quadTo(SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21));  // 3.19905e+24f, 9.6297e-12f, 2.49282e-13f, 4.78968e-34f
6440 path.lineTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829));  // 4.87419e+16f, 3.71718e-14f
6441 path.close();
6442 path.moveTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829));  // 4.87419e+16f, 3.71718e-14f
6443 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0xcb7bc003), SkBits2Float(0x47ed7a6a));  // 6.14991e+25f, 2.50338e-13f, 4.61198e-19f, -1.64987e+07f, 121589
6444 path.lineTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829));  // 4.87419e+16f, 3.71718e-14f
6445 path.close();
6446 path.moveTo(SkBits2Float(0x5b2d2a81), SkBits2Float(0x29276829));  // 4.87419e+16f, 3.71718e-14f
6447 path.quadTo(SkBits2Float(0xdf28282a), SkBits2Float(0x2d8a3a21), SkBits2Float(0x5b682b68), SkBits2Float(0x5b292d55));  // -1.2117e+19f, 1.57146e-11f, 6.53499e+16f, 4.76191e+16f
6448 path.lineTo(SkBits2Float(0x2a212a8c), SkBits2Float(0x0321081f));  // 1.43144e-13f, 4.7323e-37f
6449 path.conicTo(SkBits2Float(0x7a6a4b7b), SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x3a21477a));  // 3.04132e+35f, 5.77848e-19f, 4.7323e-37f, 5.63611e+25f, 0.000615231f
6450 path.moveTo(SkBits2Float(0x21df2828), SkBits2Float(0x9a3a8a3a));  // 1.51217e-18f, -3.85756e-23f
6451 path.quadTo(SkBits2Float(0x3ab38a28), SkBits2Float(0x28273ac2), SkBits2Float(0xe61d2a29), SkBits2Float(0x2a63962b));  // 0.00136978f, 9.2831e-15f, -1.85547e+23f, 2.02138e-13f
6452 path.conicTo(SkBits2Float(0x2d29272a), SkBits2Float(0x5568295b), SkBits2Float(0x5b2d2968), SkBits2Float(0x5b2d6829), SkBits2Float(0x212a8c55));  // 9.61523e-12f, 1.5954e+13f, 4.87407e+16f, 4.88097e+16f, 5.7784e-19f
6453 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6454 path.conicTo(SkBits2Float(0x3a2147ed), SkBits2Float(0xdf28282a), SkBits2Float(0x3a8a3a21), SkBits2Float(0x8a284f9a), SkBits2Float(0x3ac23ab3));  // 0.000615238f, -1.2117e+19f, 0.00105459f, -8.10388e-33f, 0.00148185f
6455 path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6456 path.close();
6457 
6458     SkPath path2(path);
6459     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
6460 }
6461 
fuzz763_2c(skiatest::Reporter * reporter,const char * filename)6462 static void fuzz763_2c(skiatest::Reporter* reporter, const char* filename) {
6463     SkPath path;
6464     path.setFillType((SkPath::FillType) 1);
6465 
6466 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x36344a4a));  // 0, 2.68653e-06f
6467 path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x364a4a4a), SkBits2Float(0x364a4a4a), SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0, 3.01436e-06f, 3.01436e-06f, 0, 0
6468 path.lineTo(SkBits2Float(0x364a4a4a), SkBits2Float(0x00000000));  // 3.01436e-06f, 0
6469 path.cubicTo(SkBits2Float(0x364a30f0), SkBits2Float(0x344ac7fb), SkBits2Float(0x3656d432), SkBits2Float(0x34cabb48), SkBits2Float(0x367031a9), SkBits2Float(0x351802f1));  // 3.01288e-06f, 1.88855e-07f, 3.2012e-06f, 3.77617e-07f, 3.57917e-06f, 5.66287e-07f
6470 path.cubicTo(SkBits2Float(0x36a7b150), SkBits2Float(0x35ab09db), SkBits2Float(0x371874ed), SkBits2Float(0x3604f2c7), SkBits2Float(0x3784e0c7), SkBits2Float(0x36344a51));  // 4.99763e-06f, 1.27434e-06f, 9.08713e-06f, 1.98108e-06f, 1.58403e-05f, 2.68653e-06f
6471 path.cubicTo(SkBits2Float(0x3743dc9a), SkBits2Float(0x36344a4f), SkBits2Float(0x36fbef33), SkBits2Float(0x36344a4e), SkBits2Float(0x36604a35), SkBits2Float(0x36344a4c));  // 1.16743e-05f, 2.68653e-06f, 7.50823e-06f, 2.68653e-06f, 3.34218e-06f, 2.68653e-06f
6472 path.cubicTo(SkBits2Float(0x36531715), SkBits2Float(0x36344a4c), SkBits2Float(0x3645e3f5), SkBits2Float(0x36344a4b), SkBits2Float(0x3638b0d4), SkBits2Float(0x36344a4b));  // 3.14549e-06f, 2.68653e-06f, 2.9488e-06f, 2.68653e-06f, 2.75211e-06f, 2.68653e-06f
6473 path.cubicTo(SkBits2Float(0x35f64120), SkBits2Float(0x36344a4b), SkBits2Float(0x35764124), SkBits2Float(0x36344a4a), SkBits2Float(0x00000000), SkBits2Float(0x36344a4a));  // 1.83474e-06f, 2.68653e-06f, 9.17369e-07f, 2.68653e-06f, 0, 2.68653e-06f
6474 path.close();
6475     SkPath path1(path);
6476     path.reset();
6477     path.setFillType((SkPath::FillType) 0);
6478 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6479 path.cubicTo(SkBits2Float(0x1931204a), SkBits2Float(0x2ba1a14a), SkBits2Float(0x4a4a08ff), SkBits2Float(0x4a4a08ff), SkBits2Float(0x4a4a4a34), SkBits2Float(0x4a4a4a4a));  // 9.15721e-24f, 1.14845e-12f, 3.31014e+06f, 3.31014e+06f, 3.31432e+06f, 3.31432e+06f
6480 path.moveTo(SkBits2Float(0x000010a1), SkBits2Float(0x19312000));  // 5.96533e-42f, 9.15715e-24f
6481 path.cubicTo(SkBits2Float(0x4a4a4a4a), SkBits2Float(0x4a4a4a4a), SkBits2Float(0xa14a4a4a), SkBits2Float(0x08ff2ba1), SkBits2Float(0x08ff4a4a), SkBits2Float(0x4a344a4a));  // 3.31432e+06f, 3.31432e+06f, -6.85386e-19f, 1.53575e-33f, 1.53647e-33f, 2.95387e+06f
6482 path.cubicTo(SkBits2Float(0x544a4a4a), SkBits2Float(0x4a4a4a4a), SkBits2Float(0x2ba1a14a), SkBits2Float(0x4e4a08ff), SkBits2Float(0x4a4a4a4a), SkBits2Float(0xa1a181ff));  // 3.47532e+12f, 3.31432e+06f, 1.14845e-12f, 8.47397e+08f, 3.31432e+06f, -1.09442e-18f
6483     SkPath path2(path);
6484     testPathOpFuzz(reporter, path1, path2, kReverseDifference_SkPathOp, filename);
6485 }
6486 
fuzz763_6(skiatest::Reporter * reporter,const char * filename)6487 static void fuzz763_6(skiatest::Reporter* reporter, const char* filename) {
6488     SkPath path;
6489     path.setFillType((SkPath::FillType) 1);
6490 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f));  // 0, 5.14279e+25f
6491 path.cubicTo(SkBits2Float(0x68295b2d), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x68556829));  // 3.19905e+24f, 0, 0, 0, 0, 4.03114e+24f
6492 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68555b2a));  // 0, 4.03018e+24f
6493 path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x67d55b2a), SkBits2Float(0x67296a4b), SkBits2Float(0x67555b2a), SkBits2Float(0x677e1f70), SkBits2Float(0x66d55b2a));  // 0, 2.01509e+24f, 8.00041e+23f, 1.00755e+24f, 1.20006e+24f, 5.03773e+23f
6494 path.cubicTo(SkBits2Float(0x678f0684), SkBits2Float(0x6684f008), SkBits2Float(0x6798f8ea), SkBits2Float(0x6625a942), SkBits2Float(0x67961914), SkBits2Float(0x65ce709a));  // 1.35084e+24f, 3.1389e+23f, 1.44478e+24f, 1.95578e+23f, 1.41764e+24f, 1.21861e+23f
6495 path.cubicTo(SkBits2Float(0x679174f7), SkBits2Float(0x63199132), SkBits2Float(0x6756c79f), SkBits2Float(0x606478de), SkBits2Float(0x65682bcf), SkBits2Float(0x00000000));  // 1.3738e+24f, 2.83281e+21f, 1.01427e+24f, 6.58526e+19f, 6.85248e+22f, 0
6496 path.conicTo(SkBits2Float(0x68295b02), SkBits2Float(0x60f7f28b), SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f), SkBits2Float(0x42784f5a));  // 3.19903e+24f, 1.42932e+20f, 0, 5.14279e+25f, 62.0775f
6497 path.close();
6498 path.moveTo(SkBits2Float(0x654d6d10), SkBits2Float(0x00000000));  // 6.06311e+22f, 0
6499 path.lineTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x00000000));  // 6.14991e+25f, 0
6500 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc0));  // 0, 6.14991e+25f
6501 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6502 
6503     SkPath path1(path);
6504     path.reset();
6505     path.setFillType((SkPath::FillType) 0);
6506 path.moveTo(SkBits2Float(0x3ac23a55), SkBits2Float(0x2a292827));  // 0.00148184f, 1.50241e-13f
6507 path.lineTo(SkBits2Float(0x63962be6), SkBits2Float(0x272a812a));  // 5.54035e+21f, 2.36623e-15f
6508 
6509     SkPath path2(path);
6510     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6511 }
6512 
fuzz763_7(skiatest::Reporter * reporter,const char * filename)6513 static void fuzz763_7(skiatest::Reporter* reporter, const char* filename) {
6514     SkPath path;
6515     path.setFillType((SkPath::FillType) 0);
6516 
6517     SkPath path1(path);
6518     path.reset();
6519     path.setFillType((SkPath::FillType) 0);
6520 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6521 path.moveTo(SkBits2Float(0x0f2a312a), SkBits2Float(0xc0032108));  // 8.39112e-30f, -2.04889f
6522 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a1f2a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76395e-19f, 4.7323e-37f, 6.14991e+25f
6523 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
6524 path.moveTo(SkBits2Float(0x68345b2d), SkBits2Float(0xf0682955));  // 3.40683e+24f, -2.87402e+29f
6525 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0xef2a8c55), SkBits2Float(0x295b2d2a), SkBits2Float(0x08685568), SkBits2Float(0x7bc00321));  // 5.76397e-19f, -5.27821e+28f, 4.86669e-14f, 6.99154e-34f, 1.99397e+36f
6526 path.lineTo(SkBits2Float(0x68345b2d), SkBits2Float(0xf0682955));  // 3.40683e+24f, -2.87402e+29f
6527 path.close();
6528 path.moveTo(SkBits2Float(0x68345b2d), SkBits2Float(0xf0682955));  // 3.40683e+24f, -2.87402e+29f
6529 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
6530 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6531 path.lineTo(SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a281a4f));  // 0.00105461f, -8.09385e-33f
6532 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x272a812a), SkBits2Float(0x3a2a5529));  // 2.25206e-21f, 300.343f, 2.36623e-15f, 0.000649768f
6533 path.lineTo(SkBits2Float(0x213b1e2a), SkBits2Float(0x27292720));  // 6.3398e-19f, 2.34747e-15f
6534 path.conicTo(SkBits2Float(0xba1f203a), SkBits2Float(0xc422c538), SkBits2Float(0x215d5927), SkBits2Float(0x70ec2ac2), SkBits2Float(0x2a51523a));  // -0.000607017f, -651.082f, 7.49957e-19f, 5.84721e+29f, 1.85915e-13f
6535 path.quadTo(SkBits2Float(0x633ad912), SkBits2Float(0x29c80927), SkBits2Float(0x272927b0), SkBits2Float(0x683a5b2d));  // 3.44674e+21f, 8.88337e-14f, 2.3475e-15f, 3.52017e+24f
6536 path.lineTo(SkBits2Float(0x295b2d68), SkBits2Float(0x29685568));  // 4.86672e-14f, 5.15884e-14f
6537 path.conicTo(SkBits2Float(0xaa8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x5b2d0321), SkBits2Float(0x68556829), SkBits2Float(0x2a552d29));  // -2.49282e-13f, 4.78968e-34f, 4.86986e+16f, 4.03114e+24f, 1.89339e-13f
6538 path.cubicTo(SkBits2Float(0x21295b2d), SkBits2Float(0x2a688c5b), SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x8c08555b), SkBits2Float(0x2a2a29ca));  // 5.73801e-19f, 2.06544e-13f, 3.19905e+24f, 9.6297e-12f, -1.05027e-31f, 1.51135e-13f
6539 path.quadTo(SkBits2Float(0x68295b21), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21));  // 3.19904e+24f, 9.6297e-12f, 2.49282e-13f, 4.78968e-34f
6540 path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6541 path.close();
6542 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6543 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x5b2d6829), SkBits2Float(0x212a8c55), SkBits2Float(0xed7aba1f), SkBits2Float(0x2a212a8c));  // 6.14991e+25f, 4.88097e+16f, 5.7784e-19f, -4.84977e+27f, 1.43144e-13f
6544 path.moveTo(SkBits2Float(0x2d212d08), SkBits2Float(0x5568295b));  // 9.16179e-12f, 1.5954e+13f
6545 path.moveTo(SkBits2Float(0x5529685b), SkBits2Float(0x11295b68));  // 1.16416e+13f, 1.33599e-28f
6546 path.conicTo(SkBits2Float(0x5b782968), SkBits2Float(0x3a292d55), SkBits2Float(0x2a8c555b), SkBits2Float(0x68295a2d), SkBits2Float(0x2d296855));  // 6.98513e+16f, 0.000645359f, 2.49282e-13f, 3.19897e+24f, 9.6297e-12f
6547 path.moveTo(SkBits2Float(0x555b8c55), SkBits2Float(0x21682929));  // 1.50872e+13f, 7.86591e-19f
6548 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6549 path.conicTo(SkBits2Float(0xac2d8ced), SkBits2Float(0x5b682968), SkBits2Float(0x5b292d55), SkBits2Float(0x212a8c55), SkBits2Float(0x081f282a));  // -2.4663e-12f, 6.53477e+16f, 4.76191e+16f, 5.7784e-19f, 4.78945e-34f
6550 path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6551 path.close();
6552 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6553 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x03081f21), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x2147ed7a));  // 6.14991e+25f, 2.50338e-13f, 4.00025e-37f, 5.63611e+25f, 6.77381e-19f
6554 path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6555 path.close();
6556 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6557 path.quadTo(SkBits2Float(0x2d28282a), SkBits2Float(0x5568295b), SkBits2Float(0x3a21df68), SkBits2Float(0x4f9a3a8a));  // 9.55861e-12f, 1.5954e+13f, 0.000617495f, 5.17506e+09f
6558 path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6559 path.close();
6560 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6561 path.cubicTo(SkBits2Float(0x5568c23a), SkBits2Float(0x5b2d2968), SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a), SkBits2Float(0x3a7bc003), SkBits2Float(0x294b2827));  // 1.59951e+13f, 4.87407e+16f, 5.7784e-19f, 4.61198e-19f, 0.00096035f, 4.51099e-14f
6562 
6563     SkPath path2(path);
6564     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6565 }
6566 
kfuzz2(skiatest::Reporter * reporter,const char * filename)6567 static void kfuzz2(skiatest::Reporter* reporter, const char* filename) {
6568     SkPath path1;
6569     SkPath path;
6570 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa));  // 0, -6.51268e+35f
6571 path.close();
6572 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa));  // 0, -6.51268e+35f
6573 path.cubicTo(SkBits2Float(0xe3000000), SkBits2Float(0xf19e92c7), SkBits2Float(0xf17febcb), SkBits2Float(0xff7febcb), SkBits2Float(0x60600100), SkBits2Float(0x0100ff60));  // -2.36118e+21f, -1.57043e+30f, -1.26726e+30f, -3.40177e+38f, 6.45647e+19f, 2.36931e-38f
6574 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa));  // 0, -6.51268e+35f
6575 path.close();
6576 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa));  // 0, -6.51268e+35f
6577 path.lineTo(SkBits2Float(0x60601a1d), SkBits2Float(0x60606060));  // 6.4593e+19f, 6.46721e+19f
6578 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xfafadbfa));  // 0, -6.51268e+35f
6579 path.close();
6580 path.moveTo(SkBits2Float(0xe5e2f300), SkBits2Float(0xee244a40));  // -1.33967e+23f, -1.27113e+28f
6581 path.moveTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a));  // -0.0011673f, -6.51573e+35f
6582 path.close();
6583 path.moveTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a));  // -0.0011673f, -6.51573e+35f
6584 path.lineTo(SkBits2Float(0xfafafafa), SkBits2Float(0xe30000fa));  // -6.51582e+35f, -2.36125e+21f
6585 path.conicTo(SkBits2Float(0x92e592e5), SkBits2Float(0xfafafafb), SkBits2Float(0xc4fa0000), SkBits2Float(0x6060fafa), SkBits2Float(0x60606060));  // -1.44881e-27f, -6.51582e+35f, -2000, 6.48462e+19f, 6.46721e+19f
6586 path.lineTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a));  // -0.0011673f, -6.51573e+35f
6587 path.close();
6588 path.moveTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a));  // -0.0011673f, -6.51573e+35f
6589 path.cubicTo(SkBits2Float(0xe3000000), SkBits2Float(0xf19e92c7), SkBits2Float(0xf17febcb), SkBits2Float(0xff7febcb), SkBits2Float(0xfafafa00), SkBits2Float(0xfafafafa));  // -2.36118e+21f, -1.57043e+30f, -1.26726e+30f, -3.40177e+38f, -6.51572e+35f, -6.51582e+35f
6590 path.lineTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a));  // -0.0011673f, -6.51573e+35f
6591 path.close();
6592 path.moveTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a));  // -0.0011673f, -6.51573e+35f
6593 path.cubicTo(SkBits2Float(0xe3000000), SkBits2Float(0xe39e92c7), SkBits2Float(0xf17febcb), SkBits2Float(0xff7febcb), SkBits2Float(0xeed0ee9a), SkBits2Float(0x9a98ffca));  // -2.36118e+21f, -5.85032e+21f, -1.26726e+30f, -3.40177e+38f, -3.23307e+28f, -6.3279e-23f
6594 path.lineTo(SkBits2Float(0xba98ffee), SkBits2Float(0xfafafa1a));  // -0.0011673f, -6.51573e+35f
6595 path.close();
6596 SkPath path2(path);
6597     testPathOpFuzz(reporter, path1, path2, kXOR_SkPathOp, filename);
6598 }
6599 
fuzz763_10(skiatest::Reporter * reporter,const char * filename)6600 static void fuzz763_10(skiatest::Reporter* reporter, const char* filename) {
6601     SkPath path;
6602     path.setFillType((SkPath::FillType) 1);
6603 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x68556829));  // 0, 4.03114e+24f
6604 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6605 path.quadTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc4));  // 6.14991e+25f, 0, 0, 6.14991e+25f
6606 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68556829));  // 0, 4.03114e+24f
6607 path.close();
6608 
6609     SkPath path1(path);
6610     path.reset();
6611     path.setFillType((SkPath::FillType) 0);
6612 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6613 path.lineTo(SkBits2Float(0x5b2d2968), SkBits2Float(0x2a8c8f55));  // 4.87407e+16f, 2.49685e-13f
6614 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6615 path.close();
6616 path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6617 path.conicTo(SkBits2Float(0x682d2fed), SkBits2Float(0x755b6829), SkBits2Float(0x5b292d2b), SkBits2Float(0xc92a8c55), SkBits2Float(0x081f2a21));  // 3.27141e+24f, 2.78131e+32f, 4.76189e+16f, -698565, 4.78968e-34f
6618 path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6619 path.close();
6620 path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6621 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x3a7bc003), SkBits2Float(0x47ed7a29));  // 6.14991e+25f, 2.50338e-13f, 4.61198e-19f, 0.00096035f, 121588
6622 path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6623 path.close();
6624 path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6625 path.quadTo(SkBits2Float(0x6829682d), SkBits2Float(0x292d555b), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a29));  // 3.20001e+24f, 3.84878e-14f, 2.49282e-13f, 4.78969e-34f
6626 path.conicTo(SkBits2Float(0x6a497b19), SkBits2Float(0x218ced7a), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x47ed3a7a));  // 6.08939e+25f, 9.54963e-19f, 4.7323e-37f, 5.63611e+25f, 121461
6627 path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6628 path.close();
6629 path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6630 path.quadTo(SkBits2Float(0x282a282a), SkBits2Float(0x8a3a21df), SkBits2Float(0x2728282a), SkBits2Float(0x8a3a2129));  // 9.4456e-15f, -8.96194e-33f, 2.33365e-15f, -8.96181e-33f
6631 path.quadTo(SkBits2Float(0x8a284f9a), SkBits2Float(0x3a3ac2b3), SkBits2Float(0x2a292827), SkBits2Float(0x962be61d));  // -8.10388e-33f, 0.000712435f, 1.50241e-13f, -1.38859e-25f
6632 path.lineTo(SkBits2Float(0x272a802a), SkBits2Float(0x2a8c2d29));  // 2.36617e-15f, 2.49003e-13f
6633 path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6634 path.close();
6635 path.moveTo(SkBits2Float(0x4f9a3a29), SkBits2Float(0x3ab38a28));  // 5.17501e+09f, 0.00136978f
6636 path.quadTo(SkBits2Float(0xc368305b), SkBits2Float(0x5b296855), SkBits2Float(0x2d8c5568), SkBits2Float(0x1f2a2172));  // -232.189f, 4.7684e+16f, 1.59541e-11f, 3.60266e-20f
6637 path.lineTo(SkBits2Float(0x29c00321), SkBits2Float(0x5b4b7b13));  // 8.52706e-14f, 5.72747e+16f
6638 
6639     SkPath path2(path);
6640     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
6641 }
6642 
fuzz763_11(skiatest::Reporter * reporter,const char * filename)6643 static void fuzz763_11(skiatest::Reporter* reporter, const char* filename) {
6644     SkPath path;
6645     path.setFillType((SkPath::FillType) 0);
6646 
6647     SkPath path1(path);
6648     path.reset();
6649     path.setFillType((SkPath::FillType) 0);
6650 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6651 path.moveTo(SkBits2Float(0x2a0f312a), SkBits2Float(0xc0032108));  // 1.2718e-13f, -2.04889f
6652 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a1f2a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76395e-19f, 4.7323e-37f, 6.14991e+25f
6653 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7b21), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14984e+25f, 9.43289e-15f, 1.21279e-11f
6654 path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0x70682955));  // 3.48239e+24f, 2.87402e+29f
6655 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0xef2a8c55), SkBits2Float(0x295b2d2a), SkBits2Float(0x08685568), SkBits2Float(0x7bc00321));  // 5.76397e-19f, -5.27821e+28f, 4.86669e-14f, 6.99154e-34f, 1.99397e+36f
6656 path.lineTo(SkBits2Float(0x68385b2d), SkBits2Float(0x70682955));  // 3.48239e+24f, 2.87402e+29f
6657 path.close();
6658 path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0x70682955));  // 3.48239e+24f, 2.87402e+29f
6659 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
6660 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6661 path.lineTo(SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a281a4f));  // 0.00105461f, -8.09385e-33f
6662 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x2a812a3b), SkBits2Float(0x2a552927));  // 2.25206e-21f, 300.343f, 2.29443e-13f, 1.89325e-13f
6663 path.quadTo(SkBits2Float(0x3b1e2ab0), SkBits2Float(0x29272021), SkBits2Float(0x203a3b27), SkBits2Float(0x22c5381f));  // 0.00241343f, 3.71093e-14f, 1.57744e-19f, 5.34564e-18f
6664 path.moveTo(SkBits2Float(0x5d27ec2a), SkBits2Float(0x705921c2));  // 7.56256e+17f, 2.68796e+29f
6665 path.quadTo(SkBits2Float(0x102a5152), SkBits2Float(0x5b2dd912), SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 3.35892e-29f, 4.89338e+16f, 4.03114e+24f, 1.50617e+13f
6666 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032127));  // 3.60396e-20f, -2.0489f
6667 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0x2a8c684b), SkBits2Float(0xf05b272d), SkBits2Float(0x2a1f1555), SkBits2Float(0x21082a21), SkBits2Float(0x6a4b7b03));  // 3.4979e+24f, 2.49414e-13f, -2.71298e+29f, 1.41294e-13f, 4.61343e-19f, 6.14982e+25f
6668 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
6669 path.moveTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955));  // 1.64629e-13f, -2.87402e+29f
6670 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0xef2a8c55), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, -5.27821e+28f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
6671 path.lineTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955));  // 1.64629e-13f, -2.87402e+29f
6672 path.close();
6673 path.moveTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955));  // 1.64629e-13f, -2.87402e+29f
6674 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x2a21211f));  // 4.85282e+16f, 1.43112e-13f
6675 path.lineTo(SkBits2Float(0x03552a8c), SkBits2Float(0x6a4f7b28));  // 6.26439e-37f, 6.27073e+25f
6676 path.conicTo(SkBits2Float(0x2347ed93), SkBits2Float(0x282a3a21), SkBits2Float(0x3adf2128), SkBits2Float(0x4f1a3a8a), SkBits2Float(0x3ab38a28));  // 1.08381e-17f, 9.4495e-15f, 0.00170234f, 2.58753e+09f, 0.00136978f
6677 path.lineTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955));  // 1.64629e-13f, -2.87402e+29f
6678 path.close();
6679 path.moveTo(SkBits2Float(0x2a395b2d), SkBits2Float(0xf0682955));  // 1.64629e-13f, -2.87402e+29f
6680 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x262a812a), SkBits2Float(0x3a2a5529));  // 2.25206e-21f, 300.343f, 5.91556e-16f, 0.000649768f
6681 path.lineTo(SkBits2Float(0x213b1e2a), SkBits2Float(0x27292720));  // 6.3398e-19f, 2.34747e-15f
6682 path.conicTo(SkBits2Float(0x371f203a), SkBits2Float(0xc52a22c4), SkBits2Float(0xc25d27ec), SkBits2Float(0x3a705921), SkBits2Float(0x5210513a));  // 9.48464e-06f, -2722.17f, -55.289f, 0.000916855f, 1.5496e+11f
6683 path.cubicTo(SkBits2Float(0x63102ad9), SkBits2Float(0x29c80927), SkBits2Float(0x633a27b0), SkBits2Float(0x2909c827), SkBits2Float(0x272927b1), SkBits2Float(0x3a685b2d));  // 2.65942e+21f, 8.88337e-14f, 3.43395e+21f, 3.05937e-14f, 2.3475e-15f, 0.000886368f
6684 path.moveTo(SkBits2Float(0x682d6829), SkBits2Float(0x29685555));  // 3.27556e+24f, 5.15884e-14f
6685 path.conicTo(SkBits2Float(0xaa8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x5b2d0321), SkBits2Float(0x68556829), SkBits2Float(0x5b2d2729));  // -2.49282e-13f, 4.78968e-34f, 4.86986e+16f, 4.03114e+24f, 4.87382e+16f
6686 path.quadTo(SkBits2Float(0x2d685568), SkBits2Float(0x5568295b), SkBits2Float(0x2a552d29), SkBits2Float(0x295b2d27));  // 1.32066e-11f, 1.5954e+13f, 1.89339e-13f, 4.86669e-14f
6687 path.lineTo(SkBits2Float(0x682d6829), SkBits2Float(0x29685555));  // 3.27556e+24f, 5.15884e-14f
6688 path.close();
6689 
6690     SkPath path2(path);
6691     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6692 }
6693 
fuzz763_12(skiatest::Reporter * reporter,const char * filename)6694 static void fuzz763_12(skiatest::Reporter* reporter, const char* filename) {
6695     SkPath path;
6696     path.setFillType((SkPath::FillType) 1);
6697 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6698 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a29082a));  // 0, 5.10868e+25f
6699 path.conicTo(SkBits2Float(0x6a295ac3), SkBits2Float(0x61bb988e), SkBits2Float(0x6829682d), SkBits2Float(0x5f3ba76a), SkBits2Float(0x42730a87));  // 5.11843e+25f, 4.32567e+20f, 3.20001e+24f, 1.35219e+19f, 60.7603f
6700 path.conicTo(SkBits2Float(0x67aedf99), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x3f801112));  // 1.65163e+24f, 0, 0, 0, 1.00052f
6701 path.close();
6702 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6703 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 6.14991e+25f, 0, 0, 4.03114e+24f, 1.50617e+13f
6704 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68555b2a));  // 0, 4.03018e+24f
6705 path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x67d55b2a), SkBits2Float(0x67296a4b), SkBits2Float(0x67555b2a), SkBits2Float(0x677e1f70), SkBits2Float(0x66d55b2a));  // 0, 2.01509e+24f, 8.00041e+23f, 1.00755e+24f, 1.20006e+24f, 5.03773e+23f
6706 path.cubicTo(SkBits2Float(0x678f0684), SkBits2Float(0x6684f008), SkBits2Float(0x6798f8ea), SkBits2Float(0x6625a942), SkBits2Float(0x67961914), SkBits2Float(0x65ce709a));  // 1.35084e+24f, 3.1389e+23f, 1.44478e+24f, 1.95578e+23f, 1.41764e+24f, 1.21861e+23f
6707 path.cubicTo(SkBits2Float(0x679158b0), SkBits2Float(0x00000000), SkBits2Float(0x67531e34), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 1.37276e+24f, 0, 9.96976e+23f, 0, 0, 0
6708 path.close();
6709 
6710     SkPath path1(path);
6711     path.reset();
6712     path.setFillType((SkPath::FillType) 0);
6713 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6714 path.conicTo(SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003), SkBits2Float(0xed237a6a), SkBits2Float(0x2d682967), SkBits2Float(0x2a8c555b));  // 4.61198e-19f, 1.64987e+07f, -3.16213e+27f, 1.31969e-11f, 2.49282e-13f
6715 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6716 path.close();
6717 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
6718 path.lineTo(SkBits2Float(0x3a6821df), SkBits2Float(0x2a8c3a8a));  // 0.000885514f, 2.49096e-13f
6719 path.moveTo(SkBits2Float(0x29272a1d), SkBits2Float(0xb03a2a55));  // 3.7118e-14f, -6.77266e-10f
6720 path.moveTo(SkBits2Float(0x20213b1e), SkBits2Float(0xc5272927));  // 1.36568e-19f, -2674.57f
6721 path.quadTo(SkBits2Float(0xc422373b), SkBits2Float(0xec2a201f), SkBits2Float(0x21c25d27), SkBits2Float(0x523a7059));  // -648.863f, -8.22676e+26f, 1.31706e-18f, 2.00187e+11f
6722 path.cubicTo(SkBits2Float(0x12102a10), SkBits2Float(0xe73a28d9), SkBits2Float(0xc8092763), SkBits2Float(0x2927b029), SkBits2Float(0x295b2d27), SkBits2Float(0x2d685568));  // 4.54902e-28f, -8.79114e+23f, -140446, 3.72342e-14f, 4.86669e-14f, 1.32066e-11f
6723 path.moveTo(SkBits2Float(0x68556809), SkBits2Float(0x555b2d29));  // 4.03113e+24f, 1.50617e+13f
6724 path.moveTo(SkBits2Float(0x1f2a212a), SkBits2Float(0x2d032108));  // 3.60263e-20f, 7.45382e-12f
6725 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x2a552d29));  // 4.03114e+24f, 1.89339e-13f
6726 path.cubicTo(SkBits2Float(0x21295b2d), SkBits2Float(0x2a528c5b), SkBits2Float(0x284f5b2d), SkBits2Float(0x218aa621), SkBits2Float(0x3f2d2db3), SkBits2Float(0x68293a2a));  // 5.73801e-19f, 1.87004e-13f, 1.15106e-14f, 9.39522e-19f, 0.676479f, 3.19661e+24f
6727 
6728     SkPath path2(path);
6729     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6730 }
6731 
fuzz763_13(skiatest::Reporter * reporter,const char * filename)6732 static void fuzz763_13(skiatest::Reporter* reporter, const char* filename) {
6733     SkPath path;
6734     path.setFillType((SkPath::FillType) 1);
6735 
6736     SkPath path1(path);
6737     path.reset();
6738     path.setFillType((SkPath::FillType) 0);
6739 path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6740 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a), SkBits2Float(0x282a3a21), SkBits2Float(0x3adf2128), SkBits2Float(0x4f1a3a8a));  // 6.14991e+25f, 75739, 9.4495e-15f, 0.00170234f, 2.58753e+09f
6741 path.lineTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6742 path.close();
6743 path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6744 path.cubicTo(SkBits2Float(0x3ac2213a), SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x272a8128), SkBits2Float(0x3a2a5529), SkBits2Float(0x3b1e2ab0));  // 0.00148109f, 2.25206e-21f, 300.343f, 2.36623e-15f, 0.000649768f, 0.00241343f
6745 path.lineTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6746 path.close();
6747 path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6748 path.cubicTo(SkBits2Float(0x3b272927), SkBits2Float(0x381f203a), SkBits2Float(0x2ac422c5), SkBits2Float(0xc25d27ec), SkBits2Float(0x3a705921), SkBits2Float(0x2a105152));  // 0.00255067f, 3.79386e-05f, 3.48407e-13f, -55.289f, 0.000916855f, 1.2818e-13f
6749 path.quadTo(SkBits2Float(0x633ad912), SkBits2Float(0x29c80927), SkBits2Float(0x272927b0), SkBits2Float(0x68295b2d));  // 3.44674e+21f, 8.88337e-14f, 2.3475e-15f, 3.19905e+24f
6750 path.lineTo(SkBits2Float(0x295b2d68), SkBits2Float(0x29685568));  // 4.86672e-14f, 5.15884e-14f
6751 path.conicTo(SkBits2Float(0xaa8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x5b2d0321), SkBits2Float(0x68556829), SkBits2Float(0x2a552d29));  // -2.49282e-13f, 4.78968e-34f, 4.86986e+16f, 4.03114e+24f, 1.89339e-13f
6752 path.cubicTo(SkBits2Float(0x21295b2d), SkBits2Float(0x2a688c5b), SkBits2Float(0x6829292d), SkBits2Float(0x2d296855), SkBits2Float(0x8c08555b), SkBits2Float(0x2a2a291f));  // 5.73801e-19f, 2.06544e-13f, 3.19536e+24f, 9.6297e-12f, -1.05027e-31f, 1.51133e-13f
6753 path.conicTo(SkBits2Float(0x68295b21), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x7bc00321));  // 3.19904e+24f, 9.6297e-12f, 2.49282e-13f, 4.78968e-34f, 1.99397e+36f
6754 path.lineTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6755 path.close();
6756 path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6757 path.lineTo(SkBits2Float(0x5b2d6829), SkBits2Float(0x212a8c55));  // 4.88097e+16f, 5.7784e-19f
6758 path.conicTo(SkBits2Float(0x8ced7aba), SkBits2Float(0x3f2a212a), SkBits2Float(0x2d212d08), SkBits2Float(0x5568295b), SkBits2Float(0x29685b2d));  // -3.65895e-31f, 0.664569f, 9.16179e-12f, 1.5954e+13f, 5.15934e-14f
6759 path.lineTo(SkBits2Float(0x68295b68), SkBits2Float(0x2d296855));  // 3.19906e+24f, 9.6297e-12f
6760 path.moveTo(SkBits2Float(0x212a8c55), SkBits2Float(0x21081f2a));  // 5.7784e-19f, 4.61198e-19f
6761 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2a8ced7a), SkBits2Float(0x21081f21), SkBits2Float(0x6aba7b03), SkBits2Float(0x2147ed7a));  // 6.14991e+25f, 2.50338e-13f, 4.61198e-19f, 1.12721e+26f, 6.77381e-19f
6762 path.quadTo(SkBits2Float(0x6028282a), SkBits2Float(0x68292ddf), SkBits2Float(0x5b2d555b), SkBits2Float(0x68556829));  // 4.84679e+19f, 3.1957e+24f, 4.8789e+16f, 4.03114e+24f
6763 
6764     SkPath path2(path);
6765     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
6766 }
6767 
fuzz763_14(skiatest::Reporter * reporter,const char * filename)6768 static void fuzz763_14(skiatest::Reporter* reporter, const char* filename) {
6769     SkPath path;
6770     path.setFillType((SkPath::FillType) 0);
6771 
6772     SkPath path1(path);
6773     path.reset();
6774     path.setFillType((SkPath::FillType) 0);
6775 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0xf45b2d29));  // 4.03114e+24f, -6.94598e+31f
6776 path.moveTo(SkBits2Float(0x1f2a302a), SkBits2Float(0xc8032108));  // 3.60387e-20f, -134276
6777 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf0db684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x302a5b25), SkBits2Float(0xf0685568));  // 3.4979e+24f, -5.43226e+29f, -1.64207e-31f, 5.76527e-19f, 6.19752e-10f, -2.87615e+29f
6778 
6779     SkPath path2(path);
6780     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6781 }
6782 
fuzz763_15(skiatest::Reporter * reporter,const char * filename)6783 static void fuzz763_15(skiatest::Reporter* reporter, const char* filename) {
6784     SkPath path;
6785     path.setFillType((SkPath::FillType) 1);
6786 
6787     SkPath path1(path);
6788     path.reset();
6789     path.setFillType((SkPath::FillType) 0);
6790 path.moveTo(SkBits2Float(0x5b292d55), SkBits2Float(0x212a8c55));  // 4.76191e+16f, 5.7784e-19f
6791 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a6b7bc4));  // 4.7323e-37f, 7.11705e+25f
6792 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x2c6829c0), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a29));  // 5.77848e-19f, 4.7323e-37f, 3.29924e-12f, 2.49282e-13f, 4.78969e-34f
6793 path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a6b7bc4));  // 4.7323e-37f, 7.11705e+25f
6794 path.close();
6795 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a6b7bc4));  // 4.7323e-37f, 7.11705e+25f
6796 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a), SkBits2Float(0x282a3a21), SkBits2Float(0xdf218a28), SkBits2Float(0x4f1a3a3a));  // 6.14991e+25f, 75739, 9.4495e-15f, -1.16402e+19f, 2.58751e+09f
6797 path.quadTo(SkBits2Float(0x3ab38a28), SkBits2Float(0x283ac221), SkBits2Float(0xe6432a29), SkBits2Float(0x2a96812b));  // 0.00136978f, 1.03672e-14f, -2.3041e+23f, 2.6735e-13f
6798 path.lineTo(SkBits2Float(0x5529272a), SkBits2Float(0x1eb03a2a));  // 1.16241e+13f, 1.86588e-20f
6799 path.conicTo(SkBits2Float(0x2a272021), SkBits2Float(0x3ac52729), SkBits2Float(0xc422313b), SkBits2Float(0xec2a201f), SkBits2Float(0x21c25d27));  // 1.48437e-13f, 0.00150416f, -648.769f, -8.22676e+26f, 1.31706e-18f
6800 path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a6b7bc4));  // 4.7323e-37f, 7.11705e+25f
6801 path.close();
6802 path.moveTo(SkBits2Float(0x1051523a), SkBits2Float(0xd912102a));  // 4.12813e-29f, -2.56957e+15f
6803 path.close();
6804 path.moveTo(SkBits2Float(0x1051523a), SkBits2Float(0xd912102a));  // 4.12813e-29f, -2.56957e+15f
6805 path.quadTo(SkBits2Float(0xc82763e7), SkBits2Float(0x2927b029), SkBits2Float(0x295b2d27), SkBits2Float(0x2d685568));  // -171408, 3.72342e-14f, 4.86669e-14f, 1.32066e-11f
6806 path.moveTo(SkBits2Float(0x68556809), SkBits2Float(0x8c555b2d));  // 4.03113e+24f, -1.64364e-31f
6807 path.moveTo(SkBits2Float(0x081f2a21), SkBits2Float(0x252d0321));  // 4.78968e-34f, 1.50064e-16f
6808 path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x5b2df068));  // 1.59583e+13f, 4.89595e+16f
6809 path.quadTo(SkBits2Float(0x2a1f2a8c), SkBits2Float(0x21482a21), SkBits2Float(0x4b7bc003), SkBits2Float(0x8ced3a6a));  // 1.41368e-13f, 6.78184e-19f, 1.64987e+07f, -3.65508e-31f
6810 path.moveTo(SkBits2Float(0x21481f21), SkBits2Float(0x4b7bc003));  // 6.78038e-19f, 1.64987e+07f
6811 path.conicTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d155b2d), SkBits2Float(0x5568295b), SkBits2Float(0x5b2d2968), SkBits2Float(0x2a8c8f55));  // 3.20982e+24f, 8.48991e-12f, 1.5954e+13f, 4.87407e+16f, 2.49685e-13f
6812 path.lineTo(SkBits2Float(0x21481f21), SkBits2Float(0x4b7bc003));  // 6.78038e-19f, 1.64987e+07f
6813 path.close();
6814 path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6815 path.conicTo(SkBits2Float(0x682d2fed), SkBits2Float(0x755b6829), SkBits2Float(0x5b292d2b), SkBits2Float(0xc92a8c55), SkBits2Float(0x081f2a21));  // 3.27141e+24f, 2.78131e+32f, 4.76189e+16f, -698565, 4.78968e-34f
6816 path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6817 path.close();
6818 path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6819 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x212aed7a), SkBits2Float(0x0321081f), SkBits2Float(0x293a7bc0), SkBits2Float(0x2147ed7a));  // 6.14991e+25f, 5.79125e-19f, 4.7323e-37f, 4.14076e-14f, 6.77381e-19f
6820 path.quadTo(SkBits2Float(0x6829682d), SkBits2Float(0x292d555b), SkBits2Float(0x292a8c55), SkBits2Float(0x21081f2a));  // 3.20001e+24f, 3.84878e-14f, 3.78693e-14f, 4.61198e-19f
6821 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x218ced7a), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x47ed3a7a));  // 6.14991e+25f, 9.54963e-19f, 4.7323e-37f, 5.63611e+25f, 121461
6822 path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6823 path.close();
6824 path.moveTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6825 path.quadTo(SkBits2Float(0x282a282a), SkBits2Float(0x8a3a21df), SkBits2Float(0x2728282a), SkBits2Float(0x8a3a21df));  // 9.4456e-15f, -8.96194e-33f, 2.33365e-15f, -8.96194e-33f
6826 path.quadTo(SkBits2Float(0x8a284f9a), SkBits2Float(0x3a3ac2b3), SkBits2Float(0x2a292827), SkBits2Float(0x962be61d));  // -8.10388e-33f, 0.000712435f, 1.50241e-13f, -1.38859e-25f
6827 path.lineTo(SkBits2Float(0x272a802a), SkBits2Float(0x2a8c2d29));  // 2.36617e-15f, 2.49003e-13f
6828 path.lineTo(SkBits2Float(0xc021211f), SkBits2Float(0x6a4b7b03));  // -2.51765f, 6.14982e+25f
6829 path.close();
6830 path.moveTo(SkBits2Float(0x4f9a3a29), SkBits2Float(0x3ab38a28));  // 5.17501e+09f, 0.00136978f
6831 path.quadTo(SkBits2Float(0xc368305b), SkBits2Float(0x5b296855), SkBits2Float(0x2d8c5568), SkBits2Float(0x1f2a2172));  // -232.189f, 4.7684e+16f, 1.59541e-11f, 3.60266e-20f
6832 path.lineTo(SkBits2Float(0x29c00321), SkBits2Float(0x5b4b7b13));  // 8.52706e-14f, 5.72747e+16f
6833 
6834     SkPath path2(path);
6835     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
6836 }
6837 
fuzz763_16(skiatest::Reporter * reporter,const char * filename)6838 static void fuzz763_16(skiatest::Reporter* reporter, const char* filename) {
6839     SkPath path;
6840     path.setFillType((SkPath::FillType) 0);
6841 
6842     SkPath path1(path);
6843     path.reset();
6844     path.setFillType((SkPath::FillType) 0);
6845 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6846 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
6847 path.cubicTo(SkBits2Float(0x68372d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c552775), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 3.46012e+24f, -2.71613e+29f, -1.64208e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
6848 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
6849 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955));  // 3.35016e+24f, -2.87402e+29f
6850 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
6851 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955));  // 3.35016e+24f, -2.87402e+29f
6852 path.close();
6853 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955));  // 3.35016e+24f, -2.87402e+29f
6854 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
6855 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6856 path.conicTo(SkBits2Float(0x68385b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0));  // 3.48239e+24f, 1.51141e+13f, 1.41368e-13f, 4.7362e-37f, 1.43189e+16f
6857 path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
6858 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
6859 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x6e2a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a));  // 2.49282e-13f, 1.31626e+28f, 4.7323e-37f, 6.14991e+25f, 75739
6860 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
6861 path.close();
6862 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
6863 path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0x2c213ab3));  // 5.69738e-19f, 0.00105461f, -8.10378e-33f, 2.29121e-12f
6864 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
6865 path.close();
6866 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
6867 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29));  // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
6868 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
6869 path.close();
6870 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
6871 path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x681aed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a));  // 4.73231e-37f, 6.14991e+25f, 2.92648e+24f, 1.46617e+13f, 9.01175e-21f
6872 path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2769), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x21512727));  // 2.22225e-15f, 0.000713936f, -732.486f, -1.90686e+27f, 7.08638e-19f
6873 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
6874 path.close();
6875 path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d));  // 3.19839e+24f, 1.21279e-11f
6876 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6877 path.moveTo(SkBits2Float(0x1f2a322a), SkBits2Float(0xc0032108));  // 3.60404e-20f, -2.04889f
6878 path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05bd24b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0xed4b7bc0));  // 4.06458e+24f, -2.72126e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, -3.93594e+27f
6879 path.conicTo(SkBits2Float(0x212a8c6a), SkBits2Float(0x0329081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77841e-19f, 4.9674e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
6880 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955));  // 3.33127e+24f, -2.87402e+29f
6881 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
6882 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955));  // 3.33127e+24f, -2.87402e+29f
6883 path.close();
6884 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955));  // 3.33127e+24f, -2.87402e+29f
6885 path.lineTo(SkBits2Float(0x555b6829), SkBits2Float(0x6c212a8c));  // 1.50775e+13f, 7.79352e+26f
6886 path.conicTo(SkBits2Float(0x084b0321), SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a), SkBits2Float(0x5bf05568), SkBits2Float(0x212a3a8c));  // 6.10918e-34f, 1.16348e+26f, 0.000209024f, 1.35296e+17f, 5.76757e-19f
6887 path.lineTo(SkBits2Float(0x8c558c55), SkBits2Float(0x212a1f2a));  // -1.64512e-31f, 5.76395e-19f
6888 
6889     SkPath path2(path);
6890     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6891 }
6892 
fuzz763_17(skiatest::Reporter * reporter,const char * filename)6893 static void fuzz763_17(skiatest::Reporter* reporter, const char* filename) {
6894     SkPath path;
6895     path.setFillType((SkPath::FillType) 0);
6896 
6897     SkPath path1(path);
6898     path.reset();
6899     path.setFillType((SkPath::FillType) 0);
6900 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6901 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
6902 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
6903 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
6904 path.moveTo(SkBits2Float(0x6835282d), SkBits2Float(0xf0682955));  // 3.42196e+24f, -2.87402e+29f
6905 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef552a), SkBits2Float(0x68295b2d), SkBits2Float(0x08682103), SkBits2Float(0x4b7bc055));  // 5.76397e-19f, 4.2514e-13f, 3.19905e+24f, 6.98538e-34f, 1.64988e+07f
6906 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
6907 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6908 path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0));  // 3.50128e+24f, 1.51141e+13f, 1.41368e-13f, 4.7362e-37f, 1.43189e+16f
6909 path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
6910 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
6911 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x212a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x254793ed));  // 2.49282e-13f, 5.76399e-19f, 4.7323e-37f, 6.14991e+25f, 1.73106e-16f
6912 path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0xc2213ab3));  // 5.69738e-19f, 0.00105461f, -8.10378e-33f, -40.3073f
6913 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29));  // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
6914 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
6915 path.close();
6916 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
6917 path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a));  // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
6918 path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4371f20), SkBits2Float(0x16c52a22), SkBits2Float(0x515d27ec));  // 2.22225e-15f, 0.000713932f, -732.486f, 3.18537e-25f, 5.93661e+10f
6919 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
6920 path.close();
6921 path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d));  // 3.19839e+24f, 1.21279e-11f
6922 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6923 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
6924 path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
6925 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
6926 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
6927 path.lineTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x2a212a1f));  // 2.49282e-13f, 1.43143e-13f
6928 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
6929 path.close();
6930 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
6931 path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x2a1f08c0));  // -1.31678e-31f, 1.41251e-13f
6932 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
6933 path.close();
6934 path.moveTo(SkBits2Float(0x2a8cef55), SkBits2Float(0x68295b2d));  // 2.50351e-13f, 3.19905e+24f
6935 path.conicTo(SkBits2Float(0x55086821), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x5b2c6829), SkBits2Float(0x21218c55), SkBits2Float(0x2a6c1f03));  // 9.3738e+12f, 6.14991e+25f, 4.85282e+16f, 5.47346e-19f, 2.09718e-13f
6936 path.lineTo(SkBits2Float(0x2a8cef55), SkBits2Float(0x68295b2d));  // 2.50351e-13f, 3.19905e+24f
6937 path.close();
6938 path.moveTo(SkBits2Float(0x2a8cef55), SkBits2Float(0x68295b2d));  // 2.50351e-13f, 3.19905e+24f
6939 path.lineTo(SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a));  // 1.16348e+26f, 0.000209024f
6940 
6941     SkPath path2(path);
6942     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6943 }
6944 
fuzz763_18(skiatest::Reporter * reporter,const char * filename)6945 static void fuzz763_18(skiatest::Reporter* reporter, const char* filename) {
6946     SkPath path;
6947     path.setFillType((SkPath::FillType) 0);
6948 
6949     SkPath path1(path);
6950     path.reset();
6951     path.setFillType((SkPath::FillType) 0);
6952 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6953 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
6954 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
6955 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
6956 path.moveTo(SkBits2Float(0x6835282d), SkBits2Float(0xf0682955));  // 3.42196e+24f, -2.87402e+29f
6957 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef552a), SkBits2Float(0x68295b2d), SkBits2Float(0x08682103), SkBits2Float(0x4b7bc055));  // 5.76397e-19f, 4.2514e-13f, 3.19905e+24f, 6.98538e-34f, 1.64988e+07f
6958 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
6959 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
6960 path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0));  // 3.50128e+24f, 1.51141e+13f, 1.41368e-13f, 4.7362e-37f, 1.43189e+16f
6961 path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
6962 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
6963 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x212a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x254793ed));  // 2.49282e-13f, 5.76399e-19f, 4.7323e-37f, 6.14991e+25f, 1.73106e-16f
6964 path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0xc2213ab3));  // 5.69738e-19f, 0.00105461f, -8.10378e-33f, -40.3073f
6965 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29));  // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
6966 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
6967 path.close();
6968 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
6969 path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a));  // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
6970 path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4371f20), SkBits2Float(0x16c52a22), SkBits2Float(0x515d27ec));  // 2.22225e-15f, 0.000713932f, -732.486f, 3.18537e-25f, 5.93661e+10f
6971 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
6972 path.close();
6973 path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d));  // 3.19839e+24f, 1.21279e-11f
6974 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6975 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
6976 path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
6977 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
6978 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
6979 path.lineTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x2a212a1f));  // 2.49282e-13f, 1.43143e-13f
6980 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
6981 path.close();
6982 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
6983 path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x2a1f08c0));  // -1.31678e-31f, 1.41251e-13f
6984 
6985 path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d));  // 3.19839e+24f, 1.21279e-11f
6986 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
6987 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
6988 path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
6989 path.conicTo(SkBits2Float(0x2a8c54ed), SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003), SkBits2Float(0x29ed846a), SkBits2Float(0x555b2d28));  // 2.49279e-13f, 4.61198e-19f, 1.64987e+07f, 1.05479e-13f, 1.50617e+13f
6990 path.conicTo(SkBits2Float(0x68392d5b), SkBits2Float(0xf0682955), SkBits2Float(0x2a1f5b2d), SkBits2Float(0xef552a21), SkBits2Float(0x5b2d2a8c));  // 3.4979e+24f, -2.87402e+29f, 1.41537e-13f, -6.59712e+28f, 4.8742e+16f
6991 
6992     SkPath path2(path);
6993     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
6994 }
6995 
fuzz763_19(skiatest::Reporter * reporter,const char * filename)6996 static void fuzz763_19(skiatest::Reporter* reporter, const char* filename) {
6997     SkPath path;
6998     path.setFillType((SkPath::FillType) 1);
6999 
7000     SkPath path1(path);
7001     path.reset();
7002     path.setFillType((SkPath::FillType) 0);
7003 path.moveTo(SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003));  // 4.61198e-19f, 1.64987e+07f
7004 path.lineTo(SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d));  // 9.43289e-15f, 1.61207e+25f
7005 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955));  // 3.33127e+24f, -2.87402e+29f
7006 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef552a), SkBits2Float(0x68295b2d), SkBits2Float(0x08682103), SkBits2Float(0x4b7bc055));  // 5.76397e-19f, 4.2514e-13f, 3.19905e+24f, 6.98538e-34f, 1.64988e+07f
7007 path.moveTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
7008 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
7009 path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x8c5bf055), SkBits2Float(0x2a1f2a55), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0));  // 3.50128e+24f, -1.69435e-31f, 1.41367e-13f, 4.7362e-37f, 1.43189e+16f
7010 path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
7011 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
7012 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x212a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2547937a));  // 2.49282e-13f, 5.76399e-19f, 4.7323e-37f, 6.14991e+25f, 1.73105e-16f
7013 path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0xc2213ab3));  // 5.69738e-19f, 0.00105461f, -8.10378e-33f, -40.3073f
7014 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29));  // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
7015 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
7016 path.close();
7017 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
7018 path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a));  // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
7019 path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x21515d27));  // 2.22225e-15f, 0.000713932f, -732.486f, -1.90686e+27f, 7.09352e-19f
7020 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
7021 path.close();
7022 path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d));  // 3.19839e+24f, 1.21279e-11f
7023 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
7024 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7025 path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
7026 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
7027 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7028 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
7029 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7030 path.close();
7031 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7032 path.lineTo(SkBits2Float(0x555b2c29), SkBits2Float(0x6c212a8c));  // 1.50614e+13f, 7.79352e+26f
7033 path.conicTo(SkBits2Float(0x084b0321), SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a), SkBits2Float(0xf05b5568), SkBits2Float(0x212a3a8c));  // 6.10918e-34f, 1.16348e+26f, 0.000209024f, -2.71522e+29f, 5.76757e-19f
7034 path.conicTo(SkBits2Float(0x290321d9), SkBits2Float(0x555b2d68), SkBits2Float(0x2a8c558c), SkBits2Float(0x2abe2a1f), SkBits2Float(0x7bc00321));  // 2.91172e-14f, 1.50618e+13f, 2.49284e-13f, 3.378e-13f, 1.99397e+36f
7035 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7036 path.close();
7037 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7038 path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x1f2128c0));  // -1.31678e-31f, 3.41268e-20f
7039 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7040 path.close();
7041 
7042     SkPath path2(path);
7043     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7044 }
7045 
fuzz763_20(skiatest::Reporter * reporter,const char * filename)7046 static void fuzz763_20(skiatest::Reporter* reporter, const char* filename) {
7047     SkPath path;
7048     path.setFillType((SkPath::FillType) 0);
7049 
7050     SkPath path1(path);
7051     path.reset();
7052     path.setFillType((SkPath::FillType) 0);
7053 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
7054 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7055 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
7056 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
7057 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955));  // 3.33127e+24f, -2.87402e+29f
7058 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2a8c552a), SkBits2Float(0x68295b2d), SkBits2Float(0x08682103), SkBits2Float(0x4b7bc055));  // 5.76397e-19f, 2.49281e-13f, 3.19905e+24f, 6.98538e-34f, 1.64988e+07f
7059 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
7060 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
7061 path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0));  // 3.50128e+24f, 1.51141e+13f, 1.41368e-13f, 4.7362e-37f, 1.43189e+16f
7062 path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
7063 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7064 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x6e2a1f72), SkBits2Float(0x0321182a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a));  // 2.49282e-13f, 1.31626e+28f, 4.73414e-37f, 6.14991e+25f, 75739
7065 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7066 path.close();
7067 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7068 path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0x2c213ab3));  // 5.69738e-19f, 0.00105461f, -8.10378e-33f, 2.29121e-12f
7069 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7070 path.close();
7071 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7072 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29));  // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
7073 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7074 path.close();
7075 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7076 path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a));  // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
7077 path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2769), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x51282727));  // 2.22225e-15f, 0.000713936f, -732.486f, -1.90686e+27f, 4.51382e+10f
7078 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7079 path.close();
7080 path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d));  // 3.19839e+24f, 1.21279e-11f
7081 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x8c555b2d));  // 4.03114e+24f, -1.64364e-31f
7082 path.moveTo(SkBits2Float(0x081f2a31), SkBits2Float(0xc0032921));  // 4.78969e-34f, -2.04939f
7083 path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05bd24b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0xed4b7bc0));  // 4.06458e+24f, -2.72126e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, -3.93594e+27f
7084 path.conicTo(SkBits2Float(0x212a8c6a), SkBits2Float(0x4329081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55));  // 5.77841e-19f, 169.032f, 6.14991e+25f, 9.43289e-15f, 4.8745e+16f
7085 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7086 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x3a210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 0.000614217f, 1.99729e+36f
7087 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7088 path.close();
7089 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7090 path.lineTo(SkBits2Float(0x555b6829), SkBits2Float(0x6c212a8c));  // 1.50775e+13f, 7.79352e+26f
7091 path.lineTo(SkBits2Float(0x5b2d7a6a), SkBits2Float(0xf0556830));  // 4.88298e+16f, -2.64185e+29f
7092 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7093 path.close();
7094 path.moveTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7095 path.conicTo(SkBits2Float(0x0321d90a), SkBits2Float(0x555b2d68), SkBits2Float(0x2a8c558c), SkBits2Float(0x212a2a1f), SkBits2Float(0x4b7bc003));  // 4.75628e-37f, 1.50618e+13f, 2.49284e-13f, 5.7654e-19f, 1.64987e+07f
7096 path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x212128c0));  // -1.31678e-31f, 5.46029e-19f
7097 path.lineTo(SkBits2Float(0x68395b2d), SkBits2Float(0xf0682955));  // 3.50128e+24f, -2.87402e+29f
7098 path.close();
7099 
7100     SkPath path2(path);
7101     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7102 }
7103 
fuzz763_21(skiatest::Reporter * reporter,const char * filename)7104 static void fuzz763_21(skiatest::Reporter* reporter, const char* filename) {
7105     SkPath path;
7106     path.setFillType((SkPath::FillType) 1);
7107 path.moveTo(SkBits2Float(0x6828c6f9), SkBits2Float(0x6614dc9e));  // 3.18811e+24f, 1.75745e+23f
7108 path.cubicTo(SkBits2Float(0x68303469), SkBits2Float(0x661f92fc), SkBits2Float(0x6837d3c3), SkBits2Float(0x662b0eb2), SkBits2Float(0x683fa268), SkBits2Float(0x663759e1));  // 3.32841e+24f, 1.88392e+23f, 3.4724e+24f, 2.01949e+23f, 3.61987e+24f, 2.16463e+23f
7109 path.cubicTo(SkBits2Float(0x68c4391f), SkBits2Float(0x672c5c9f), SkBits2Float(0x688b20ab), SkBits2Float(0x6804b825), SkBits2Float(0x681ddb5e), SkBits2Float(0x6838dc00));  // 7.4131e+24f, 8.13956e+23f, 5.25609e+24f, 2.507e+24f, 2.98183e+24f, 3.49189e+24f
7110 path.lineTo(SkBits2Float(0x6828c6f9), SkBits2Float(0x6614dc9e));  // 3.18811e+24f, 1.75745e+23f
7111 path.close();
7112 path.moveTo(SkBits2Float(0x68226c73), SkBits2Float(0x660bd15e));  // 3.0681e+24f, 1.65068e+23f
7113 path.cubicTo(SkBits2Float(0x6823b0e1), SkBits2Float(0x660d990f), SkBits2Float(0x6824f6d5), SkBits2Float(0x660f668c), SkBits2Float(0x68263e4e), SkBits2Float(0x66113632));  // 3.09203e+24f, 1.67169e+23f, 3.11609e+24f, 1.69298e+23f, 3.14025e+24f, 1.71436e+23f
7114 path.cubicTo(SkBits2Float(0x682715e4), SkBits2Float(0x6612676d), SkBits2Float(0x6827ee22), SkBits2Float(0x66139997), SkBits2Float(0x6828c709), SkBits2Float(0x6614cba5));  // 3.15616e+24f, 1.72843e+23f, 3.17211e+24f, 1.74255e+23f, 3.18812e+24f, 1.75667e+23f
7115 path.lineTo(SkBits2Float(0x6828d720), SkBits2Float(0x6604a1a2));  // 3.1893e+24f, 1.56583e+23f
7116 path.cubicTo(SkBits2Float(0x68270421), SkBits2Float(0x6601102c), SkBits2Float(0x68252b97), SkBits2Float(0x65fb1edd), SkBits2Float(0x68234ce5), SkBits2Float(0x65f4367f));  // 3.15485e+24f, 1.52371e+23f, 3.11998e+24f, 1.48235e+23f, 3.08466e+24f, 1.44158e+23f
7117 path.conicTo(SkBits2Float(0x6822e012), SkBits2Float(0x6602acc5), SkBits2Float(0x68226c73), SkBits2Float(0x660bd15e), SkBits2Float(0x3f7ffa04));  // 3.07663e+24f, 1.54274e+23f, 3.0681e+24f, 1.65068e+23f, 0.999909f
7118 path.close();
7119 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f));  // 0, 5.14279e+25f
7120 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68555b2a));  // 0, 4.03018e+24f
7121 path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x68617414), SkBits2Float(0x66af1c42), SkBits2Float(0x68624f96), SkBits2Float(0x6757755b), SkBits2Float(0x685b93f2));  // 0, 4.25869e+24f, 4.13468e+23f, 4.27489e+24f, 1.01747e+24f, 4.14771e+24f
7122 path.cubicTo(SkBits2Float(0x67a63a84), SkBits2Float(0x68fe1c37), SkBits2Float(0x67c05eed), SkBits2Float(0x69930962), SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f));  // 1.56998e+24f, 9.60001e+24f, 1.81689e+24f, 2.22196e+25f, 0, 5.14279e+25f
7123 path.close();
7124 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f));  // 0, 5.14279e+25f
7125 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc4));  // 0, 6.14991e+25f
7126 path.cubicTo(SkBits2Float(0x6a2c8798), SkBits2Float(0x68f7a144), SkBits2Float(0x6951f5ea), SkBits2Float(0x6796ad55), SkBits2Float(0x683fa268), SkBits2Float(0x663759e1));  // 5.21439e+25f, 9.35519e+24f, 1.58642e+25f, 1.4231e+24f, 3.61987e+24f, 2.16463e+23f
7127 path.cubicTo(SkBits2Float(0x683871e3), SkBits2Float(0x66253b4f), SkBits2Float(0x6830da01), SkBits2Float(0x66144d3e), SkBits2Float(0x6828d720), SkBits2Float(0x6604a1a2));  // 3.48407e+24f, 1.95071e+23f, 3.34063e+24f, 1.75084e+23f, 3.1893e+24f, 1.56583e+23f
7128 path.conicTo(SkBits2Float(0x68295b21), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x492bb324));  // 3.19904e+24f, 0, 0, 0, 703282
7129 path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x677b84f0), SkBits2Float(0x00000000), SkBits2Float(0x68226c73), SkBits2Float(0x660bd15e));  // 0, 0, 1.18777e+24f, 0, 3.0681e+24f, 1.65068e+23f
7130 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68156829));  // 0, 2.82222e+24f
7131 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68555b2a));  // 0, 4.03018e+24f
7132 path.lineTo(SkBits2Float(0x673918f3), SkBits2Float(0x681b0f5f));  // 8.74098e+23f, 2.929e+24f
7133 path.lineTo(SkBits2Float(0x67391759), SkBits2Float(0x681b0fae));  // 8.74068e+23f, 2.92902e+24f
7134 path.cubicTo(SkBits2Float(0x674384e7), SkBits2Float(0x682e2068), SkBits2Float(0x674db698), SkBits2Float(0x6843893b), SkBits2Float(0x6757755b), SkBits2Float(0x685b93f2));  // 9.23313e+23f, 3.28916e+24f, 9.71453e+23f, 3.69357e+24f, 1.01747e+24f, 4.14771e+24f
7135 path.cubicTo(SkBits2Float(0x67a63484), SkBits2Float(0x68556bdd), SkBits2Float(0x67f18c5f), SkBits2Float(0x6848eb25), SkBits2Float(0x681ddb5e), SkBits2Float(0x6838dc00));  // 1.56976e+24f, 4.03142e+24f, 2.28136e+24f, 3.79524e+24f, 2.98183e+24f, 3.49189e+24f
7136 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f));  // 0, 5.14279e+25f
7137 path.close();
7138 
7139     SkPath path1(path);
7140     path.reset();
7141     path.setFillType((SkPath::FillType) 0);
7142 
7143     SkPath path2(path);
7144     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 1, filename);
7145 }
7146 
fuzz763_22(skiatest::Reporter * reporter,const char * filename)7147 static void fuzz763_22(skiatest::Reporter* reporter, const char* filename) {
7148     SkPath path;
7149     path.setFillType((SkPath::FillType) 1);
7150 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x68295b2d));  // 0, 3.19905e+24f
7151 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7152 path.lineTo(SkBits2Float(0x6a3a7bc0), SkBits2Float(0x00000000));  // 5.63611e+25f, 0
7153 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a034b21));  // 0, 3.9681e+25f
7154 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x68295b2d));  // 0, 3.19905e+24f
7155 path.close();
7156 path.moveTo(SkBits2Float(0x6617da56), SkBits2Float(0x00000000));  // 1.79276e+23f, 0
7157 path.conicTo(SkBits2Float(0x5e704d09), SkBits2Float(0x5e3a4dfd), SkBits2Float(0x00000000), SkBits2Float(0x65eb62ef), SkBits2Float(0x430fa5e6));  // 4.32888e+18f, 3.35617e+18f, 0, 1.38948e+23f, 143.648f
7158 path.conicTo(SkBits2Float(0x5e798b32), SkBits2Float(0x627a95c0), SkBits2Float(0x61f5014c), SkBits2Float(0x61fba0fd), SkBits2Float(0x40f8a1a1));  // 4.49538e+18f, 1.15562e+21f, 5.64943e+20f, 5.80217e+20f, 7.76973f
7159 path.conicTo(SkBits2Float(0x62743d2d), SkBits2Float(0x5e49b862), SkBits2Float(0x6617da56), SkBits2Float(0x00000000), SkBits2Float(0x410ef54c));  // 1.12635e+21f, 3.63387e+18f, 1.79276e+23f, 0, 8.93489f
7160 path.close();
7161 
7162     SkPath path1(path);
7163     path.reset();
7164     path.setFillType((SkPath::FillType) 0);
7165 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7166 path.quadTo(SkBits2Float(0x4f9a3a8a), SkBits2Float(0xc28a0d28), SkBits2Float(0x273a3ab3), SkBits2Float(0x8b2a2928));  // 5.17506e+09f, -69.0257f, 2.58445e-15f, -3.27718e-32f
7167 path.lineTo(SkBits2Float(0x63283ae6), SkBits2Float(0x27282a81));  // 3.1033e+21f, 2.33377e-15f
7168 
7169     SkPath path2(path);
7170     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
7171 }
7172 
fuzz763_23(skiatest::Reporter * reporter,const char * filename)7173 static void fuzz763_23(skiatest::Reporter* reporter, const char* filename) {
7174     SkPath path;
7175     path.setFillType((SkPath::FillType) 0);
7176 
7177     SkPath path1(path);
7178     path.reset();
7179     path.setFillType((SkPath::FillType) 0);
7180 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
7181 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7182 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x03210c2a), SkBits2Float(0x6a4b7bc0));  // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.73276e-37f, 6.14991e+25f
7183 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
7184 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955));  // 3.33127e+24f, -2.87402e+29f
7185 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef552a), SkBits2Float(0x29295b2d), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, 4.2514e-13f, 3.76046e-14f, 3.04146e+24f, 1.99729e+36f
7186 path.lineTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0682955));  // 3.33127e+24f, -2.87402e+29f
7187 path.close();
7188 path.moveTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
7189 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
7190 path.conicTo(SkBits2Float(0x68395b2d), SkBits2Float(0x8c5bf055), SkBits2Float(0x2a1f2a55), SkBits2Float(0x03212a21), SkBits2Float(0x5a4b7bc0));  // 3.50128e+24f, -1.69435e-31f, 1.41367e-13f, 4.7362e-37f, 1.43189e+16f
7191 path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
7192 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
7193 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x08211f72), SkBits2Float(0x032a2a21), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2547937a));  // 2.49282e-13f, 4.84861e-34f, 5.00069e-37f, 6.14991e+25f, 1.73105e-16f
7194 path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0xc2213ab3));  // 5.69738e-19f, 0.00105461f, -8.10378e-33f, -40.3073f
7195 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2a8ced29));  // 2.25206e-21f, 300.343f, 0.000650423f, 2.50336e-13f
7196 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
7197 path.close();
7198 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
7199 path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a));  // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
7200 path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x21515d27));  // 2.22225e-15f, 0.000713932f, -732.486f, -1.90686e+27f, 7.09352e-19f
7201 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0685527));  // 3.35016e+24f, -2.87614e+29f
7202 path.close();
7203 path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d));  // 3.19839e+24f, 1.21279e-11f
7204 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
7205 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7206 path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 4.06458e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
7207 path.conicTo(SkBits2Float(0x2a8c54ed), SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003), SkBits2Float(0x29ed846a), SkBits2Float(0x555b2d28));  // 2.49279e-13f, 4.61198e-19f, 1.64987e+07f, 1.05479e-13f, 1.50617e+13f
7208 path.conicTo(SkBits2Float(0x68392d5b), SkBits2Float(0xf0682955), SkBits2Float(0x2a1f5b2d), SkBits2Float(0xef552a21), SkBits2Float(0x5b2d2a8c));  // 3.4979e+24f, -2.87402e+29f, 1.41537e-13f, -6.59712e+28f, 4.8742e+16f
7209 
7210     SkPath path2(path);
7211     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7212 }
7213 
fuzz763_24(skiatest::Reporter * reporter,const char * filename)7214 static void fuzz763_24(skiatest::Reporter* reporter, const char* filename) {
7215     SkPath path;
7216     path.setFillType((SkPath::FillType) 1);
7217 
7218     SkPath path1(path);
7219     path.reset();
7220     path.setFillType((SkPath::FillType) 0);
7221 path.moveTo(SkBits2Float(0xededed02), SkBits2Float(0xedededed));  // -9.20431e+27f, -9.20445e+27f
7222 path.close();
7223 path.moveTo(SkBits2Float(0xededed02), SkBits2Float(0xedededed));  // -9.20431e+27f, -9.20445e+27f
7224 path.quadTo(SkBits2Float(0x9fb9c16e), SkBits2Float(0x27737375), SkBits2Float(0xb7c5ff00), SkBits2Float(0x00ff9908));  // -7.86706e-20f, 3.37856e-15f, -2.3603e-05f, 2.34729e-38f
7225 path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7226 path.cubicTo(SkBits2Float(0x1616ecec), SkBits2Float(0x2c321616), SkBits2Float(0x3516c616), SkBits2Float(0x6e161616), SkBits2Float(0x4c416033), SkBits2Float(0xf6000000));  // 1.21917e-25f, 2.53076e-12f, 5.61676e-07f, 1.16124e+28f, 5.06923e+07f, -6.49037e+32f
7227 path.quadTo(SkBits2Float(0x04007f41), SkBits2Float(0xecececec), SkBits2Float(0xecececec), SkBits2Float(0xecec41ec));  // 1.51048e-36f, -2.2914e+27f, -2.2914e+27f, -2.28494e+27f
7228 path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7229 path.close();
7230 path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7231 path.quadTo(SkBits2Float(0x000000ec), SkBits2Float(0xececcc00), SkBits2Float(0x48ececec), SkBits2Float(0x0278806e));  // 3.30706e-43f, -2.29016e+27f, 485223, 1.8257e-37f
7232 path.lineTo(SkBits2Float(0x72ececec), SkBits2Float(0xecec02ec));  // 9.38559e+30f, -2.28256e+27f
7233 path.quadTo(SkBits2Float(0xec04007f), SkBits2Float(0xecececec), SkBits2Float(0xecececec), SkBits2Float(0xecec0400));  // -6.38322e+26f, -2.2914e+27f, -2.2914e+27f, -2.2826e+27f
7234 path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7235 path.close();
7236 path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7237 path.quadTo(SkBits2Float(0x000040ec), SkBits2Float(0x3a333300), SkBits2Float(0xecec3333), SkBits2Float(0xececdbec));  // 2.32896e-41f, 0.000683591f, -2.28439e+27f, -2.29076e+27f
7238 path.lineTo(SkBits2Float(0x3300007f), SkBits2Float(0x33d83333));  // 2.98028e-08f, 1.00676e-07f
7239 path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7240 path.close();
7241 path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7242 path.quadTo(SkBits2Float(0x9e9ea900), SkBits2Float(0x33ececec), SkBits2Float(0xececec33), SkBits2Float(0xec336e6e));  // -1.67988e-20f, 1.10327e-07f, -2.29138e+27f, -8.67677e+26f
7243 path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7244 path.close();
7245 path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7246 path.lineTo(SkBits2Float(0xedededed), SkBits2Float(0xedededed));  // -9.20445e+27f, -9.20445e+27f
7247 path.lineTo(SkBits2Float(0xecececec), SkBits2Float(0xecececec));  // -2.2914e+27f, -2.2914e+27f
7248 path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7249 path.close();
7250 path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7251 path.lineTo(SkBits2Float(0x01003300), SkBits2Float(0x33d83333));  // 2.35465e-38f, 1.00676e-07f
7252 path.quadTo(SkBits2Float(0xecec3333), SkBits2Float(0x04eeedec), SkBits2Float(0xe0e0e0e0), SkBits2Float(0x9ee0e0e0));  // -2.28439e+27f, 5.6172e-36f, -1.29634e+20f, -2.38099e-20f
7253 path.lineTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7254 path.close();
7255 path.moveTo(SkBits2Float(0x73737300), SkBits2Float(0x73735273));  // 1.9288e+31f, 1.9278e+31f
7256 path.cubicTo(SkBits2Float(0x299e9e9e), SkBits2Float(0xecececec), SkBits2Float(0xececb6ec), SkBits2Float(0xf0ececec), SkBits2Float(0x0000ecec), SkBits2Float(0x9ebe6e6e));  // 7.04413e-14f, -2.2914e+27f, -2.28936e+27f, -5.86599e+29f, 8.49916e-41f, -2.01627e-20f
7257 path.cubicTo(SkBits2Float(0x9e9e9e9e), SkBits2Float(0xe8009e9e), SkBits2Float(0x9e9e9e9e), SkBits2Float(0xecec9e9e), SkBits2Float(0xec3333ec), SkBits2Float(0xececf0ec));  // -1.67945e-20f, -2.42956e+24f, -1.67945e-20f, -2.28844e+27f, -8.66572e+26f, -2.29155e+27f
7258 
7259     SkPath path2(path);
7260     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
7261 }
7262 
fuzz763_25(skiatest::Reporter * reporter,const char * filename)7263 static void fuzz763_25(skiatest::Reporter* reporter, const char* filename) {
7264     SkPath path;
7265     path.setFillType((SkPath::FillType) 1);
7266 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc4));  // 0, 6.14991e+25f
7267 path.conicTo(SkBits2Float(0x653140d9), SkBits2Float(0x6a4b4f74), SkBits2Float(0x65906630), SkBits2Float(0x6a25a070), SkBits2Float(0x3f6728a2));  // 5.23159e+22f, 6.14468e+25f, 8.52382e+22f, 5.00576e+25f, 0.902964f
7268 path.cubicTo(SkBits2Float(0x68295bc5), SkBits2Float(0x00000000), SkBits2Float(0x682958ff), SkBits2Float(0x00000000), SkBits2Float(0x68286829), SkBits2Float(0x00000000));  // 3.19909e+24f, 0, 3.19889e+24f, 0, 3.18112e+24f, 0
7269 path.lineTo(SkBits2Float(0x68555b29), SkBits2Float(0x00000000));  // 4.03018e+24f, 0
7270 path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x682d2927), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x6829686f));  // 0, 3.27091e+24f, 0, 0, 3.20003e+24f
7271 path.lineTo(SkBits2Float(0xdf218a28), SkBits2Float(0x00000000));  // -1.16402e+19f, 0
7272 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x6a4b7bc4));  // 0, 6.14991e+25f
7273 path.close();
7274 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7275 path.conicTo(SkBits2Float(0x6642c40c), SkBits2Float(0x00000000), SkBits2Float(0x65906630), SkBits2Float(0x6a25a070), SkBits2Float(0x3edcd74d));  // 2.29939e+23f, 0, 8.52382e+22f, 5.00576e+25f, 0.43133f
7276 path.conicTo(SkBits2Float(0x68295afa), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x4277a57b));  // 3.19903e+24f, 0, 0, 0, 61.9116f
7277 path.close();
7278 
7279     SkPath path1(path);
7280     path.reset();
7281     path.setFillType((SkPath::FillType) 0);
7282 
7283     SkPath path2(path);
7284     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7285 }
7286 
7287 
fuzz763_26(skiatest::Reporter * reporter,const char * filename)7288 static void fuzz763_26(skiatest::Reporter* reporter, const char* filename) {
7289     SkPath path;
7290     path.setFillType((SkPath::FillType) 0);
7291 
7292     SkPath path1(path);
7293     path.reset();
7294     path.setFillType((SkPath::FillType) 0);
7295 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
7296 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc003210a));  // 3.60396e-20f, -2.04889f
7297 path.cubicTo(SkBits2Float(0x68372d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 3.46012e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
7298 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x69555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.61207e+25f
7299 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955));  // 3.35016e+24f, -2.87402e+29f
7300 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
7301 path.lineTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955));  // 3.35016e+24f, -2.87402e+29f
7302 path.close();
7303 path.moveTo(SkBits2Float(0x68315b2d), SkBits2Float(0xf0682955));  // 3.35016e+24f, -2.87402e+29f
7304 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
7305 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
7306 path.conicTo(SkBits2Float(0x68385b2d), SkBits2Float(0x555bf055), SkBits2Float(0x2a1f2a8c), SkBits2Float(0x03212121), SkBits2Float(0x5a4b7bc0));  // 3.48239e+24f, 1.51141e+13f, 1.41368e-13f, 4.73517e-37f, 1.43189e+16f
7307 path.conicTo(SkBits2Float(0xc08c2aed), SkBits2Float(0x211f2108), SkBits2Float(0x6a4b7b03), SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // -4.38024f, 5.3915e-19f, 6.14982e+25f, 3.20982e+24f, 1.21279e-11f
7308 path.moveTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527));  // 3.42572e+24f, -2.87614e+29f
7309 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x6e2a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a));  // 2.49282e-13f, 1.31626e+28f, 4.7323e-37f, 6.14991e+25f, 75739
7310 path.lineTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527));  // 3.42572e+24f, -2.87614e+29f
7311 path.close();
7312 path.moveTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527));  // 3.42572e+24f, -2.87614e+29f
7313 path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x3a8a3adf), SkBits2Float(0x8a284f1a), SkBits2Float(0x2c213ab3));  // 5.69738e-19f, 0.00105461f, -8.10378e-33f, 2.29121e-12f
7314 path.lineTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527));  // 3.42572e+24f, -2.87614e+29f
7315 path.close();
7316 path.moveTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527));  // 3.42572e+24f, -2.87614e+29f
7317 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a2a812a), SkBits2Float(0x2127ed29));  // 2.25206e-21f, 300.343f, 0.000650423f, 5.68957e-19f
7318 path.conicTo(SkBits2Float(0x03210831), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x6829ed27), SkBits2Float(0x55555b2d), SkBits2Float(0x1e2a3a2a));  // 4.73231e-37f, 6.14991e+25f, 3.20982e+24f, 1.46617e+13f, 9.01175e-21f
7319 path.conicTo(SkBits2Float(0x27202140), SkBits2Float(0x3a3b2769), SkBits2Float(0xc4371f20), SkBits2Float(0xecc52a22), SkBits2Float(0x21512727));  // 2.22225e-15f, 0.000713936f, -732.486f, -1.90686e+27f, 7.08638e-19f
7320 path.lineTo(SkBits2Float(0x68355b2d), SkBits2Float(0xf0685527));  // 3.42572e+24f, -2.87614e+29f
7321 path.close();
7322 path.moveTo(SkBits2Float(0x6829523a), SkBits2Float(0x2d555b2d));  // 3.19839e+24f, 1.21279e-11f
7323 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x5b2d5529));  // 4.03114e+24f, 4.87888e+16f
7324 path.moveTo(SkBits2Float(0x1f2a322a), SkBits2Float(0xc0032108));  // 3.60404e-20f, -2.04889f
7325 path.cubicTo(SkBits2Float(0x68572d55), SkBits2Float(0xf05bd24b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0xed4b7bc0));  // 4.06458e+24f, -2.72126e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, -3.93594e+27f
7326 path.conicTo(SkBits2Float(0x212a8c6a), SkBits2Float(0x0329081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77841e-19f, 4.9674e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
7327 path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955));  // 3.48239e+24f, -2.87402e+29f
7328 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
7329 path.lineTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955));  // 3.48239e+24f, -2.87402e+29f
7330 path.close();
7331 path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955));  // 3.48239e+24f, -2.87402e+29f
7332 path.lineTo(SkBits2Float(0x555b1b29), SkBits2Float(0x6c212a8c));  // 1.50569e+13f, 7.79352e+26f
7333 path.conicTo(SkBits2Float(0x084b0321), SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a), SkBits2Float(0x8c5bf055), SkBits2Float(0x1f212a3a));  // 6.10918e-34f, 1.16348e+26f, 0.000209024f, -1.69435e-31f, 3.4128e-20f
7334 path.conicTo(SkBits2Float(0x290321d9), SkBits2Float(0x555b2d68), SkBits2Float(0x2a8c558c), SkBits2Float(0x2a212a1f), SkBits2Float(0x7bc00321));  // 2.91172e-14f, 1.50618e+13f, 2.49284e-13f, 1.43143e-13f, 1.99397e+36f
7335 path.lineTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955));  // 3.48239e+24f, -2.87402e+29f
7336 path.close();
7337 path.moveTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955));  // 3.48239e+24f, -2.87402e+29f
7338 path.lineTo(SkBits2Float(0x8c2aed7a), SkBits2Float(0x1f2128c0));  // -1.31678e-31f, 3.41268e-20f
7339 path.lineTo(SkBits2Float(0x68385b2d), SkBits2Float(0xf0682955));  // 3.48239e+24f, -2.87402e+29f
7340 path.close();
7341 
7342     SkPath path2(path);
7343     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7344 }
7345 
fuzz763_28(skiatest::Reporter * reporter,const char * filename)7346 static void fuzz763_28(skiatest::Reporter* reporter, const char* filename) {
7347     SkPath path;
7348     path.setFillType((SkPath::FillType) 0);
7349 
7350     SkPath path1(path);
7351     path.reset();
7352     path.setFillType((SkPath::FillType) 0);
7353 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
7354 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7355 path.cubicTo(SkBits2Float(0x68302d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a1f2a), SkBits2Float(0x0321082a), SkBits2Float(0x6aa37bc0));  // 3.32789e+24f, -2.71613e+29f, -1.64207e-31f, 5.76395e-19f, 4.7323e-37f, 9.88197e+25f
7356 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2d28ed84), SkBits2Float(0x5b2d2955));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.60243e-12f, 4.87406e+16f
7357 path.moveTo(SkBits2Float(0x6c395b2d), SkBits2Float(0xf0682955));  // 8.96327e+26f, -2.87402e+29f
7358 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2aef8c55), SkBits2Float(0x68295b2d), SkBits2Float(0x21086855), SkBits2Float(0x4b7bc003));  // 5.76397e-19f, 4.25523e-13f, 3.19905e+24f, 4.62167e-19f, 1.64987e+07f
7359 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
7360 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
7361 path.lineTo(SkBits2Float(0x8a283a28), SkBits2Float(0x284f1a3a));  // -8.09984e-33f, 1.14965e-14f
7362 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x272a812a), SkBits2Float(0x3a2a5529));  // 2.25206e-21f, 300.343f, 2.36623e-15f, 0.000649768f
7363 path.lineTo(SkBits2Float(0x213b1e2a), SkBits2Float(0x27292720));  // 6.3398e-19f, 2.34747e-15f
7364 path.conicTo(SkBits2Float(0x381f203a), SkBits2Float(0x2ac422c5), SkBits2Float(0xc25d27ec), SkBits2Float(0x3a705921), SkBits2Float(0x2a105152));  // 3.79386e-05f, 3.48407e-13f, -55.289f, 0.000916855f, 1.2818e-13f
7365 path.quadTo(SkBits2Float(0x633ad912), SkBits2Float(0x29c80927), SkBits2Float(0x272927b0), SkBits2Float(0x683a5b2d));  // 3.44674e+21f, 8.88337e-14f, 2.3475e-15f, 3.52017e+24f
7366 path.lineTo(SkBits2Float(0x295b2d68), SkBits2Float(0x29685568));  // 4.86672e-14f, 5.15884e-14f
7367 path.conicTo(SkBits2Float(0xaa8c555b), SkBits2Float(0x081f2a21), SkBits2Float(0x5b2d0321), SkBits2Float(0x68556829), SkBits2Float(0x2a552d29));  // -2.49282e-13f, 4.78968e-34f, 4.86986e+16f, 4.03114e+24f, 1.89339e-13f
7368 path.cubicTo(SkBits2Float(0x21295b2d), SkBits2Float(0x2a688c5b), SkBits2Float(0x68295b2d), SkBits2Float(0x2d296855), SkBits2Float(0x8c08555b), SkBits2Float(0x2a2a29ca));  // 5.73801e-19f, 2.06544e-13f, 3.19905e+24f, 9.6297e-12f, -1.05027e-31f, 1.51135e-13f
7369 path.quadTo(SkBits2Float(0x68295b21), SkBits2Float(0x2d296855), SkBits2Float(0x2a8c555b), SkBits2Float(0x081f2a21));  // 3.19904e+24f, 9.6297e-12f, 2.49282e-13f, 4.78968e-34f
7370 path.lineTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
7371 path.close();
7372 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
7373 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x5b2d6829), SkBits2Float(0x1f212a55), SkBits2Float(0x8ced7aba), SkBits2Float(0x3f2a212a));  // 6.14991e+25f, 4.88097e+16f, 3.41281e-20f, -3.65895e-31f, 0.664569f
7374 path.lineTo(SkBits2Float(0x5b2d212d), SkBits2Float(0x2d556829));  // 4.87316e+16f, 1.21308e-11f
7375 path.moveTo(SkBits2Float(0x68552968), SkBits2Float(0x5568295b));  // 4.02651e+24f, 1.5954e+13f
7376 path.moveTo(SkBits2Float(0x5b2d2968), SkBits2Float(0x212a8c55));  // 4.87407e+16f, 5.7784e-19f
7377 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0));  // 4.7323e-37f, 6.14991e+25f
7378 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a3a7bc0), SkBits2Float(0x2147ed7a), SkBits2Float(0x28282a3a));  // 5.77848e-19f, 4.7323e-37f, 5.63611e+25f, 6.77381e-19f, 9.33503e-15f
7379 
7380     SkPath path2(path);
7381     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7382 }
7383 
fuzz763_27(skiatest::Reporter * reporter,const char * filename)7384 static void fuzz763_27(skiatest::Reporter* reporter, const char* filename) {
7385     SkPath path;
7386     path.setFillType((SkPath::FillType) 0);
7387 
7388     SkPath path1(path);
7389     path.reset();
7390     path.setFillType((SkPath::FillType) 0);
7391 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7392 path.quadTo(SkBits2Float(0x30309ab8), SkBits2Float(0x305b3030), SkBits2Float(0x00f53030), SkBits2Float(0x3a3a0000));  // 6.42483e-10f, 7.97402e-10f, 2.2517e-38f, 0.000709534f
7393 path.quadTo(SkBits2Float(0xb8b8d5b8), SkBits2Float(0x0b0b0b03), SkBits2Float(0x0b0b0b0b), SkBits2Float(0x3a3a0b0b));  // -8.81361e-05f, 2.67787e-32f, 2.67787e-32f, 0.000709698f
7394 path.quadTo(SkBits2Float(0xb8b8b8b8), SkBits2Float(0x0b1203b8), SkBits2Float(0x0b0b0b0b), SkBits2Float(0x3a3a2110));  // -8.80821e-05f, 2.81214e-32f, 2.67787e-32f, 0.000710026f
7395 
7396     SkPath path2(path);
7397     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7398 }
7399 
fuzz763_29(skiatest::Reporter * reporter,const char * filename)7400 static void fuzz763_29(skiatest::Reporter* reporter, const char* filename) {
7401     SkPath path;
7402     path.setFillType((SkPath::FillType) 1);
7403 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7404 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x743e0000));  // 0, 6.02134e+31f
7405 path.cubicTo(SkBits2Float(0x74083cf1), SkBits2Float(0x74536e73), SkBits2Float(0x742ac4e4), SkBits2Float(0x7415f5be), SkBits2Float(0x7433ee3c), SkBits2Float(0x7405a69a));  // 4.31756e+31f, 6.70053e+31f, 5.41189e+31f, 4.75242e+31f, 5.70223e+31f, 4.23556e+31f
7406 path.quadTo(SkBits2Float(0x74360ca0), SkBits2Float(0x7401e10c), SkBits2Float(0x7436a382), SkBits2Float(0x7401cc18));  // 5.76937e+31f, 4.11603e+31f, 5.78805e+31f, 4.11344e+31f
7407 path.cubicTo(SkBits2Float(0x74374a91), SkBits2Float(0x7401ef19), SkBits2Float(0x74375c84), SkBits2Float(0x7404d9b9), SkBits2Float(0x7437868f), SkBits2Float(0x740bae8a));  // 5.80873e+31f, 4.11777e+31f, 5.81095e+31f, 4.2102e+31f, 5.81616e+31f, 4.42669e+31f
7408 path.cubicTo(SkBits2Float(0x7437d6c1), SkBits2Float(0x7418b629), SkBits2Float(0x74387e9b), SkBits2Float(0x7433fbc5), SkBits2Float(0x743e2ff7), SkBits2Float(0x74655fa2));  // 5.82609e+31f, 4.83962e+31f, 5.84687e+31f, 5.7039e+31f, 6.02728e+31f, 7.26914e+31f
7409 path.cubicTo(SkBits2Float(0x741ada75), SkBits2Float(0x74745717), SkBits2Float(0x73c106b4), SkBits2Float(0x74744e64), SkBits2Float(0x00000000), SkBits2Float(0x74744006));  // 4.9075e+31f, 7.74345e+31f, 3.05862e+31f, 7.74237e+31f, 0, 7.74059e+31f
7410 path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x74746c7c), SkBits2Float(0x74244dce), SkBits2Float(0x7474733e), SkBits2Float(0x74400000), SkBits2Float(0x74747445));  // 0, 7.7461e+31f, 5.207e+31f, 7.74693e+31f, 6.08472e+31f, 7.74706e+31f
7411 path.cubicTo(SkBits2Float(0x743f5854), SkBits2Float(0x746f3659), SkBits2Float(0x743ebe05), SkBits2Float(0x746a3017), SkBits2Float(0x743e2ff7), SkBits2Float(0x74655fa2));  // 6.06397e+31f, 7.58094e+31f, 6.04486e+31f, 7.42171e+31f, 6.02728e+31f, 7.26914e+31f
7412 path.cubicTo(SkBits2Float(0x7447a582), SkBits2Float(0x74615dee), SkBits2Float(0x744f74f6), SkBits2Float(0x745c4903), SkBits2Float(0x7455e7e6), SkBits2Float(0x7455d751));  // 6.32705e+31f, 7.14216e+31f, 6.57457e+31f, 6.98112e+31f, 6.77895e+31f, 6.77689e+31f
7413 path.cubicTo(SkBits2Float(0x74747474), SkBits2Float(0x743750a4), SkBits2Float(0x74747474), SkBits2Float(0x73f46f0d), SkBits2Float(0x74747474), SkBits2Float(0x00000000));  // 7.74708e+31f, 5.80948e+31f, 7.74708e+31f, 3.87321e+31f, 7.74708e+31f, 0
7414 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7415 path.close();
7416 
7417     SkPath path1(path);
7418     path.reset();
7419     path.setFillType((SkPath::FillType) 0);
7420 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7421 path.lineTo(SkBits2Float(0xf0682955), SkBits2Float(0x211f5b2d));  // -2.87402e+29f, 5.3992e-19f
7422 path.moveTo(SkBits2Float(0x2d2aff2d), SkBits2Float(0x74747474));  // 9.72004e-12f, 7.74708e+31f
7423 path.cubicTo(SkBits2Float(0x7474748e), SkBits2Float(0x74747490), SkBits2Float(0x8c722174), SkBits2Float(0x181f0080), SkBits2Float(0x74c0e520), SkBits2Float(0x747d7463));  // 7.7471e+31f, 7.7471e+31f, -1.86531e-31f, 2.05505e-24f, 1.22262e+32f, 8.0323e+31f
7424 path.cubicTo(SkBits2Float(0x7b005e4b), SkBits2Float(0xdf3a6a3a), SkBits2Float(0x2a3a2848), SkBits2Float(0x2d2d7821), SkBits2Float(0x8c55212d), SkBits2Float(0x2d2d2d24));  // 6.66526e+35f, -1.34326e+19f, 1.65341e-13f, 9.86059e-12f, -1.64189e-31f, 9.84393e-12f
7425 path.conicTo(SkBits2Float(0xde28804c), SkBits2Float(0x28e03721), SkBits2Float(0x3329df28), SkBits2Float(0x2d291515), SkBits2Float(0x0568295b));  // -3.03545e+18f, 2.48929e-14f, 3.95513e-08f, 9.61122e-12f, 1.09162e-35f
7426 path.conicTo(SkBits2Float(0x556a2d21), SkBits2Float(0x21088c2a), SkBits2Float(0x3a333303), SkBits2Float(0x5b293a8a), SkBits2Float(0x6855683b));  // 1.60925e+13f, 4.62641e-19f, 0.000683591f, 4.76336e+16f, 4.03115e+24f
7427 
7428     SkPath path2(path);
7429     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7430 }
7431 
fuzz763_30(skiatest::Reporter * reporter,const char * filename)7432 static void fuzz763_30(skiatest::Reporter* reporter, const char* filename) {
7433     SkPath path;
7434     path.setFillType((SkPath::FillType) 1);
7435 
7436     SkPath path1(path);
7437     path.reset();
7438     path.setFillType((SkPath::FillType) 0);
7439 path.moveTo(SkBits2Float(0x1f2108c0), SkBits2Float(0x4b7b0321));  // 3.41003e-20f, 1.64503e+07f
7440 path.lineTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // 3.20982e+24f, 1.21279e-11f
7441 path.moveTo(SkBits2Float(0x68305b2d), SkBits2Float(0xf0685527));  // 3.33127e+24f, -2.87614e+29f
7442 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x6e2a1f72), SkBits2Float(0x0321082a), SkBits2Float(0x2a4b7bc0), SkBits2Float(0x68295b2d));  // 2.49282e-13f, 1.31626e+28f, 4.7323e-37f, 1.8073e-13f, 3.19905e+24f
7443 path.lineTo(SkBits2Float(0x5b2d2968), SkBits2Float(0x212a8c55));  // 4.87407e+16f, 5.7784e-19f
7444 path.moveTo(SkBits2Float(0x0321081f), SkBits2Float(0x4b7b28c0));  // 4.7323e-37f, 1.646e+07f
7445 path.lineTo(SkBits2Float(0x2a8ced7a), SkBits2Float(0x2d081f21));  // 2.50338e-13f, 7.73762e-12f
7446 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
7447 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7448 path.cubicTo(SkBits2Float(0x69392d55), SkBits2Float(0x2d5b684b), SkBits2Float(0x8c5527f0), SkBits2Float(0x212a1f2a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 1.39916e+25f, 1.24719e-11f, -1.64209e-31f, 5.76395e-19f, 4.7323e-37f, 6.14991e+25f
7449 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0xed7a6a1f), SkBits2Float(0x3a214793), SkBits2Float(0x3328282a), SkBits2Float(0x3a8a3adf));  // 5.77848e-19f, -4.84372e+27f, 0.000615233f, 3.91521e-08f, 0.00105461f
7450 path.conicTo(SkBits2Float(0x4be80304), SkBits2Float(0xdcdcdc15), SkBits2Float(0xdcdcdcdc), SkBits2Float(0x71dcdcdc), SkBits2Float(0x6c107164));  // 3.04102e+07f, -4.97332e+17f, -4.97339e+17f, 2.18732e+30f, 6.98483e+26f
7451 path.conicTo(SkBits2Float(0x6c0f1d6c), SkBits2Float(0x8e406c6e), SkBits2Float(0x6c6c0200), SkBits2Float(0x6c6ce46c), SkBits2Float(0x6c6c6c6c));  // 6.92061e+26f, -2.3718e-30f, 1.14126e+27f, 1.14554e+27f, 1.14327e+27f
7452 path.lineTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7453 path.close();
7454 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7455 path.quadTo(SkBits2Float(0x3ab38a28), SkBits2Float(0x3ac22c21), SkBits2Float(0x6c401057), SkBits2Float(0x6d6d6b64));  // 0.00136978f, 0.00148142f, 9.28764e+26f, 4.59236e+27f
7456 path.cubicTo(SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x286d6d6d), SkBits2Float(0x081d2a29), SkBits2Float(0x6d690321), SkBits2Float(0x6b6b026d));  // 4.59251e+27f, 4.59251e+27f, 1.31799e-14f, 4.7295e-34f, 4.50711e+27f, 2.84109e+26f
7457 
7458     SkPath path2(path);
7459     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
7460 }
7461 
fuzz763_31(skiatest::Reporter * reporter,const char * filename)7462 static void fuzz763_31(skiatest::Reporter* reporter, const char* filename) {
7463     SkPath path;
7464     path.setFillType((SkPath::FillType) 1);
7465 
7466     SkPath path1(path);
7467     path.reset();
7468     path.setFillType((SkPath::FillType) 0);
7469 path.moveTo(SkBits2Float(0xd72a8c55), SkBits2Float(0x61081f2a));  // -1.8752e+14f, 1.56938e+20f
7470 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x4793ed7a), SkBits2Float(0x282a3a21), SkBits2Float(0xdf3a2128), SkBits2Float(0x471ac575));  // 6.14991e+25f, 75739, 9.4495e-15f, -1.3412e+19f, 39621.5f
7471 path.lineTo(SkBits2Float(0x28404040), SkBits2Float(0x552a298a));  // 1.06721e-14f, 1.16935e+13f
7472 path.moveTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a));  // 5.8414e-19f, 4.61198e-19f
7473 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0x80ed7a3a), SkBits2Float(0x2a3a2147), SkBits2Float(0xdf212828), SkBits2Float(0x4f1a3a3a));  // 6.14991e+25f, -2.18089e-38f, 1.65317e-13f, -1.16126e+19f, 2.58751e+09f
7474 path.lineTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a));  // 5.8414e-19f, 4.61198e-19f
7475 path.close();
7476 path.moveTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a));  // 5.8414e-19f, 4.61198e-19f
7477 path.cubicTo(SkBits2Float(0x3ac2213a), SkBits2Float(0x432a2928), SkBits2Float(0x96812be6), SkBits2Float(0x272a1d2a), SkBits2Float(0x3a2a3529), SkBits2Float(0x3b1e2ab0));  // 0.00148109f, 170.161f, -2.08688e-25f, 2.3608e-15f, 0.000649291f, 0.00241343f
7478 path.lineTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a));  // 5.8414e-19f, 4.61198e-19f
7479 path.close();
7480 path.moveTo(SkBits2Float(0x212c685b), SkBits2Float(0x21081f2a));  // 5.8414e-19f, 4.61198e-19f
7481 path.cubicTo(SkBits2Float(0xc5272927), SkBits2Float(0x22383b39), SkBits2Float(0x1051523a), SkBits2Float(0x2927b029), SkBits2Float(0x685b2d27), SkBits2Float(0x5b2d6855));  // -2674.57f, 2.4968e-18f, 4.12813e-29f, 3.72342e-14f, 4.14012e+24f, 4.88099e+16f
7482 
7483     SkPath path2(path);
7484     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7485 }
7486 
fuzz763_33(skiatest::Reporter * reporter,const char * filename)7487 static void fuzz763_33(skiatest::Reporter* reporter, const char* filename) {
7488     SkPath path;
7489     path.setFillType((SkPath::FillType) 1);
7490 path.moveTo(SkBits2Float(0x72c185d5), SkBits2Float(0x72c184e8));  // 7.66623e+30f, 7.66608e+30f
7491 path.quadTo(SkBits2Float(0x724341bf), SkBits2Float(0x72433fc4), SkBits2Float(0x6d757575), SkBits2Float(0x6d6d6d6d));  // 3.86746e+30f, 3.86731e+30f, 4.74786e+27f, 4.59251e+27f
7492 path.cubicTo(SkBits2Float(0x6d18b5e5), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6cbe03bd), SkBits2Float(0x6d4b455b), SkBits2Float(0x6c6c69d8), SkBits2Float(0x6d20df31));  // 2.95385e+27f, 4.59251e+27f, 1.83771e+27f, 3.93183e+27f, 1.14323e+27f, 3.11171e+27f
7493 path.conicTo(SkBits2Float(0x6c6c8b72), SkBits2Float(0x00000000), SkBits2Float(0x6c6c6c6c), SkBits2Float(0x00000000), SkBits2Float(0x400812df));  // 1.14386e+27f, 0, 1.14327e+27f, 0, 2.12615f
7494 path.quadTo(SkBits2Float(0x72432acb), SkBits2Float(0x72432295), SkBits2Float(0x72c185d5), SkBits2Float(0x72c184e8));  // 3.86568e+30f, 3.86505e+30f, 7.66623e+30f, 7.66608e+30f
7495 path.close();
7496 path.moveTo(SkBits2Float(0x72c185d5), SkBits2Float(0x72c184e8));  // 7.66623e+30f, 7.66608e+30f
7497 path.cubicTo(SkBits2Float(0x74f97d76), SkBits2Float(0x74f97d90), SkBits2Float(0x75381628), SkBits2Float(0x7538182c), SkBits2Float(0x7538153b), SkBits2Float(0x75381835));  // 1.58133e+32f, 1.58133e+32f, 2.33357e+32f, 2.33367e+32f, 2.33353e+32f, 2.33368e+32f
7498 path.cubicTo(SkBits2Float(0x7538144e), SkBits2Float(0x7538183f), SkBits2Float(0x74f9760f), SkBits2Float(0x74f97ddd), SkBits2Float(0x72c185d5), SkBits2Float(0x72c184e8));  // 2.33348e+32f, 2.33368e+32f, 1.58115e+32f, 1.58134e+32f, 7.66623e+30f, 7.66608e+30f
7499 path.close();
7500 path.moveTo(SkBits2Float(0x6c6c69d8), SkBits2Float(0x6d20df31));  // 1.14323e+27f, 3.11171e+27f
7501 path.conicTo(SkBits2Float(0x6c6c55ae), SkBits2Float(0x6d80b520), SkBits2Float(0x6c6c1071), SkBits2Float(0x6e0f1d6c), SkBits2Float(0x3f96e656));  // 1.14284e+27f, 4.97913e+27f, 1.14154e+27f, 1.1073e+28f, 1.1789f
7502 path.lineTo(SkBits2Float(0x6a674231), SkBits2Float(0x6c0c3394));  // 6.98936e+25f, 6.77973e+26f
7503 path.cubicTo(SkBits2Float(0x6b12c63f), SkBits2Float(0x6c881439), SkBits2Float(0x6bba4ae5), SkBits2Float(0x6ced1e23), SkBits2Float(0x6c6c69d8), SkBits2Float(0x6d20df31));  // 1.77439e+26f, 1.31608e+27f, 4.50428e+26f, 2.29326e+27f, 1.14323e+27f, 3.11171e+27f
7504 path.close();
7505 
7506     SkPath path1(path);
7507     path.reset();
7508     path.setFillType((SkPath::FillType) 0);
7509 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7510 path.lineTo(SkBits2Float(0x6c6b6ba7), SkBits2Float(0x886b6b6b));  // 1.13842e+27f, -7.0844e-34f
7511 path.quadTo(SkBits2Float(0x0000206b), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d));  // 1.16294e-41f, 4.59251e+27f, 4.59251e+27f, 4.59251e+27f
7512 path.conicTo(SkBits2Float(0x3e3e3e3e), SkBits2Float(0xafbcad20), SkBits2Float(0x78787878), SkBits2Float(0x78787829), SkBits2Float(0x78787878));  // 0.185784f, -3.432e-10f, 2.01583e+34f, 2.01582e+34f, 2.01583e+34f
7513 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x95066b78));  // 2.01583e+34f, -2.71459e-26f
7514 path.lineTo(SkBits2Float(0x6c6b6ba7), SkBits2Float(0x886b6b6b));  // 1.13842e+27f, -7.0844e-34f
7515 path.quadTo(SkBits2Float(0x0000206b), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d), SkBits2Float(0x6d6d6d6d));  // 1.16294e-41f, 4.59251e+27f, 4.59251e+27f, 4.59251e+27f
7516 path.conicTo(SkBits2Float(0x3e3e3e3e), SkBits2Float(0xafbcad20), SkBits2Float(0x78787878), SkBits2Float(0x78787829), SkBits2Float(0x78787878));  // 0.185784f, -3.432e-10f, 2.01583e+34f, 2.01582e+34f, 2.01583e+34f
7517 path.lineTo(SkBits2Float(0x8787878f), SkBits2Float(0x87878787));  // -2.03922e-34f, -2.03922e-34f
7518 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 2.01583e+34f, 2.01583e+34f
7519 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 2.01583e+34f, 2.01583e+34f
7520 path.lineTo(SkBits2Float(0x6c105778), SkBits2Float(0x6d406b64));  // 6.97994e+26f, 3.72193e+27f
7521 path.cubicTo(SkBits2Float(0x7575756d), SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x6d6d7575), SkBits2Float(0x6d6d6d6d));  // 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 4.59312e+27f, 4.59251e+27f
7522 path.cubicTo(SkBits2Float(0x6d696d6d), SkBits2Float(0x026d6d6d), SkBits2Float(0x80bc6b6b), SkBits2Float(0xaebcdfd0), SkBits2Float(0x7878bcac), SkBits2Float(0x78787878));  // 4.51514e+27f, 1.74434e-37f, -1.73036e-38f, -8.58901e-11f, 2.01799e+34f, 2.01583e+34f
7523 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 2.01583e+34f, 2.01583e+34f
7524 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 2.01583e+34f, 2.01583e+34f
7525 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 2.01583e+34f, 2.01583e+34f
7526 path.lineTo(SkBits2Float(0xb4bcacbc), SkBits2Float(0xbcadbcbc));  // -3.51434e-07f, -0.0212082f
7527 path.moveTo(SkBits2Float(0xa03aacbc), SkBits2Float(0x757575a0));  // -1.5812e-19f, 3.11157e+32f
7528 path.close();
7529 
7530     SkPath path2(path);
7531     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7532 }
7533 
fuzz763_32(skiatest::Reporter * reporter,const char * filename)7534 static void fuzz763_32(skiatest::Reporter* reporter, const char* filename) {
7535     SkPath path;
7536     path.setFillType((SkPath::FillType) 1);
7537 
7538     SkPath path1(path);
7539     path.reset();
7540     path.setFillType((SkPath::FillType) 0);
7541 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7542 path.cubicTo(SkBits2Float(0xdedcdcdc), SkBits2Float(0xdcdcdcdc), SkBits2Float(0xdcdcdcdc), SkBits2Float(0xdcdcdcdc), SkBits2Float(0x55dcdcdc), SkBits2Float(0x29407d7f));  // -7.95742e+18f, -4.97339e+17f, -4.97339e+17f, -4.97339e+17f, 3.03551e+13f, 4.27414e-14f
7543 path.cubicTo(SkBits2Float(0x7b93ed4b), SkBits2Float(0x29521472), SkBits2Float(0xdfc83c28), SkBits2Float(0x1a3a834e), SkBits2Float(0x6855e84f), SkBits2Float(0xf2f22a80));  // 1.53616e+36f, 4.66471e-14f, -2.88569e+19f, 3.857e-23f, 4.0406e+24f, -9.59318e+30f
7544 path.moveTo(SkBits2Float(0xe0f2f210), SkBits2Float(0xc3f2eef2));  // -1.40049e+20f, -485.867f
7545 path.cubicTo(SkBits2Float(0x108ced7a), SkBits2Float(0x7bc00308), SkBits2Float(0x287a6a3a), SkBits2Float(0x242847ed), SkBits2Float(0x2bcb302a), SkBits2Float(0xf21003e8));  // 5.55862e-29f, 1.99396e+36f, 1.39008e-14f, 3.64901e-17f, 1.44374e-12f, -2.85252e+30f
7546 path.moveTo(SkBits2Float(0x556c0010), SkBits2Float(0x002a8768));  // 1.62178e+13f, 3.90567e-39f
7547 path.quadTo(SkBits2Float(0xf2f22021), SkBits2Float(0xf2f2f56e), SkBits2Float(0xf2f2f2f2), SkBits2Float(0xf22040d9));  // -9.59158e+30f, -9.62459e+30f, -9.6242e+30f, -3.17414e+30f
7548 path.lineTo(SkBits2Float(0xc013f2f2), SkBits2Float(0x0000294d));  // -2.3117f, 1.48159e-41f
7549 
7550     SkPath path2(path);
7551     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7552 }
7553 
fuzz763_34(skiatest::Reporter * reporter,const char * filename)7554 static void fuzz763_34(skiatest::Reporter* reporter, const char* filename) {
7555     SkPath path;
7556     path.setFillType((SkPath::FillType) 1);
7557 path.moveTo(SkBits2Float(0x63a95a6c), SkBits2Float(0x6cc8e7e2));  // 6.24803e+21f, 1.94304e+27f
7558 path.quadTo(SkBits2Float(0x63690f37), SkBits2Float(0x6d0a3d9b), SkBits2Float(0x00000000), SkBits2Float(0x6d3e3e3e));  // 4.29919e+21f, 2.67396e+27f, 0, 3.67984e+27f
7559 path.conicTo(SkBits2Float(0x6b9253fc), SkBits2Float(0x6c956a8b), SkBits2Float(0x6c6ac798), SkBits2Float(0x692a5d27), SkBits2Float(0x3e56eb72));  // 3.538e+26f, 1.44506e+27f, 1.13532e+27f, 1.28723e+25f, 0.209883f
7560 path.lineTo(SkBits2Float(0x6c6c586c), SkBits2Float(0x00000000));  // 1.1429e+27f, 0
7561 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7562 path.conicTo(SkBits2Float(0x6c8c6c6c), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x6cc8e82a), SkBits2Float(0x5b684b68));  // 1.35809e+27f, 0, 0, 1.94305e+27f, 6.53851e+16f
7563 path.lineTo(SkBits2Float(0x63a95a6c), SkBits2Float(0x6cc8e7e2));  // 6.24803e+21f, 1.94304e+27f
7564 path.close();
7565 path.moveTo(SkBits2Float(0x63a95a6c), SkBits2Float(0x6cc8e7e2));  // 6.24803e+21f, 1.94304e+27f
7566 path.quadTo(SkBits2Float(0x641ae35f), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 1.14287e+22f, 0, 0, 0
7567 path.lineTo(SkBits2Float(0x6c6c586c), SkBits2Float(0x00000000));  // 1.1429e+27f, 0
7568 path.conicTo(SkBits2Float(0x6c6ba1fc), SkBits2Float(0x688c9eb1), SkBits2Float(0x6c6ac798), SkBits2Float(0x692a5d27), SkBits2Float(0x3f7fec32));  // 1.13945e+27f, 5.31247e+24f, 1.13532e+27f, 1.28723e+25f, 0.999698f
7569 path.lineTo(SkBits2Float(0x63a95a6c), SkBits2Float(0x6cc8e7e2));  // 6.24803e+21f, 1.94304e+27f
7570 path.close();
7571 
7572     SkPath path1(path);
7573     path.reset();
7574     path.setFillType((SkPath::FillType) 0);
7575 path.moveTo(SkBits2Float(0x6c3e3e3e), SkBits2Float(0x586c79ff));  // 9.19959e+26f, 1.04003e+15f
7576 path.quadTo(SkBits2Float(0x6c6c4a6c), SkBits2Float(0x6c6c6c6c), SkBits2Float(0xc83e6c6c), SkBits2Float(0x3e313e3e));  // 1.14263e+27f, 1.14327e+27f, -194994, 0.173089f
7577 
7578     SkPath path2(path);
7579     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
7580 }
7581 
fuzz763_36(skiatest::Reporter * reporter,const char * filename)7582 static void fuzz763_36(skiatest::Reporter* reporter, const char* filename) {
7583     SkPath path;
7584     path.setFillType((SkPath::FillType) 0);
7585 
7586     SkPath path1(path);
7587     path.reset();
7588     path.setFillType((SkPath::FillType) 0);
7589 path.moveTo(SkBits2Float(0x68556829), SkBits2Float(0x555b2d29));  // 4.03114e+24f, 1.50617e+13f
7590 path.moveTo(SkBits2Float(0x1f2a312a), SkBits2Float(0xc0032108));  // 3.60396e-20f, -2.04889f
7591 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 6.14991e+25f
7592 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x2d555b2d));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 1.21279e-11f
7593 path.moveTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955));  // -3.42572e+24f, -2.87402e+29f
7594 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x8cef552a), SkBits2Float(0x295b2d2a), SkBits2Float(0x68210368), SkBits2Float(0x7bc05508));  // 5.76397e-19f, -3.6875e-31f, 4.86669e-14f, 3.04146e+24f, 1.99729e+36f
7595 path.lineTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955));  // -3.42572e+24f, -2.87402e+29f
7596 path.close();
7597 path.moveTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955));  // -3.42572e+24f, -2.87402e+29f
7598 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
7599 path.conicTo(SkBits2Float(0x212a081f), SkBits2Float(0x4b7bc003), SkBits2Float(0x5b2d7a6a), SkBits2Float(0xf0556839), SkBits2Float(0x2a8c555b));  // 5.7609e-19f, 1.64987e+07f, 4.88298e+16f, -2.64185e+29f, 2.49282e-13f
7600 path.conicTo(SkBits2Float(0xf42a212a), SkBits2Float(0x4b7bc003), SkBits2Float(0x2aed7a39), SkBits2Float(0x2108c08c), SkBits2Float(0x7b03211f));  // -5.39162e+31f, 1.64987e+07f, 4.21845e-13f, 4.63334e-19f, 6.80863e+35f
7601 path.lineTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955));  // -3.42572e+24f, -2.87402e+29f
7602 path.close();
7603 path.moveTo(SkBits2Float(0xe8355b2d), SkBits2Float(0xf0682955));  // -3.42572e+24f, -2.87402e+29f
7604 path.lineTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // 3.20982e+24f, 1.21279e-11f
7605 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7606 path.conicTo(SkBits2Float(0x2a8c555b), SkBits2Float(0x212a1f72), SkBits2Float(0x03210807), SkBits2Float(0x6a4b7b28), SkBits2Float(0x4793ed7a));  // 2.49282e-13f, 5.76399e-19f, 4.73229e-37f, 6.14984e+25f, 75739
7607 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7608 path.close();
7609 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7610 path.quadTo(SkBits2Float(0x282a282a), SkBits2Float(0x8a3adf21), SkBits2Float(0x284f1a3a), SkBits2Float(0x213ab38a));  // 9.4456e-15f, -8.99754e-33f, 1.14965e-14f, 6.32569e-19f
7611 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7612 path.close();
7613 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7614 path.quadTo(SkBits2Float(0x1d2a2928), SkBits2Float(0x43962be6), SkBits2Float(0x3a20002a), SkBits2Float(0x2a8ced29));  // 2.25206e-21f, 300.343f, 0.000610354f, 2.50336e-13f
7615 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7616 path.close();
7617 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7618 path.conicTo(SkBits2Float(0xed210830), SkBits2Float(0xc04b6a03), SkBits2Float(0x68297b27), SkBits2Float(0x55555b2d), SkBits2Float(0x2ab03a2a));  // -3.11481e+27f, -3.17835f, 3.20141e+24f, 1.46617e+13f, 3.13042e-13f
7619 path.quadTo(SkBits2Float(0x2720213b), SkBits2Float(0x3a3b2729), SkBits2Float(0xc4341f20), SkBits2Float(0xecc52a22));  // 2.22225e-15f, 0.000713932f, -720.486f, -1.90686e+27f
7620 path.cubicTo(SkBits2Float(0x5921c25d), SkBits2Float(0x29523a70), SkBits2Float(0x555b2d68), SkBits2Float(0x1f212a8c), SkBits2Float(0x0321d90a), SkBits2Float(0x5b2d6829));  // 2.8457e+15f, 4.66801e-14f, 1.50618e+13f, 3.41283e-20f, 4.75628e-37f, 4.88097e+16f
7621 path.lineTo(SkBits2Float(0x1f2a2a8c), SkBits2Float(0x03210821));  // 3.60341e-20f, 4.7323e-37f
7622 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7623 path.close();
7624 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7625 path.conicTo(SkBits2Float(0x2eed6a7a), SkBits2Float(0x282a3a21), SkBits2Float(0x3a21df28), SkBits2Float(0x4f1a3a8a), SkBits2Float(0x3ab38a28));  // 1.07964e-10f, 9.4495e-15f, 0.000617492f, 2.58753e+09f, 0.00136978f
7626 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7627 path.close();
7628 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7629 path.quadTo(SkBits2Float(0xe61d2a28), SkBits2Float(0x2a43962b), SkBits2Float(0x29272a81), SkBits2Float(0x2bb02a55));  // -1.85547e+23f, 1.73716e-13f, 3.71183e-14f, 1.25173e-12f
7630 path.quadTo(SkBits2Float(0x2720213b), SkBits2Float(0x3ac52729), SkBits2Float(0xc4223b32), SkBits2Float(0x6c2a201f));  // 2.22225e-15f, 0.00150416f, -648.925f, 8.22676e+26f
7631 
7632     SkPath path2(path);
7633     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7634 }
7635 
fuzz763_35(skiatest::Reporter * reporter,const char * filename)7636 static void fuzz763_35(skiatest::Reporter* reporter, const char* filename) {
7637     SkPath path;
7638     path.setFillType((SkPath::FillType) 1);
7639 
7640     SkPath path1(path);
7641     path.reset();
7642     path.setFillType((SkPath::FillType) 0);
7643 path.moveTo(SkBits2Float(0x2aed2a8c), SkBits2Float(0x03210a1f));  // 4.21292e-13f, 4.73253e-37f
7644 path.conicTo(SkBits2Float(0x0000007b), SkBits2Float(0x7474747f), SkBits2Float(0x74747474), SkBits2Float(0x747474c4), SkBits2Float(0x74747474));  // 1.7236e-43f, 7.74709e+31f, 7.74708e+31f, 7.74712e+31f, 7.74708e+31f
7645 path.quadTo(SkBits2Float(0x74747474), SkBits2Float(0x74747474), SkBits2Float(0x20437474), SkBits2Float(0x43a52b02));  // 7.74708e+31f, 7.74708e+31f, 1.65557e-19f, 330.336f
7646 path.moveTo(SkBits2Float(0x3a214781), SkBits2Float(0x2128282a));  // 0.000615232f, 5.69738e-19f
7647 path.lineTo(SkBits2Float(0x4b7bd603), SkBits2Float(0x6cf33b6a));  // 1.65043e+07f, 2.3524e+27f
7648 path.conicTo(SkBits2Float(0x35778caa), SkBits2Float(0x0000002a), SkBits2Float(0x74742164), SkBits2Float(0x2a3a7474), SkBits2Float(0x4cc22157));  // 9.22194e-07f, 5.88545e-44f, 7.7368e+31f, 1.65605e-13f, 1.0178e+08f
7649 path.cubicTo(SkBits2Float(0x21479321), SkBits2Float(0x23434cc2), SkBits2Float(0x3a214793), SkBits2Float(0x2128282a), SkBits2Float(0x323adf81), SkBits2Float(0x77291a3a));  // 6.76185e-19f, 1.05872e-17f, 0.000615233f, 5.69738e-19f, 1.08774e-08f, 3.42981e+33f
7650 path.conicTo(SkBits2Float(0x0000002a), SkBits2Float(0x7474743e), SkBits2Float(0x74747474), SkBits2Float(0x74746474), SkBits2Float(0x74747474));  // 5.88545e-44f, 7.74706e+31f, 7.74708e+31f, 7.7451e+31f, 7.74708e+31f
7651 path.cubicTo(SkBits2Float(0x21e7fc06), SkBits2Float(0x2a212a59), SkBits2Float(0x0321081f), SkBits2Float(0x00002a35), SkBits2Float(0x74744000), SkBits2Float(0x2974e874));  // 1.57199e-18f, 1.43144e-13f, 4.7323e-37f, 1.5141e-41f, 7.74059e+31f, 5.43805e-14f
7652 path.cubicTo(SkBits2Float(0x74647474), SkBits2Float(0x74747474), SkBits2Float(0x12ec7474), SkBits2Float(0x4cc22147), SkBits2Float(0x47932343), SkBits2Float(0x282a3a21));  // 7.24002e+31f, 7.74708e+31f, 1.49224e-27f, 1.0178e+08f, 75334.5f, 9.4495e-15f
7653 path.lineTo(SkBits2Float(0x3a214781), SkBits2Float(0x2128282a));  // 0.000615232f, 5.69738e-19f
7654 path.close();
7655 path.moveTo(SkBits2Float(0x3a214781), SkBits2Float(0x2128282a));  // 0.000615232f, 5.69738e-19f
7656 path.conicTo(SkBits2Float(0x3a323adf), SkBits2Float(0x4977291a), SkBits2Float(0x0000002a), SkBits2Float(0x7474743e), SkBits2Float(0x74747474));  // 0.000679893f, 1.01237e+06f, 5.88545e-44f, 7.74706e+31f, 7.74708e+31f
7657 path.cubicTo(SkBits2Float(0x74747464), SkBits2Float(0x74747474), SkBits2Float(0x21e7fc06), SkBits2Float(0x2a212a59), SkBits2Float(0x0321081f), SkBits2Float(0x00002a35));  // 7.74708e+31f, 7.74708e+31f, 1.57199e-18f, 1.43144e-13f, 4.7323e-37f, 1.5141e-41f
7658 path.moveTo(SkBits2Float(0x74747440), SkBits2Float(0x742974e8));  // 7.74706e+31f, 5.3703e+31f
7659 path.cubicTo(SkBits2Float(0x74746474), SkBits2Float(0x74747474), SkBits2Float(0xd912ec74), SkBits2Float(0x553a3728), SkBits2Float(0x29202a8c), SkBits2Float(0x5555201b));  // 7.7451e+31f, 7.74708e+31f, -2.58471e+15f, 1.27966e+13f, 3.5564e-14f, 1.46459e+13f
7660 path.moveTo(SkBits2Float(0x31292768), SkBits2Float(0x212d2aff));  // 2.46151e-09f, 5.86716e-19f
7661 path.quadTo(SkBits2Float(0x2128282a), SkBits2Float(0x323adf81), SkBits2Float(0x77291a3a), SkBits2Float(0x00002a49));  // 5.69738e-19f, 1.08774e-08f, 3.42981e+33f, 1.51691e-41f
7662 path.moveTo(SkBits2Float(0x7474743e), SkBits2Float(0x74747474));  // 7.74706e+31f, 7.74708e+31f
7663 path.cubicTo(SkBits2Float(0x74747464), SkBits2Float(0x74747474), SkBits2Float(0x21e7fc06), SkBits2Float(0x2a212a59), SkBits2Float(0x0321081f), SkBits2Float(0x00002a35));  // 7.74708e+31f, 7.74708e+31f, 1.57199e-18f, 1.43144e-13f, 4.7323e-37f, 1.5141e-41f
7664 path.moveTo(SkBits2Float(0x74747440), SkBits2Float(0x74747474));  // 7.74706e+31f, 7.74708e+31f
7665 path.cubicTo(SkBits2Float(0x74747464), SkBits2Float(0x74747474), SkBits2Float(0x43747474), SkBits2Float(0xa52b0220), SkBits2Float(0x47812a43), SkBits2Float(0x282a3a21));  // 7.74708e+31f, 7.74708e+31f, 244.455f, -1.48326e-16f, 66132.5f, 9.4495e-15f
7666 path.lineTo(SkBits2Float(0x74747440), SkBits2Float(0x74747474));  // 7.74706e+31f, 7.74708e+31f
7667 path.close();
7668 path.moveTo(SkBits2Float(0x74747440), SkBits2Float(0x74747474));  // 7.74706e+31f, 7.74708e+31f
7669 path.conicTo(SkBits2Float(0x3a323adf), SkBits2Float(0x19433b1a), SkBits2Float(0x5921e7fc), SkBits2Float(0x1f2a212a), SkBits2Float(0x35032108));  // 0.000679893f, 1.00932e-23f, 2.84828e+15f, 3.60263e-20f, 4.88494e-07f
7670 
7671     SkPath path2(path);
7672     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7673 }
7674 
fuzz763_37(skiatest::Reporter * reporter,const char * filename)7675 static void fuzz763_37(skiatest::Reporter* reporter, const char* filename) {
7676     SkPath path;
7677     path.setFillType((SkPath::FillType) 0);
7678 path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x5b2d3368));  // 1.59583e+13f, 4.87517e+16f
7679 path.conicTo(SkBits2Float(0x5b2d555b), SkBits2Float(0x68275b2d), SkBits2Float(0x21685527), SkBits2Float(0x0321082a), SkBits2Float(0x6ab485c0));  // 4.8789e+16f, 3.16127e+24f, 7.87174e-19f, 4.7323e-37f, 1.09119e+26f
7680 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 4.8745e+16f
7681 path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b));  // 3.50084e+24f, -2.87489e+29f
7682 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2a8cef2a), SkBits2Float(0x682d2953), SkBits2Float(0xee682103), SkBits2Float(0x4b7bc055));  // 5.76397e-19f, 2.50349e-13f, 3.27093e+24f, -1.79601e+28f, 1.64988e+07f
7683 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
7684 path.conicTo(SkBits2Float(0x4b03213b), SkBits2Float(0xc07b2a08), SkBits2Float(0x5b2d7a6a), SkBits2Float(0xf0556830), SkBits2Float(0x2a8c555b));  // 8.59372e+06f, -3.92444f, 4.88298e+16f, -2.64185e+29f, 2.49282e-13f
7685 path.conicTo(SkBits2Float(0x0321212a), SkBits2Float(0x4b7bd2c0), SkBits2Float(0xed7ac039), SkBits2Float(0x2f218c08), SkBits2Float(0x1f037b2a));  // 4.73517e-37f, 1.65035e+07f, -4.85023e+27f, 1.46926e-10f, 2.78422e-20f
7686 path.lineTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b));  // 3.50084e+24f, -2.87489e+29f
7687 path.close();
7688 path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b));  // 3.50084e+24f, -2.87489e+29f
7689 path.lineTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // 3.20982e+24f, 1.21279e-11f
7690 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7691 path.conicTo(SkBits2Float(0x721f2a5b), SkBits2Float(0x212a8c55), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7b28), SkBits2Float(0x4793ed7a));  // 3.1526e+30f, 5.7784e-19f, 4.7323e-37f, 6.14984e+25f, 75739
7692 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7693 path.close();
7694 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7695 path.quadTo(SkBits2Float(0x28282a2a), SkBits2Float(0x2c682921), SkBits2Float(0x8c555bf6), SkBits2Float(0x6d03de30));  // 9.33502e-15f, 3.2992e-12f, -1.64366e-31f, 2.5507e+27f
7696 path.cubicTo(SkBits2Float(0x68392d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x081f2a21));  // 3.4979e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 4.78968e-34f
7697 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7698 path.close();
7699 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7700 path.conicTo(SkBits2Float(0x6a4b7bc0), SkBits2Float(0xdf93ed7a), SkBits2Float(0x1a3a803a), SkBits2Float(0xb38a294f), SkBits2Float(0x3ac2213a));  // 6.14991e+25f, -2.13186e+19f, 3.85675e-23f, -6.43364e-08f, 0.00148109f
7701 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7702 path.close();
7703 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7704 path.conicTo(SkBits2Float(0xe62b291d), SkBits2Float(0x2a812a43), SkBits2Float(0x8ced093a), SkBits2Float(0xb38a5c5c), SkBits2Float(0x3ac2213a));  // -2.02071e+23f, 2.29443e-13f, -3.65212e-31f, -6.44293e-08f, 0.00148109f
7705 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7706 path.close();
7707 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
7708 path.lineTo(SkBits2Float(0x8ced293a), SkBits2Float(0x5c5c5c5c));  // -3.65404e-31f, 2.48104e+17f
7709 path.moveTo(SkBits2Float(0x21081f21), SkBits2Float(0x4b7bc003));  // 4.61198e-19f, 1.64987e+07f
7710 path.lineTo(SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55));  // 9.43289e-15f, 4.8745e+16f
7711 path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5a));  // 3.50084e+24f, -2.87489e+29f
7712 path.lineTo(SkBits2Float(0x682d2952), SkBits2Float(0xee682103));  // 3.27093e+24f, -1.79601e+28f
7713 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x2a3b0355));  // 4.85282e+16f, 1.66101e-13f
7714 path.lineTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5a));  // 3.50084e+24f, -2.87489e+29f
7715 path.close();
7716 path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5a));  // 3.50084e+24f, -2.87489e+29f
7717 path.conicTo(SkBits2Float(0x084b218c), SkBits2Float(0x6ac07b2a), SkBits2Float(0x395b2d7a), SkBits2Float(0x5bf05568), SkBits2Float(0x1f2a8c55));  // 6.11275e-34f, 1.16348e+26f, 0.000209024f, 1.35296e+17f, 3.6115e-20f
7718 
7719     SkPath path1(path);
7720     path.reset();
7721     path.setFillType((SkPath::FillType) 0);
7722 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7723 path.cubicTo(SkBits2Float(0xbcb4bcac), SkBits2Float(0x000029ff), SkBits2Float(0x010000bc), SkBits2Float(0x00bcbc00), SkBits2Float(0xbebcbcbc), SkBits2Float(0xb6aebcae));  // -0.0220626f, 1.50654e-41f, 2.35104e-38f, 1.73325e-38f, -0.368627f, -5.20757e-06f
7724 
7725     SkPath path2(path);
7726     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7727 }
7728 
fuzz763_38(skiatest::Reporter * reporter,const char * filename)7729 static void fuzz763_38(skiatest::Reporter* reporter, const char* filename) {
7730     SkPath path;
7731     path.setFillType((SkPath::FillType) 0);
7732 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7733 path.conicTo(SkBits2Float(0x5b682968), SkBits2Float(0x5b292d11), SkBits2Float(0x212a8c55), SkBits2Float(0x555b2d2d), SkBits2Float(0x52525268));  // 6.53477e+16f, 4.76188e+16f, 5.7784e-19f, 1.50617e+13f, 2.25831e+11f
7734 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7735 path.close();
7736 path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad));  // -1.43243e-16f, 3.88004e+11f
7737 path.close();
7738 path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad));  // -1.43243e-16f, 3.88004e+11f
7739 path.quadTo(SkBits2Float(0x72727270), SkBits2Float(0x52525272), SkBits2Float(0x2ac05252), SkBits2Float(0x727fb721));  // 4.80216e+30f, 2.25832e+11f, 3.41632e-13f, 5.06496e+30f
7740 path.lineTo(SkBits2Float(0x73727322), SkBits2Float(0x555b2d29));  // 1.92088e+31f, 1.50617e+13f
7741 path.lineTo(SkBits2Float(0xab2a212e), SkBits2Float(0x7a27872a));  // -6.04422e-13f, 2.17464e+35f
7742 path.moveTo(SkBits2Float(0x25fffefb), SkBits2Float(0x7bc00321));  // 4.44082e-16f, 1.99397e+36f
7743 path.quadTo(SkBits2Float(0x52524852), SkBits2Float(0x72525228), SkBits2Float(0x72727272), SkBits2Float(0x3a727272));  // 2.25789e+11f, 4.16584e+30f, 4.80216e+30f, 0.000924862f
7744 path.lineTo(SkBits2Float(0x25fffefb), SkBits2Float(0x7bc00321));  // 4.44082e-16f, 1.99397e+36f
7745 path.close();
7746 path.moveTo(SkBits2Float(0x25fffefb), SkBits2Float(0x7bc00321));  // 4.44082e-16f, 1.99397e+36f
7747 path.quadTo(SkBits2Float(0x2a292827), SkBits2Float(0x962b0080), SkBits2Float(0x5252752a), SkBits2Float(0x72725252));  // 1.50241e-13f, -1.38134e-25f, 2.25977e+11f, 4.79967e+30f
7748 path.quadTo(SkBits2Float(0x72725252), SkBits2Float(0x52525272), SkBits2Float(0x72525252), SkBits2Float(0x72727272));  // 4.79967e+30f, 2.25832e+11f, 4.16585e+30f, 4.80216e+30f
7749 path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda000072), SkBits2Float(0x52525ada), SkBits2Float(0x52525252));  // 4.80215e+30f, -9.00732e+15f, 2.25867e+11f, 2.25831e+11f
7750 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525272), SkBits2Float(0x72525248), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.25832e+11f, 4.16584e+30f, 4.80216e+30f
7751 path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda007b72), SkBits2Float(0x52525ada), SkBits2Float(0x52525252));  // 4.80215e+30f, -9.04113e+15f, 2.25867e+11f, 2.25831e+11f
7752 path.quadTo(SkBits2Float(0x86727272), SkBits2Float(0x5252528d), SkBits2Float(0x72525252), SkBits2Float(0x72727227));  // -4.55992e-35f, 2.25832e+11f, 4.16585e+30f, 4.80214e+30f
7753 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x29217272), SkBits2Float(0xc003211c), SkBits2Float(0x556a4b7b));  // 4.80216e+30f, 3.58484e-14f, -2.0489f, 1.61006e+13f
7754 path.moveTo(SkBits2Float(0x72557272), SkBits2Float(0x00727272));  // 4.22775e+30f, 1.05103e-38f
7755 path.moveTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252));  // 1.58931e+16f, 2.25831e+11f
7756 path.close();
7757 path.moveTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252));  // 1.58931e+16f, 2.25831e+11f
7758 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x3a727272), SkBits2Float(0x28273ac2), SkBits2Float(0x00802a29));  // 4.80216e+30f, 0.000924862f, 9.2831e-15f, 1.17701e-38f
7759 path.lineTo(SkBits2Float(0x52752a96), SkBits2Float(0x72525252));  // 2.63245e+11f, 4.16585e+30f
7760 path.quadTo(SkBits2Float(0x72525272), SkBits2Float(0x52527272), SkBits2Float(0x52525252), SkBits2Float(0x72727272));  // 4.16586e+30f, 2.25966e+11f, 2.25831e+11f, 4.80216e+30f
7761 path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0x00007272), SkBits2Float(0x525adada), SkBits2Float(0x52525252));  // 4.79991e+30f, 4.10552e-41f, 2.34994e+11f, 2.25831e+11f
7762 path.lineTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252));  // 1.58931e+16f, 2.25831e+11f
7763 path.close();
7764 path.moveTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252));  // 1.58931e+16f, 2.25831e+11f
7765 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525272), SkBits2Float(0x72525248), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.25832e+11f, 4.16584e+30f, 4.80216e+30f
7766 path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda007b72), SkBits2Float(0x52525ada), SkBits2Float(0x72525252));  // 4.80215e+30f, -9.04113e+15f, 2.25867e+11f, 4.16585e+30f
7767 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x72727252), SkBits2Float(0xda007b72), SkBits2Float(0x52525ada));  // 4.80216e+30f, 4.80215e+30f, -9.04113e+15f, 2.25867e+11f
7768 path.lineTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252));  // 1.58931e+16f, 2.25831e+11f
7769 path.close();
7770 path.moveTo(SkBits2Float(0x5a61dada), SkBits2Float(0x52525252));  // 1.58931e+16f, 2.25831e+11f
7771 path.quadTo(SkBits2Float(0x86727272), SkBits2Float(0x5252528d), SkBits2Float(0x72525252), SkBits2Float(0x72727227));  // -4.55992e-35f, 2.25832e+11f, 4.16585e+30f, 4.80214e+30f
7772 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x29217272), SkBits2Float(0xc003211c), SkBits2Float(0x556a4b7b));  // 4.80216e+30f, 3.58484e-14f, -2.0489f, 1.61006e+13f
7773 path.moveTo(SkBits2Float(0x72557272), SkBits2Float(0x00727272));  // 4.22775e+30f, 1.05103e-38f
7774 path.moveTo(SkBits2Float(0x525adada), SkBits2Float(0x52525252));  // 2.34994e+11f, 2.25831e+11f
7775 path.close();
7776 path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad));  // -1.43243e-16f, 3.88004e+11f
7777 path.close();
7778 path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad));  // -1.43243e-16f, 3.88004e+11f
7779 path.quadTo(SkBits2Float(0x72727270), SkBits2Float(0x52525272), SkBits2Float(0x72525252), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.25832e+11f, 4.16585e+30f, 4.80216e+30f
7780 path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda007b72), SkBits2Float(0x52525ada), SkBits2Float(0x52525252));  // 4.80215e+30f, -9.04113e+15f, 2.25867e+11f, 2.25831e+11f
7781 path.quadTo(SkBits2Float(0x52525272), SkBits2Float(0x3b3b0052), SkBits2Float(0x5b2d553a), SkBits2Float(0x68556829));  // 2.25832e+11f, 0.00285341f, 4.87889e+16f, 4.03114e+24f
7782 
7783     SkPath path1(path);
7784     path.reset();
7785     path.setFillType((SkPath::FillType) 0);
7786 path.moveTo(SkBits2Float(0x52528c55), SkBits2Float(0x29215252));  // 2.26074e+11f, 3.58206e-14f
7787 
7788     SkPath path2(path);
7789     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
7790 }
7791 
fuzz763_41(skiatest::Reporter * reporter,const char * filename)7792 static void fuzz763_41(skiatest::Reporter* reporter, const char* filename) {
7793     SkPath path;
7794     path.setFillType((SkPath::FillType) 0);
7795 
7796     SkPath path1(path);
7797     path.reset();
7798     path.setFillType((SkPath::FillType) 0);
7799 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7800 path.quadTo(SkBits2Float(0x7a057c72), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x055f0089));  // 1.73275e+35f, 4.80216e+30f, 4.34505e+30f, 1.04855e-35f
7801 path.quadTo(SkBits2Float(0x00057272), SkBits2Float(0x72ff0000), SkBits2Float(0xba405e72), SkBits2Float(0x031b0074));  // 5.00233e-40f, 1.01016e+31f, -0.000733829f, 4.55509e-37f
7802 path.lineTo(SkBits2Float(0x664af700), SkBits2Float(0x56397d39));  // 2.39619e+23f, 5.09869e+13f
7803 path.quadTo(SkBits2Float(0x7a057273), SkBits2Float(0x057300e4), SkBits2Float(0x257c0c9f), SkBits2Float(0x72400006));  // 1.73224e+35f, 1.1426e-35f, 2.18618e-16f, 3.80295e+30f
7804 path.quadTo(SkBits2Float(0xba5b5e72), SkBits2Float(0x030000ff), SkBits2Float(0x74ba00e8), SkBits2Float(0xe8ec4000));  // -0.000836826f, 3.7617e-37f, 1.17894e+32f, -8.92527e+24f
7805 path.moveTo(SkBits2Float(0x39724aff), SkBits2Float(0x7200397d));  // 0.000231069f, 2.53975e+30f
7806 path.quadTo(SkBits2Float(0x827a0572), SkBits2Float(0x08727272), SkBits2Float(0x08080808), SkBits2Float(0x08080808));  // -1.83687e-37f, 7.29588e-34f, 4.09355e-34f, 4.09355e-34f
7807 path.lineTo(SkBits2Float(0x08080808), SkBits2Float(0x08080808));  // 4.09355e-34f, 4.09355e-34f
7808 path.lineTo(SkBits2Float(0x08080808), SkBits2Float(0x08080808));  // 4.09355e-34f, 4.09355e-34f
7809 path.conicTo(SkBits2Float(0x72728c08), SkBits2Float(0x5b5e7272), SkBits2Float(0x000074ba), SkBits2Float(0x03f8e300), SkBits2Float(0x5aff00e8));  // 4.80414e+30f, 6.26133e+16f, 4.18736e-41f, 1.46282e-36f, 3.58886e+16f
7810 path.quadTo(SkBits2Float(0x00800039), SkBits2Float(0x72100039), SkBits2Float(0x727a0572), SkBits2Float(0x7a727272));  // 1.1755e-38f, 2.85223e+30f, 4.95218e+30f, 3.14714e+35f
7811 path.lineTo(SkBits2Float(0x7272727a), SkBits2Float(0xdb5e6472));  // 4.80216e+30f, -6.25979e+16f
7812 path.moveTo(SkBits2Float(0x440039fc), SkBits2Float(0x0000f647));  // 512.906f, 8.83477e-41f
7813 path.lineTo(SkBits2Float(0x666d0100), SkBits2Float(0x726efe62));  // 2.79805e+23f, 4.73376e+30f
7814 path.lineTo(SkBits2Float(0x440039fc), SkBits2Float(0x0000f647));  // 512.906f, 8.83477e-41f
7815 path.close();
7816 path.moveTo(SkBits2Float(0x440039fc), SkBits2Float(0x0000f647));  // 512.906f, 8.83477e-41f
7817 path.conicTo(SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x475afc16), SkBits2Float(0x170100ad), SkBits2Float(0x01008000));  // 4.80216e+30f, -3.47604e+31f, 56060.1f, 4.1683e-25f, 2.36017e-38f
7818 path.quadTo(SkBits2Float(0x72057272), SkBits2Float(0x8c7a3472), SkBits2Float(0x72727272), SkBits2Float(0x00f6475e));  // 2.64319e+30f, -1.92751e-31f, 4.80216e+30f, 2.26171e-38f
7819 path.moveTo(SkBits2Float(0x6d106d43), SkBits2Float(0x6efe6266));  // 2.79362e+27f, 3.93641e+28f
7820 path.quadTo(SkBits2Float(0x72727a05), SkBits2Float(0xba5b7272), SkBits2Float(0x03000074), SkBits2Float(0x5aff00e8));  // 4.80274e+30f, -0.000837124f, 3.76163e-37f, 3.58886e+16f
7821 path.quadTo(SkBits2Float(0x00da0039), SkBits2Float(0x72100039), SkBits2Float(0x727a0572), SkBits2Float(0x7a727272));  // 2.00202e-38f, 2.85223e+30f, 4.95218e+30f, 3.14714e+35f
7822 path.lineTo(SkBits2Float(0x7272727a), SkBits2Float(0xdb5e6472));  // 4.80216e+30f, -6.25979e+16f
7823 path.lineTo(SkBits2Float(0xfc5b97fc), SkBits2Float(0x47440039));  // -4.56078e+36f, 50176.2f
7824 path.lineTo(SkBits2Float(0x00710000), SkBits2Float(0x62766d01));  // 1.03774e-38f, 1.13644e+21f
7825 path.quadTo(SkBits2Float(0x7a05726e), SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x4a5afc16));  // 1.73224e+35f, 4.80216e+30f, -3.47604e+31f, 3.58785e+06f
7826 
7827     SkPath path2(path);
7828     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7829 }
7830 
fuzz763_40(skiatest::Reporter * reporter,const char * filename)7831 static void fuzz763_40(skiatest::Reporter* reporter, const char* filename) {
7832     SkPath path;
7833     path.setFillType((SkPath::FillType) 1);
7834 
7835     SkPath path1(path);
7836     path.reset();
7837     path.setFillType((SkPath::FillType) 0);
7838 path.moveTo(SkBits2Float(0x10190004), SkBits2Float(0x7272727a));  // 3.01739e-29f, 4.80216e+30f
7839 path.quadTo(SkBits2Float(0xf3db5e64), SkBits2Float(0x5b97fc16), SkBits2Float(0x000039fc), SkBits2Float(0x01008000));  // -3.47604e+31f, 8.55598e+16f, 2.08009e-41f, 2.36017e-38f
7840 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x41720089));  // 1.73224e+35f, 4.80216e+30f, 4.34505e+30f, 15.1251f
7841 path.lineTo(SkBits2Float(0x63636363), SkBits2Float(0x63606363));  // 4.19457e+21f, 4.13923e+21f
7842 path.lineTo(SkBits2Float(0x01000000), SkBits2Float(0x10010004));  // 2.35099e-38f, 2.54408e-29f
7843 path.conicTo(SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x4a5afc16), SkBits2Float(0x0000d07d), SkBits2Float(0x01008000));  // 4.80216e+30f, -3.47604e+31f, 3.58785e+06f, 7.47915e-41f, 2.36017e-38f
7844 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x63720089));  // 1.73224e+35f, 4.80216e+30f, 4.34505e+30f, 4.46415e+21f
7845 path.lineTo(SkBits2Float(0x63636363), SkBits2Float(0x63606363));  // 4.19457e+21f, 4.13923e+21f
7846 path.lineTo(SkBits2Float(0x72000000), SkBits2Float(0x5b5e72b4));  // 2.5353e+30f, 6.26136e+16f
7847 path.quadTo(SkBits2Float(0x05720089), SkBits2Float(0x05727272), SkBits2Float(0x7272727a), SkBits2Float(0x5b5e7272));  // 1.13789e-35f, 1.13998e-35f, 4.80216e+30f, 6.26133e+16f
7848 path.cubicTo(SkBits2Float(0x03000074), SkBits2Float(0x4aff00e8), SkBits2Float(0x397d3972), SkBits2Float(0x01727200), SkBits2Float(0x72727a00), SkBits2Float(0x5e8d7272));  // 3.76163e-37f, 8.35596e+06f, 0.000241494f, 4.45302e-38f, 4.80274e+30f, 5.09617e+18f
7849 path.moveTo(SkBits2Float(0x72008972), SkBits2Float(0x458fe705));  // 2.54594e+30f, 4604.88f
7850 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0xe8727272), SkBits2Float(0xba5b5e03), SkBits2Float(0x03000074));  // 1.73224e+35f, -4.5797e+24f, -0.00083682f, 3.76163e-37f
7851 path.lineTo(SkBits2Float(0xf3dbff00), SkBits2Float(0x00397d16));  // -3.48598e+31f, 5.2795e-39f
7852 path.cubicTo(SkBits2Float(0x7a101900), SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x0197fc16), SkBits2Float(0x200c2010), SkBits2Float(0x20203620));  // 1.87049e+35f, 4.80216e+30f, -3.47604e+31f, 5.58304e-38f, 1.18691e-19f, 1.35704e-19f
7853 
7854     SkPath path2(path);
7855     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
7856 }
7857 
fuzz763_39(skiatest::Reporter * reporter,const char * filename)7858 static void fuzz763_39(skiatest::Reporter* reporter, const char* filename) {
7859     SkPath path;
7860     path.setFillType((SkPath::FillType) 0);
7861 
7862     SkPath path1(path);
7863     path.reset();
7864     path.setFillType((SkPath::FillType) 0);
7865 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7866 path.quadTo(SkBits2Float(0x7a057c72), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x055f0089));  // 1.73275e+35f, 4.80216e+30f, 4.34505e+30f, 1.04855e-35f
7867 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0xba405e72), SkBits2Float(0x03000074));  // 1.73224e+35f, 4.80216e+30f, -0.000733829f, 3.76163e-37f
7868 path.lineTo(SkBits2Float(0x664aff00), SkBits2Float(0x56397d39));  // 2.39655e+23f, 5.09869e+13f
7869 path.quadTo(SkBits2Float(0x7a057273), SkBits2Float(0x057300ff), SkBits2Float(0x257c0c9f), SkBits2Float(0x72787257));  // 1.73224e+35f, 1.1426e-35f, 2.18618e-16f, 4.92099e+30f
7870 path.quadTo(SkBits2Float(0xba5b5e72), SkBits2Float(0x03000093), SkBits2Float(0x74ba00e8), SkBits2Float(0xe8ecff00));  // -0.000836826f, 3.76165e-37f, 1.17894e+32f, -8.95346e+24f
7871 path.moveTo(SkBits2Float(0x39724aff), SkBits2Float(0x7200397d));  // 0.000231069f, 2.53975e+30f
7872 path.quadTo(SkBits2Float(0x827a0572), SkBits2Float(0x72727272), SkBits2Float(0x724adf00), SkBits2Float(0x00397d39));  // -1.83687e-37f, 4.80216e+30f, 4.01828e+30f, 5.27954e-39f
7873 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x16f3abab), SkBits2Float(0xfc5b97fc), SkBits2Float(0x47440039));  // 1.73224e+35f, 3.93671e-25f, -4.56078e+36f, 50176.2f
7874 path.lineTo(SkBits2Float(0x00710000), SkBits2Float(0x62767201));  // 1.03774e-38f, 1.13653e+21f
7875 path.quadTo(SkBits2Float(0x7a05726e), SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x4a5afc16));  // 1.73224e+35f, 4.80216e+30f, -3.47604e+31f, 3.58785e+06f
7876 
7877     SkPath path2(path);
7878     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7879 }
7880 
7881 
fuzz763_42(skiatest::Reporter * reporter,const char * filename)7882 static void fuzz763_42(skiatest::Reporter* reporter, const char* filename) {
7883     SkPath path;
7884     path.setFillType((SkPath::FillType) 0);
7885 
7886     SkPath path1(path);
7887     path.reset();
7888     path.setFillType((SkPath::FillType) 0);
7889 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7890 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x05720089));  // 1.73224e+35f, 4.80216e+30f, 4.34505e+30f, 1.13789e-35f
7891 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0xba405e72), SkBits2Float(0x03000074));  // 1.73224e+35f, 4.80216e+30f, -0.000733829f, 3.76163e-37f
7892 path.lineTo(SkBits2Float(0x724aff00), SkBits2Float(0x56397d39));  // 4.02075e+30f, 5.09869e+13f
7893 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0xfa8d00ff), SkBits2Float(0x25727272), SkBits2Float(0x7272727a));  // 1.73224e+35f, -3.66067e+35f, 2.10289e-16f, 4.80216e+30f
7894 path.quadTo(SkBits2Float(0xba5b5e72), SkBits2Float(0x03000093), SkBits2Float(0x74ba00e8), SkBits2Float(0xe8e0ff00));  // -0.000836826f, 3.76165e-37f, 1.17894e+32f, -8.50011e+24f
7895 path.conicTo(SkBits2Float(0x39724aff), SkBits2Float(0x7200397d), SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x4aff0072));  // 0.000231069f, 2.53975e+30f, 1.73224e+35f, 4.80216e+30f, 8.3559e+06f
7896 path.quadTo(SkBits2Float(0x00397d39), SkBits2Float(0x05727272), SkBits2Float(0x7272727a), SkBits2Float(0x385e7272));  // 5.27954e-39f, 1.13998e-35f, 4.80216e+30f, 5.30355e-05f
7897 path.quadTo(SkBits2Float(0x057200ff), SkBits2Float(0x25727272), SkBits2Float(0x7272727a), SkBits2Float(0x5b5e7272));  // 1.1379e-35f, 2.10289e-16f, 4.80216e+30f, 6.26133e+16f
7898 path.cubicTo(SkBits2Float(0x03000074), SkBits2Float(0x4aff00e8), SkBits2Float(0x397d3972), SkBits2Float(0x01000400), SkBits2Float(0x72727a10), SkBits2Float(0x5e647272));  // 3.76163e-37f, 8.35596e+06f, 0.000241494f, 2.35128e-38f, 4.80275e+30f, 4.11534e+18f
7899 path.quadTo(SkBits2Float(0x2b2d16f3), SkBits2Float(0x0039fc4d), SkBits2Float(0x68800000), SkBits2Float(0x0100fafa));  // 6.14938e-13f, 5.32513e-39f, 4.8357e+24f, 2.369e-38f
7900 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0x725b5e72), SkBits2Float(0x63720089));  // 1.73224e+35f, 4.80216e+30f, 4.34505e+30f, 4.46415e+21f
7901 path.lineTo(SkBits2Float(0x63636363), SkBits2Float(0x63606363));  // 4.19457e+21f, 4.13923e+21f
7902 path.lineTo(SkBits2Float(0x72720000), SkBits2Float(0xff725b5e));  // 4.7933e+30f, -3.22148e+38f
7903 path.moveTo(SkBits2Float(0x72720572), SkBits2Float(0x5b5e2572));  // 4.79373e+30f, 6.25286e+16f
7904 path.quadTo(SkBits2Float(0x05720089), SkBits2Float(0x25727272), SkBits2Float(0x72728c7a), SkBits2Float(0x5b5e7272));  // 1.13789e-35f, 2.10289e-16f, 4.80417e+30f, 6.26133e+16f
7905 path.cubicTo(SkBits2Float(0x03000074), SkBits2Float(0x4aff00e8), SkBits2Float(0x397d3972), SkBits2Float(0x01000400), SkBits2Float(0x72727a10), SkBits2Float(0x5e827272));  // 3.76163e-37f, 8.35596e+06f, 0.000241494f, 2.35128e-38f, 4.80275e+30f, 4.69985e+18f
7906 path.quadTo(SkBits2Float(0x97fc16f3), SkBits2Float(0x0039fc5b), SkBits2Float(0x00f6472e), SkBits2Float(0x01008000));  // -1.62909e-24f, 5.32515e-39f, 2.26171e-38f, 2.36017e-38f
7907 path.quadTo(SkBits2Float(0x7a057272), SkBits2Float(0x72727272), SkBits2Float(0xf3db5e64), SkBits2Float(0x4a5afc16));  // 1.73224e+35f, 4.80216e+30f, -3.47604e+31f, 3.58785e+06f
7908 
7909     SkPath path2(path);
7910     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7911 }
7912 
fuzz763_43(skiatest::Reporter * reporter,const char * filename)7913 static void fuzz763_43(skiatest::Reporter* reporter, const char* filename) {
7914     SkPath path;
7915     path.setFillType((SkPath::FillType) 1);
7916 
7917     SkPath path1(path);
7918     path.reset();
7919     path.setFillType((SkPath::FillType) 0);
7920 path.moveTo(SkBits2Float(0x5c386c3a), SkBits2Float(0x4e691a3e));  // 2.07642e+17f, 9.77703e+08f
7921 path.cubicTo(SkBits2Float(0x6f69f9f5), SkBits2Float(0x18ff8791), SkBits2Float(0x2492263c), SkBits2Float(0xbc6fdb48), SkBits2Float(0xc2f82107), SkBits2Float(0x729a18e1));  // 7.24122e+28f, 6.60528e-24f, 6.33822e-17f, -0.0146397f, -124.065f, 6.10442e+30f
7922 path.cubicTo(SkBits2Float(0x07d729d1), SkBits2Float(0xdea6db48), SkBits2Float(0xcd1dfb88), SkBits2Float(0x90826769), SkBits2Float(0x1c20e5a4), SkBits2Float(0xa4c3ba9b));  // 3.23742e-34f, -6.01164e+18f, -1.65657e+08f, -5.14353e-29f, 5.32364e-22f, -8.48839e-17f
7923 path.moveTo(SkBits2Float(0xcc2084b7), SkBits2Float(0x19f68bdb));  // -4.20789e+07f, 2.54923e-23f
7924 path.close();
7925 path.moveTo(SkBits2Float(0xcc2084b7), SkBits2Float(0x19f68bdb));  // -4.20789e+07f, 2.54923e-23f
7926 path.cubicTo(SkBits2Float(0xdeea1d6e), SkBits2Float(0xc7774804), SkBits2Float(0x27cf0dcf), SkBits2Float(0x6ae8b99f), SkBits2Float(0x24ac3260), SkBits2Float(0x062fa93c));  // -8.43488e+18f, -63304, 5.7469e-15f, 1.40674e+26f, 7.46784e-17f, 3.30382e-35f
7927 path.lineTo(SkBits2Float(0x438a0b9c), SkBits2Float(0x60a1d2c8));  // 276.091f, 9.32848e+19f
7928 path.quadTo(SkBits2Float(0xe13fb902), SkBits2Float(0x07ee536f), SkBits2Float(0x971d8ac1), SkBits2Float(0x2f9f174b));  // -2.21041e+20f, 3.58593e-34f, -5.09046e-25f, 2.89385e-10f
7929 path.lineTo(SkBits2Float(0x0f2cf5d8), SkBits2Float(0xe271654c));  // 8.5276e-30f, -1.11324e+21f
7930 path.lineTo(SkBits2Float(0xe6cf24d2), SkBits2Float(0xd9537742));  // -4.89105e+23f, -3.72015e+15f
7931 path.cubicTo(SkBits2Float(0x1aaaee04), SkBits2Float(0x9e3b804c), SkBits2Float(0x84cba87d), SkBits2Float(0x4e0e8ccc), SkBits2Float(0x2aec611a), SkBits2Float(0x7ae4b639));  // 7.06949e-23f, -9.92623e-21f, -4.78798e-36f, 5.97898e+08f, 4.19894e-13f, 5.9377e+35f
7932 path.conicTo(SkBits2Float(0x73357921), SkBits2Float(0x6f163021), SkBits2Float(0x70ea542c), SkBits2Float(0xe008f404), SkBits2Float(0x1f6c5e52));  // 1.43778e+31f, 4.64809e+28f, 5.8017e+29f, -3.94741e+19f, 5.0053e-20f
7933 path.lineTo(SkBits2Float(0xda45ad4e), SkBits2Float(0xedce4a04));  // -1.39103e+16f, -7.98042e+27f
7934 path.lineTo(SkBits2Float(0xac0e45da), SkBits2Float(0x8f632841));  // -2.02182e-12f, -1.11997e-29f
7935 path.lineTo(SkBits2Float(0xcc2084b7), SkBits2Float(0x19f68bdb));  // -4.20789e+07f, 2.54923e-23f
7936 path.close();
7937 path.moveTo(SkBits2Float(0xcc2084b7), SkBits2Float(0x19f68bdb));  // -4.20789e+07f, 2.54923e-23f
7938 path.quadTo(SkBits2Float(0xf35c4ad5), SkBits2Float(0x0692f251), SkBits2Float(0x69632126), SkBits2Float(0xb927af67));  // -1.74534e+31f, 5.52751e-35f, 1.71614e+25f, -0.000159917f
7939 path.moveTo(SkBits2Float(0x6534bff9), SkBits2Float(0x434a9986));  // 5.3348e+22f, 202.6f
7940 path.quadTo(SkBits2Float(0x37c603e5), SkBits2Float(0xa0683953), SkBits2Float(0x751915e4), SkBits2Float(0x831c911a));  // 2.36053e-05f, -1.96701e-19f, 1.94059e+32f, -4.60108e-37f
7941 path.cubicTo(SkBits2Float(0xba4f10f1), SkBits2Float(0x5a7571df), SkBits2Float(0x4ec67459), SkBits2Float(0x33c58827), SkBits2Float(0x10b78ccb), SkBits2Float(0xedbd2748));  // -0.000789895f, 1.72716e+16f, 1.66476e+09f, 9.19829e-08f, 7.23977e-29f, -7.31752e+27f
7942 path.cubicTo(SkBits2Float(0x6d06f06a), SkBits2Float(0xe30465cf), SkBits2Float(0xc5458fe7), SkBits2Float(0xca488dc4), SkBits2Float(0x38f9021c), SkBits2Float(0x3e8d58db));  // 2.6101e+27f, -2.44231e+21f, -3160.99f, -3.28587e+06f, 0.000118736f, 0.276069f
7943 
7944     SkPath path2(path);
7945     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
7946 }
7947 
fuzz763_44(skiatest::Reporter * reporter,const char * filename)7948 static void fuzz763_44(skiatest::Reporter* reporter, const char* filename) {
7949     SkPath path;
7950     path.setFillType((SkPath::FillType) 1);
7951 path.moveTo(SkBits2Float(0x7c223bab), SkBits2Float(0x7cf35966));  // 3.36945e+36f, 1.01083e+37f
7952 path.quadTo(SkBits2Float(0x00000000), SkBits2Float(0x7ccaca6d), SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 8.4236e+36f, 0, 0
7953 path.lineTo(SkBits2Float(0x7d7d7d7d), SkBits2Float(0x00000000));  // 2.10591e+37f, 0
7954 path.quadTo(SkBits2Float(0x7ccacab0), SkBits2Float(0x7d1817f4), SkBits2Float(0x7c223bab), SkBits2Float(0x7cf35966));  // 8.42364e+36f, 1.26354e+37f, 3.36945e+36f, 1.01083e+37f
7955 path.close();
7956 
7957     SkPath path1(path);
7958     path.reset();
7959     path.setFillType((SkPath::FillType) 0);
7960 path.moveTo(SkBits2Float(0x109d0000), SkBits2Float(0xff7bc000));  // 6.19256e-29f, -3.34633e+38f
7961 path.conicTo(SkBits2Float(0x979797ed), SkBits2Float(0x3a214797), SkBits2Float(0x28aa217a), SkBits2Float(0x01007272), SkBits2Float(0x00000072));  // -9.7965e-25f, 0.000615233f, 1.88883e-14f, 2.3592e-38f, 1.59748e-43f
7962 path.quadTo(SkBits2Float(0x72728302), SkBits2Float(0x8b727272), SkBits2Float(0x72727272), SkBits2Float(0xc00308f6));  // 4.80344e+30f, -4.66936e-32f, 4.80216e+30f, -2.04742f
7963 path.conicTo(SkBits2Float(0x7f52753a), SkBits2Float(0x8072ffff), SkBits2Float(0x67af2103), SkBits2Float(0x7d2a6847), SkBits2Float(0x7d7d7d7d));  // 2.79747e+38f, -1.05611e-38f, 1.65405e+24f, 1.41569e+37f, 2.10591e+37f
7964 
7965     SkPath path2(path);
7966     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
7967 }
7968 
fuzz763_45(skiatest::Reporter * reporter,const char * filename)7969 static void fuzz763_45(skiatest::Reporter* reporter, const char* filename) {
7970     SkPath path;
7971     path.setFillType((SkPath::FillType) 0);
7972 
7973     SkPath path1(path);
7974     path.reset();
7975     path.setFillType((SkPath::FillType) 0);
7976 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
7977 path.cubicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a303030), SkBits2Float(0x7a303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 2.28705e+35f, 2.28705e+35f, 6.40969e-10f
7978 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x74303030), SkBits2Float(0x74303030), SkBits2Float(0x30303030), SkBits2Float(0x74303030));  // 6.40969e-10f, 5.58363e+31f, 5.58363e+31f, 6.40969e-10f, 5.58363e+31f
7979 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
7980 path.moveTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
7981 path.moveTo(SkBits2Float(0x77773030), SkBits2Float(0x30303030));  // 5.01357e+33f, 6.40969e-10f
7982 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a743030), SkBits2Float(0x74303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 3.16974e+35f, 5.58363e+31f, 6.40969e-10f
7983 path.lineTo(SkBits2Float(0x77773030), SkBits2Float(0x30303030));  // 5.01357e+33f, 6.40969e-10f
7984 path.close();
7985 path.moveTo(SkBits2Float(0x77773030), SkBits2Float(0x30303030));  // 5.01357e+33f, 6.40969e-10f
7986 path.lineTo(SkBits2Float(0x7f303030), SkBits2Float(0x7a303030));  // 2.34194e+38f, 2.28705e+35f
7987 path.conicTo(SkBits2Float(0x77303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0xf9303030), SkBits2Float(0x7a303030));  // 3.57352e+33f, 6.40969e-10f, 6.40969e-10f, -5.71764e+34f, 2.28705e+35f
7988 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
7989 path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
7990 path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
7991 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
7992 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 2.28705e+35f, 6.40969e-10f
7993 path.cubicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 2.28705e+35f, 6.40969e-10f
7994 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 6.40969e-10f
7995 path.moveTo(SkBits2Float(0x77303030), SkBits2Float(0xff303030));  // 3.57352e+33f, -2.34194e+38f
7996 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7f773030), SkBits2Float(0x7a7a3030), SkBits2Float(0x7a303030));  // 6.40969e-10f, 6.40969e-10f, 3.2857e+38f, 3.24763e+35f, 2.28705e+35f
7997 path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x77303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 3.57352e+33f, 6.40969e-10f
7998 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7b303030), SkBits2Float(0x73303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f, 9.14822e+35f, 1.39591e+31f, 6.40969e-10f
7999 path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x30303030), SkBits2Float(0x7a7a3030));  // 6.40969e-10f, 6.40969e-10f, 6.40969e-10f, 3.24763e+35f
8000     SkPath path2(path);
8001     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
8002 }
8003 
fuzz763_46(skiatest::Reporter * reporter,const char * filename)8004 static void fuzz763_46(skiatest::Reporter* reporter, const char* filename) {
8005     SkPath path;
8006     path.setFillType((SkPath::FillType) 0);
8007 
8008     SkPath path1(path);
8009     path.reset();
8010     path.setFillType((SkPath::FillType) 0);
8011 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8012     path.conicTo(SkBits2Float(0x44444444), SkBits2Float(0x44444444), SkBits2Float(0x44263030), SkBits2Float(0x44304430), SkBits2Float(0x4c444430));  // 785.067f, 785.067f, 664.753f, 705.065f, 5.145e+07f
8013 path.moveTo(SkBits2Float(0x44444444), SkBits2Float(0x44444444));  // 785.067f, 785.067f
8014 path.cubicTo(SkBits2Float(0x30303030), SkBits2Float(0x44444444), SkBits2Float(0x30303030), SkBits2Float(0x44444444), SkBits2Float(0x44444444), SkBits2Float(0x4444444c));  // 6.40969e-10f, 785.067f, 6.40969e-10f, 785.067f, 785.067f, 785.067f
8015     SkPath path2(path);
8016     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
8017 }
8018 
fuzz763_47(skiatest::Reporter * reporter,const char * filename)8019 static void fuzz763_47(skiatest::Reporter* reporter, const char* filename) {
8020     SkPath path;
8021     path.setFillType((SkPath::FillType) 1);
8022 
8023     SkPath path1(path);
8024     path.reset();
8025     path.setFillType((SkPath::FillType) 0);
8026 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8027 path.cubicTo(SkBits2Float(0x7272728e), SkBits2Float(0x52527272), SkBits2Float(0x2d555252), SkBits2Float(0x68556829), SkBits2Float(0x555b2d29), SkBits2Float(0x2a212a8c));  // 4.80217e+30f, 2.25966e+11f, 1.21259e-11f, 4.03114e+24f, 1.50617e+13f, 1.43144e-13f
8028 path.conicTo(SkBits2Float(0x00296808), SkBits2Float(0x00000002), SkBits2Float(0x52525252), SkBits2Float(0x72007272), SkBits2Float(0x52527272));  // 3.80257e-39f, 2.8026e-45f, 2.25831e+11f, 2.54416e+30f, 2.25966e+11f
8029 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8030 path.close();
8031 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8032 path.lineTo(SkBits2Float(0x2a212a8c), SkBits2Float(0x7272081f));  // 1.43144e-13f, 4.79393e+30f
8033 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x5974fa80), SkBits2Float(0x00747474), SkBits2Float(0x59585264));  // 4.80216e+30f, 4.30971e+15f, 1.06947e-38f, 3.80557e+15f
8034 path.cubicTo(SkBits2Float(0x64007474), SkBits2Float(0x088c5852), SkBits2Float(0x80808021), SkBits2Float(0x8c808080), SkBits2Float(0x80802108), SkBits2Float(0x80808080));  // 9.4783e+21f, 8.44671e-34f, -1.18009e-38f, -1.97989e-31f, -1.17668e-38f, -1.1801e-38f
8035 path.quadTo(SkBits2Float(0x80807d80), SkBits2Float(0x80808080), SkBits2Float(0xff7f0000), SkBits2Float(0x80808080));  // -1.18e-38f, -1.1801e-38f, -3.38953e+38f, -1.1801e-38f
8036 path.quadTo(SkBits2Float(0x80808080), SkBits2Float(0x80808080), SkBits2Float(0xed842b00), SkBits2Float(0x7252ff6d));  // -1.1801e-38f, -1.1801e-38f, -5.113e+27f, 4.17924e+30f
8037 path.quadTo(SkBits2Float(0x72577200), SkBits2Float(0x55525352), SkBits2Float(0x2a212a8c), SkBits2Float(0x7272081f));  // 4.26733e+30f, 1.44535e+13f, 1.43144e-13f, 4.79393e+30f
8038 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x6f740080), SkBits2Float(0x8c556874), SkBits2Float(0x2982ffff));  // 4.80216e+30f, 7.55149e+28f, -1.64404e-31f, 5.81757e-14f
8039 
8040     SkPath path2(path);
8041     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
8042 }
8043 
fuzz763_48(skiatest::Reporter * reporter,const char * filename)8044 static void fuzz763_48(skiatest::Reporter* reporter, const char* filename) {
8045     SkPath path;
8046     path.setFillType((SkPath::FillType) 1);
8047 
8048     SkPath path1(path);
8049     path.reset();
8050     path.setFillType((SkPath::FillType) 0);
8051 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8052 path.lineTo(SkBits2Float(0xed0081bc), SkBits2Float(0x1b2d8040));  // -2.48568e+27f, 1.43517e-22f
8053 path.moveTo(SkBits2Float(0x74747403), SkBits2Float(0x29747474));  // 7.74703e+31f, 5.42799e-14f
8054 path.close();
8055 path.moveTo(SkBits2Float(0x74747403), SkBits2Float(0x29747474));  // 7.74703e+31f, 5.42799e-14f
8056 path.conicTo(SkBits2Float(0x662d5576), SkBits2Float(0x2d804066), SkBits2Float(0x8068291b), SkBits2Float(0x740315ff), SkBits2Float(0x74747474));  // 2.04636e+23f, 1.45805e-11f, -9.56564e-39f, 4.15428e+31f, 7.74708e+31f
8057 path.cubicTo(SkBits2Float(0x762d0529), SkBits2Float(0x72525252), SkBits2Float(0x007b7272), SkBits2Float(0x525adada), SkBits2Float(0x52525252), SkBits2Float(0x52727252));  // 8.77316e+32f, 4.16585e+30f, 1.13368e-38f, 2.34994e+11f, 2.25831e+11f, 2.60325e+11f
8058 path.lineTo(SkBits2Float(0x74747403), SkBits2Float(0x29747474));  // 7.74703e+31f, 5.42799e-14f
8059 path.close();
8060 path.moveTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad));  // -1.43244e-16f, 3.88004e+11f
8061 path.close();
8062 path.moveTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad));  // -1.43244e-16f, 3.88004e+11f
8063 path.quadTo(SkBits2Float(0x72727270), SkBits2Float(0x52524872), SkBits2Float(0x72525252), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.2579e+11f, 4.16585e+30f, 4.80216e+30f
8064 path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0x80406666), SkBits2Float(0x68291b2d), SkBits2Float(0x0315ff80));  // 4.80215e+30f, -5.91421e-39f, 3.19432e+24f, 4.40805e-37f
8065 path.cubicTo(SkBits2Float(0x74747474), SkBits2Float(0x7b722974), SkBits2Float(0x5adada00), SkBits2Float(0x52525252), SkBits2Float(0x72720052), SkBits2Float(0x72727272));  // 7.74708e+31f, 1.25738e+36f, 3.08006e+16f, 2.25831e+11f, 4.79333e+30f, 4.80216e+30f
8066 path.lineTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad));  // -1.43244e-16f, 3.88004e+11f
8067 path.close();
8068 path.moveTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad));  // -1.43244e-16f, 3.88004e+11f
8069 path.quadTo(SkBits2Float(0x72727227), SkBits2Float(0x72727272), SkBits2Float(0x74727272), SkBits2Float(0x55747421));  // 4.80214e+30f, 4.80216e+30f, 7.68345e+31f, 1.67987e+13f
8070 path.lineTo(SkBits2Float(0xa5252620), SkBits2Float(0x52b4adad));  // -1.43244e-16f, 3.88004e+11f
8071 path.close();
8072 path.moveTo(SkBits2Float(0x724b0000), SkBits2Float(0x00725f72));  // 4.02083e+30f, 1.05035e-38f
8073 path.lineTo(SkBits2Float(0x52525252), SkBits2Float(0x72725252));  // 2.25831e+11f, 4.79967e+30f
8074 path.quadTo(SkBits2Float(0x26727272), SkBits2Float(0x0303a525), SkBits2Float(0x52005c03), SkBits2Float(0x72525252));  // 8.41157e-16f, 3.8687e-37f, 1.37825e+11f, 4.16585e+30f
8075 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x1ff07255), SkBits2Float(0x2a8c5572), SkBits2Float(0x21082a21));  // 4.80216e+30f, 1.01833e-19f, 2.49283e-13f, 4.61343e-19f
8076 path.lineTo(SkBits2Float(0x2a2a3a21), SkBits2Float(0x29212828));  // 1.51192e-13f, 3.5784e-14f
8077 
8078     SkPath path2(path);
8079     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
8080 }
8081 
fuzz763_49(skiatest::Reporter * reporter,const char * filename)8082 static void fuzz763_49(skiatest::Reporter* reporter, const char* filename) {
8083     SkPath path;
8084     path.setFillType((SkPath::FillType) 0);
8085 
8086     SkPath path1(path);
8087     path.reset();
8088     path.setFillType((SkPath::FillType) 0);
8089 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8090 path.conicTo(SkBits2Float(0x30303030), SkBits2Float(0x78303030), SkBits2Float(0x78787881), SkBits2Float(0x78787878), SkBits2Float(0x30303030));  // 6.40969e-10f, 1.42941e+34f, 2.01583e+34f, 2.01583e+34f, 6.40969e-10f
8091 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 2.01583e+34f, 2.01583e+34f
8092 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 2.01583e+34f, 2.01583e+34f
8093 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 2.01583e+34f, 2.01583e+34f
8094 path.quadTo(SkBits2Float(0x30303030), SkBits2Float(0x78787878), SkBits2Float(0x78787878), SkBits2Float(0x78787878));  // 6.40969e-10f, 2.01583e+34f, 2.01583e+34f, 2.01583e+34f
8095 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8096 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8097 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8098 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8099 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8100 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8101 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8102 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8103 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8104 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8105 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8106 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8107 path.lineTo(SkBits2Float(0x30303030), SkBits2Float(0x30303030));  // 6.40969e-10f, 6.40969e-10f
8108 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x7878788d));  // 2.01583e+34f, 2.01584e+34f
8109 path.lineTo(SkBits2Float(0x78787878), SkBits2Float(0x30303030));  // 2.01583e+34f, 6.40969e-10f
8110 
8111     SkPath path2(path);
8112     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
8113 }
8114 
fuzz763_50(skiatest::Reporter * reporter,const char * filename)8115 static void fuzz763_50(skiatest::Reporter* reporter, const char* filename) {
8116     SkPath path;
8117     path.setFillType((SkPath::FillType) 1);
8118 path.moveTo(SkBits2Float(0x70621ede), SkBits2Float(0x00000000));  // 2.79924e+29f, 0
8119 path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x74fc5b97), SkBits2Float(0x7d458fe4));  // 0, 0, 0, 1.59951e+32f, 1.64128e+37f
8120 path.lineTo(SkBits2Float(0xefea1ffe), SkBits2Float(0x00000000));  // -1.44916e+29f, 0
8121 path.lineTo(SkBits2Float(0x70621ede), SkBits2Float(0x00000000));  // 2.79924e+29f, 0
8122 path.close();
8123 path.moveTo(SkBits2Float(0xefea1ffe), SkBits2Float(0x00000000));  // -1.44916e+29f, 0
8124 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8125 path.lineTo(SkBits2Float(0xefea1ffe), SkBits2Float(0x00000000));  // -1.44916e+29f, 0
8126 path.close();
8127 
8128     SkPath path1(path);
8129     path.reset();
8130     path.setFillType((SkPath::FillType) 0);
8131 
8132     SkPath path2(path);
8133     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
8134 }
8135 
fuzz763_51(skiatest::Reporter * reporter,const char * filename)8136 static void fuzz763_51(skiatest::Reporter* reporter, const char* filename) {
8137     SkPath path;
8138     path.setFillType((SkPath::FillType) 1);
8139 
8140     SkPath path1(path);
8141     path.reset();
8142     path.setFillType((SkPath::FillType) 0);
8143 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8144 path.quadTo(SkBits2Float(0x868b5aae), SkBits2Float(0x626c45ab), SkBits2Float(0xefea1ffe), SkBits2Float(0x0029fc76));  // -5.24192e-35f, 1.08961e+21f, -1.44916e+29f, 3.85582e-39f
8145 path.moveTo(SkBits2Float(0xfacbff01), SkBits2Float(0x56fc5b97));  // -5.29604e+35f, 1.38735e+14f
8146 path.cubicTo(SkBits2Float(0x7d4559c9), SkBits2Float(0xad801c39), SkBits2Float(0xfbe2091a), SkBits2Float(0x7268e394), SkBits2Float(0x7c800079), SkBits2Float(0xa1d75590));  // 1.63953e+37f, -1.45644e-11f, -2.34729e+36f, 4.61284e+30f, 5.31699e+36f, -1.45916e-18f
8147 
8148     SkPath path2(path);
8149     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
8150 }
8151 
fuzz763_52(skiatest::Reporter * reporter,const char * filename)8152 static void fuzz763_52(skiatest::Reporter* reporter, const char* filename) {
8153     SkPath path;
8154     path.setFillType((SkPath::FillType) 1);
8155 
8156     SkPath path1(path);
8157     path.reset();
8158     path.setFillType((SkPath::FillType) 0);
8159 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8160 path.quadTo(SkBits2Float(0x29ff4bae), SkBits2Float(0xa1d75590), SkBits2Float(0x9fd6f6c3), SkBits2Float(0x70621ede));  // 1.13374e-13f, -1.45916e-18f, -9.10408e-20f, 2.79924e+29f
8161 path.quadTo(SkBits2Float(0x57a839d3), SkBits2Float(0x1a80d34b), SkBits2Float(0x0147a31b), SkBits2Float(0xff7fffff));  // 3.69933e+14f, 5.32809e-23f, 3.66675e-38f, -3.40282e+38f
8162 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8163 path.close();
8164 path.moveTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef));  // 7.64778e-23f, -2.54344e-26f
8165 path.conicTo(SkBits2Float(0x75757568), SkBits2Float(0x7575755e), SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x75756575));  // 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 3.11077e+32f
8166 path.lineTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef));  // 7.64778e-23f, -2.54344e-26f
8167 path.close();
8168 path.moveTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef));  // 7.64778e-23f, -2.54344e-26f
8169 path.conicTo(SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x75757575), SkBits2Float(0x75917575), SkBits2Float(0x75757575));  // 3.11156e+32f, 3.11156e+32f, 3.11156e+32f, 3.68782e+32f, 3.11156e+32f
8170 path.lineTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef));  // 7.64778e-23f, -2.54344e-26f
8171 path.close();
8172 path.moveTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef));  // 7.64778e-23f, -2.54344e-26f
8173 path.conicTo(SkBits2Float(0x75757575), SkBits2Float(0x7575758f), SkBits2Float(0x7f757575), SkBits2Float(0x75757575), SkBits2Float(0x75757575));  // 3.11156e+32f, 3.11157e+32f, 3.26271e+38f, 3.11156e+32f, 3.11156e+32f
8174 path.lineTo(SkBits2Float(0x1ab8e97c), SkBits2Float(0x94fbe3ef));  // 7.64778e-23f, -2.54344e-26f
8175 path.close();
8176 
8177     SkPath path2(path);
8178     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
8179 }
8180 
fuzz763_53(skiatest::Reporter * reporter,const char * filename)8181 static void fuzz763_53(skiatest::Reporter* reporter, const char* filename) {
8182     SkPath path;
8183     path.setFillType((SkPath::FillType) 1);
8184 path.moveTo(SkBits2Float(0x7644b829), SkBits2Float(0x00000000));  // 9.97486e+32f, 0
8185 path.lineTo(SkBits2Float(0x74fc5b97), SkBits2Float(0x77df944a));  // 1.59951e+32f, 9.06945e+33f
8186 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0xf8fbe3ff));  // 0, -4.08716e+34f
8187 path.lineTo(SkBits2Float(0x7644b829), SkBits2Float(0x00000000));  // 9.97486e+32f, 0
8188 path.close();
8189 
8190     SkPath path1(path);
8191     path.reset();
8192     path.setFillType((SkPath::FillType) 0);
8193 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8194 path.quadTo(SkBits2Float(0x45ab86ae), SkBits2Float(0xd6d6626c), SkBits2Float(0xd6d6d6d6), SkBits2Float(0x7644d6d6));  // 5488.83f, -1.17859e+14f, -1.18109e+14f, 9.98093e+32f
8195 path.moveTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0xd6d6d6d6));  // -1.18109e+14f, -1.18109e+14f
8196 path.cubicTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0x64fed6d6), SkBits2Float(0x7644ef40), SkBits2Float(0x290877fc), SkBits2Float(0x447644b8), SkBits2Float(0x80fafc76));  // -1.18109e+14f, 3.76076e+22f, 9.98577e+32f, 3.03021e-14f, 985.074f, -2.30494e-38f
8197 path.conicTo(SkBits2Float(0x87808080), SkBits2Float(0x764400ae), SkBits2Float(0x764400fc), SkBits2Float(0x450080fc), SkBits2Float(0x3636366c));  // -1.93348e-34f, 9.93852e+32f, 9.93858e+32f, 2056.06f, 2.71518e-06f
8198 path.lineTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0xd6d6d6d6));  // -1.18109e+14f, -1.18109e+14f
8199 path.close();
8200 path.moveTo(SkBits2Float(0xef08a412), SkBits2Float(0x5aaeff7f));  // -4.22883e+28f, 2.46288e+16f
8201 path.conicTo(SkBits2Float(0x7644626c), SkBits2Float(0x088912fc), SkBits2Float(0xae8744ef), SkBits2Float(0x76571f5a), SkBits2Float(0x45ab86fc));  // 9.95788e+32f, 8.24985e-34f, -6.15133e-11f, 1.0908e+33f, 5488.87f
8202 path.conicTo(SkBits2Float(0x4064fe62), SkBits2Float(0x290877ef), SkBits2Float(0x780080b8), SkBits2Float(0x553c7644), SkBits2Float(0x644eae87));  // 3.57803f, 3.03021e-14f, 1.04254e+34f, 1.2951e+13f, 1.52504e+22f
8203 path.lineTo(SkBits2Float(0xef08a412), SkBits2Float(0x5aaeff7f));  // -4.22883e+28f, 2.46288e+16f
8204 path.close();
8205 
8206     SkPath path2(path);
8207     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
8208 }
8209 
8210 // hangs 654939
fuzz763_54(skiatest::Reporter * reporter,const char * filename)8211 static void fuzz763_54(skiatest::Reporter* reporter, const char* filename) {
8212     SkPath path;
8213     path.setFillType((SkPath::FillType) 0);
8214 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8215 path.conicTo(SkBits2Float(0x5b682968), SkBits2Float(0xb3b32d11), SkBits2Float(0xb3b3b3b3), SkBits2Float(0x5b29b3b3), SkBits2Float(0x212a8c55));  // 6.53477e+16f, -8.34353e-08f, -8.36802e-08f, 4.77669e+16f, 5.7784e-19f
8216 path.conicTo(SkBits2Float(0x68555b2d), SkBits2Float(0x28296869), SkBits2Float(0x5b252a08), SkBits2Float(0x5d68392a), SkBits2Float(0x29282780));  // 4.03018e+24f, 9.40402e-15f, 4.64896e+16f, 1.04584e+18f, 3.73378e-14f
8217 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8218 path.close();
8219 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8220 path.cubicTo(SkBits2Float(0x52727272), SkBits2Float(0x72727252), SkBits2Float(0x525252c7), SkBits2Float(0x72725252), SkBits2Float(0x72727272), SkBits2Float(0x72727255));  // 2.60326e+11f, 4.80215e+30f, 2.25833e+11f, 4.79967e+30f, 4.80216e+30f, 4.80215e+30f
8221 path.quadTo(SkBits2Float(0xd7da0000), SkBits2Float(0x5252525a), SkBits2Float(0x72525252), SkBits2Float(0x72727272));  // -4.79387e+14f, 2.25831e+11f, 4.16585e+30f, 4.80216e+30f
8222 path.quadTo(SkBits2Float(0x48525252), SkBits2Float(0x72725252), SkBits2Float(0x72727272), SkBits2Float(0x72727255));  // 215369, 4.79967e+30f, 4.80216e+30f, 4.80215e+30f
8223 path.quadTo(SkBits2Float(0xdada007b), SkBits2Float(0x5252525a), SkBits2Float(0x72675252), SkBits2Float(0x72727272));  // -3.0681e+16f, 2.25831e+11f, 4.5818e+30f, 4.80216e+30f
8224 path.quadTo(SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272), SkBits2Float(0x72727272));  // 2.25831e+11f, 3.36289e-15f, 4.80216e+30f, 4.80216e+30f
8225 path.quadTo(SkBits2Float(0x1c292172), SkBits2Float(0x7bc00321), SkBits2Float(0x9aaaaaaa), SkBits2Float(0x8c556a4b));  // 5.59606e-22f, 1.99397e+36f, -7.05861e-23f, -1.64409e-31f
8226 path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0x00007272), SkBits2Float(0x525adada), SkBits2Float(0x52525252));  // 4.79991e+30f, 4.10552e-41f, 2.34994e+11f, 2.25831e+11f
8227 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8228 path.close();
8229 path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad));  // -1.43243e-16f, 3.88004e+11f
8230 path.close();
8231 path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad));  // -1.43243e-16f, 3.88004e+11f
8232 path.quadTo(SkBits2Float(0x72725570), SkBits2Float(0x52525272), SkBits2Float(0x72525252), SkBits2Float(0x72727272));  // 4.79991e+30f, 2.25832e+11f, 4.16585e+30f, 4.80216e+30f
8233 path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0x555bb672), SkBits2Float(0x29686968), SkBits2Float(0x252a081f));  // 4.80215e+30f, 1.50985e+13f, 5.16058e-14f, 1.47479e-16f
8234 path.moveTo(SkBits2Float(0x5d68392a), SkBits2Float(0x01002780));  // 1.04584e+18f, 2.35382e-38f
8235 path.moveTo(SkBits2Float(0x72727200), SkBits2Float(0x72725252));  // 4.80212e+30f, 4.79967e+30f
8236 path.quadTo(SkBits2Float(0x5adada00), SkBits2Float(0xa5252652), SkBits2Float(0x727272ad), SkBits2Float(0xda007b72));  // 3.08006e+16f, -1.43245e-16f, 4.80218e+30f, -9.04113e+15f
8237 path.lineTo(SkBits2Float(0x5252525a), SkBits2Float(0x72525252));  // 2.25831e+11f, 4.16585e+30f
8238 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.25831e+11f, 3.36289e-15f, 4.80216e+30f
8239 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x74217472), SkBits2Float(0x005b5574), SkBits2Float(0x72680000));  // 4.80216e+30f, 5.11671e+31f, 8.38768e-39f, 4.59523e+30f
8240 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x007b7272), SkBits2Float(0x525adada));  // 4.80216e+30f, 2.25831e+11f, 1.13368e-38f, 2.34994e+11f
8241 path.lineTo(SkBits2Float(0x72727200), SkBits2Float(0x72725252));  // 4.80212e+30f, 4.79967e+30f
8242 path.close();
8243 
8244     SkPath path1(path);
8245     path.reset();
8246     path.setFillType((SkPath::FillType) 0);
8247 
8248     SkPath path2(path);
8249     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 4, filename);
8250 }
8251 
8252 
8253 // afl crash
fuzz763_55(skiatest::Reporter * reporter,const char * filename)8254 static void fuzz763_55(skiatest::Reporter* reporter, const char* filename) {
8255     SkPath path;
8256     path.setFillType((SkPath::FillType) 0);
8257 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x55415500));  // 0, 1.32857e+13f
8258 path.lineTo(SkBits2Float(0x55555568), SkBits2Float(0x55555555));  // 1.46602e+13f, 1.46602e+13f
8259 path.lineTo(SkBits2Float(0x98989898), SkBits2Float(0x55989898));  // -3.94452e-24f, 2.09726e+13f
8260 path.lineTo(SkBits2Float(0xf6f65555), SkBits2Float(0x101006f6));  // -2.49812e+33f, 2.84044e-29f
8261 path.quadTo(SkBits2Float(0xdca33f10), SkBits2Float(0xf6f6f6f6), SkBits2Float(0xf621f6f6), SkBits2Float(0xf70ff6f6));  // -3.67598e+17f, -2.50452e+33f, -8.21259e+32f, -2.91995e+33f
8262 path.lineTo(SkBits2Float(0x9400f6f6), SkBits2Float(0x10530000));  // -6.51105e-27f, 4.16124e-29f
8263 path.quadTo(SkBits2Float(0x0f101010), SkBits2Float(0x00101010), SkBits2Float(0xf610f720), SkBits2Float(0xf6f6f6f6));  // 7.10284e-30f, 1.47513e-39f, -7.35062e+32f, -2.50452e+33f
8264 path.lineTo(SkBits2Float(0x105352f6), SkBits2Float(0x1cf6ff10));  // 4.16763e-29f, 1.63448e-21f
8265 path.lineTo(SkBits2Float(0xf6f6220a), SkBits2Float(0x003700f6));  // -2.49608e+33f, 5.0513e-39f
8266 path.cubicTo(SkBits2Float(0x0000001e), SkBits2Float(0x00fff4f6), SkBits2Float(0xff101064), SkBits2Float(0xf6b6ac7f), SkBits2Float(0xf6f629f6), SkBits2Float(0x10f6f6f6));  // 4.2039e-44f, 2.35059e-38f, -1.91494e+38f, -1.85253e+33f, -2.4964e+33f, 9.74104e-29f
8267 path.quadTo(SkBits2Float(0x10101007), SkBits2Float(0x10f7fd10), SkBits2Float(0xf6f6f6f6), SkBits2Float(0xf6f645e0));  // 2.84113e-29f, 9.78142e-29f, -2.50452e+33f, -2.4975e+33f
8268 path.lineTo(SkBits2Float(0xed9ef6f6), SkBits2Float(0x53535353));  // -6.14965e+27f, 9.07636e+11f
8269 path.lineTo(SkBits2Float(0x53006cf6), SkBits2Float(0x53295353));  // 5.51584e+11f, 7.27247e+11f
8270 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x55415500));  // 0, 1.32857e+13f
8271 path.close();
8272 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x55415500));  // 0, 1.32857e+13f
8273 path.lineTo(SkBits2Float(0xf6f6f6f6), SkBits2Float(0x5353d9f6));  // -2.50452e+33f, 9.09895e+11f
8274 
8275     SkPath path1(path);
8276     path.reset();
8277     path.setFillType((SkPath::FillType) 0);
8278 
8279     SkPath path2(path);
8280     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 3, filename);
8281 }
8282 
8283 // 656149
fuzz763_56(skiatest::Reporter * reporter,const char * filename)8284 static void fuzz763_56(skiatest::Reporter* reporter, const char* filename) {
8285     SkPath path;
8286     path.setFillType((SkPath::FillType) 0);
8287 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8288 path.conicTo(SkBits2Float(0x5b682968), SkBits2Float(0xb3b32d11), SkBits2Float(0xb3b3b3b3), SkBits2Float(0x5b29b3b3), SkBits2Float(0x72725255));  // 6.53477e+16f, -8.34353e-08f, -8.36802e-08f, 4.77669e+16f, 4.79967e+30f
8289 path.quadTo(SkBits2Float(0x525252c7), SkBits2Float(0x72725252), SkBits2Float(0x72727272), SkBits2Float(0x72727255));  // 2.25833e+11f, 4.79967e+30f, 4.80216e+30f, 4.80215e+30f
8290 path.quadTo(SkBits2Float(0xd7da0000), SkBits2Float(0x5adada00), SkBits2Float(0x52525252), SkBits2Float(0x00005252));  // -4.79387e+14f, 3.08006e+16f, 2.25831e+11f, 2.9531e-41f
8291 path.conicTo(SkBits2Float(0xadada525), SkBits2Float(0x52525ab4), SkBits2Float(0x52525252), SkBits2Float(0x72727272), SkBits2Float(0x52527272));  // -1.97412e-11f, 2.25866e+11f, 2.25831e+11f, 4.80216e+30f, 2.25966e+11f
8292 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8293 path.close();
8294 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8295 path.quadTo(SkBits2Float(0x72725252), SkBits2Float(0x72727272), SkBits2Float(0x72727255), SkBits2Float(0xda007b72));  // 4.79967e+30f, 4.80216e+30f, 4.80215e+30f, -9.04113e+15f
8296 path.lineTo(SkBits2Float(0x5252525a), SkBits2Float(0x72525252));  // 2.25831e+11f, 4.16585e+30f
8297 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.25831e+11f, 3.36289e-15f, 4.80216e+30f
8298 path.lineTo(SkBits2Float(0x7bc00321), SkBits2Float(0x9aaaaaaa));  // 1.99397e+36f, -7.05861e-23f
8299 path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0x00007272), SkBits2Float(0x525adada), SkBits2Float(0x52525252));  // 4.79991e+30f, 4.10552e-41f, 2.34994e+11f, 2.25831e+11f
8300 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8301 path.close();
8302 path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad));  // -1.43243e-16f, 3.88004e+11f
8303 path.close();
8304 path.moveTo(SkBits2Float(0xa5252600), SkBits2Float(0x52b4adad));  // -1.43243e-16f, 3.88004e+11f
8305 path.quadTo(SkBits2Float(0x72727270), SkBits2Float(0x52525272), SkBits2Float(0x72525252), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.25832e+11f, 4.16585e+30f, 4.80216e+30f
8306 path.quadTo(SkBits2Float(0x72727255), SkBits2Float(0xda007b72), SkBits2Float(0x26525ada), SkBits2Float(0x72ada525));  // 4.80215e+30f, -9.04113e+15f, 7.29815e-16f, 6.87879e+30f
8307 path.quadTo(SkBits2Float(0x007b7272), SkBits2Float(0x525adada), SkBits2Float(0x52525252), SkBits2Float(0x72727252));  // 1.13368e-38f, 2.34994e+11f, 2.25831e+11f, 4.80215e+30f
8308 path.quadTo(SkBits2Float(0x52527272), SkBits2Float(0x52525252), SkBits2Float(0x72722772), SkBits2Float(0x72727272));  // 2.25966e+11f, 2.25831e+11f, 4.79636e+30f, 4.80216e+30f
8309 path.quadTo(SkBits2Float(0x74727272), SkBits2Float(0x55747421), SkBits2Float(0x0000005b), SkBits2Float(0x72727268));  // 7.68345e+31f, 1.67987e+13f, 1.27518e-43f, 4.80216e+30f
8310 path.quadTo(SkBits2Float(0x52527272), SkBits2Float(0x52525252), SkBits2Float(0x72727272), SkBits2Float(0x72557272));  // 2.25966e+11f, 2.25831e+11f, 4.80216e+30f, 4.22775e+30f
8311 path.quadTo(SkBits2Float(0x5adada72), SkBits2Float(0x52525252), SkBits2Float(0x72725252), SkBits2Float(0x72727272));  // 3.08009e+16f, 2.25831e+11f, 4.79967e+30f, 4.80216e+30f
8312 
8313     SkPath path1(path);
8314     path.reset();
8315     path.setFillType((SkPath::FillType) 0);
8316 
8317     SkPath path2(path);
8318     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
8319 }
8320 
fuzz763_57(skiatest::Reporter * reporter,const char * filename)8321 static void fuzz763_57(skiatest::Reporter* reporter, const char* filename) {
8322     SkPath path;
8323     path.setFillType((SkPath::FillType) 0);
8324 
8325     SkPath path1(path);
8326     path.reset();
8327     path.setFillType((SkPath::FillType) 0);
8328 path.moveTo(SkBits2Float(0x68546829), SkBits2Float(0x555b2d29));  // 4.01225e+24f, 1.50617e+13f
8329 path.moveTo(SkBits2Float(0x1f2a322a), SkBits2Float(0x4b7b2108));  // 3.60404e-20f, 1.6458e+07f
8330 path.lineTo(SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55));  // 9.43289e-15f, 4.8745e+16f
8331 path.moveTo(SkBits2Float(0x6838552d), SkBits2Float(0xf0684f5b));  // 3.48195e+24f, -2.87586e+29f
8332 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x2a8cef2a), SkBits2Float(0x682d2953), SkBits2Float(0xce682103), SkBits2Float(0x4b7bc055));  // 5.76397e-19f, 2.50349e-13f, 3.27093e+24f, -9.73619e+08f, 1.64988e+07f
8333 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x3b2a8c55));  // 4.85282e+16f, 0.00260236f
8334 path.lineTo(SkBits2Float(0x6838552d), SkBits2Float(0xf0684f5b));  // 3.48195e+24f, -2.87586e+29f
8335 path.close();
8336 path.moveTo(SkBits2Float(0x6838552d), SkBits2Float(0xf0684f5b));  // 3.48195e+24f, -2.87586e+29f
8337 path.conicTo(SkBits2Float(0xd2c00321), SkBits2Float(0xc0394b7b), SkBits2Float(0x8c08ed7a), SkBits2Float(0x211f2f2a), SkBits2Float(0x704b7b03));  // -4.12343e+11f, -2.89523f, -1.05485e-31f, 5.39337e-19f, 2.51897e+29f
8338 path.cubicTo(SkBits2Float(0x2d6829ed), SkBits2Float(0x5b2d555b), SkBits2Float(0x68275b2d), SkBits2Float(0x21685527), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7bc0));  // 1.3197e-11f, 4.8789e+16f, 3.16127e+24f, 7.87174e-19f, 4.7323e-37f, 6.14991e+25f
8339 path.conicTo(SkBits2Float(0x212a8ced), SkBits2Float(0x0321081f), SkBits2Float(0x6a4b7bc0), SkBits2Float(0x2829ed84), SkBits2Float(0x5b2d2d55));  // 5.77848e-19f, 4.7323e-37f, 6.14991e+25f, 9.43289e-15f, 4.8745e+16f
8340 path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b));  // 3.50084e+24f, -2.87489e+29f
8341 path.conicTo(SkBits2Float(0x212a1f5b), SkBits2Float(0x228cef2a), SkBits2Float(0x682d2953), SkBits2Float(0xee682103), SkBits2Float(0x287bc055));  // 5.76397e-19f, 3.82003e-18f, 3.27093e+24f, -1.79601e+28f, 1.3975e-14f
8342 path.lineTo(SkBits2Float(0x5b2c6829), SkBits2Float(0x212a8c55));  // 4.85282e+16f, 5.7784e-19f
8343 path.conicTo(SkBits2Float(0x4b03213b), SkBits2Float(0xc07b2a08), SkBits2Float(0x5b2d7a6a), SkBits2Float(0xf0556830), SkBits2Float(0x2a8c555b));  // 8.59372e+06f, -3.92444f, 4.88298e+16f, -2.64185e+29f, 2.49282e-13f
8344 path.conicTo(SkBits2Float(0x0321212a), SkBits2Float(0x4b7bd2c0), SkBits2Float(0xed7ac039), SkBits2Float(0x2f2a8c08), SkBits2Float(0x7b03211f));  // 4.73517e-37f, 1.65035e+07f, -4.85023e+27f, 1.55112e-10f, 6.80863e+35f
8345 path.lineTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b));  // 3.50084e+24f, -2.87489e+29f
8346 path.close();
8347 path.moveTo(SkBits2Float(0x6839552d), SkBits2Float(0xf0683b5b));  // 3.50084e+24f, -2.87489e+29f
8348 path.lineTo(SkBits2Float(0x6829ed27), SkBits2Float(0x2d555b2d));  // 3.20982e+24f, 1.21279e-11f
8349 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
8350 path.conicTo(SkBits2Float(0x721f2a5b), SkBits2Float(0x212a8c55), SkBits2Float(0x0321082a), SkBits2Float(0x6a4b7b28), SkBits2Float(0x4797ed7a));  // 3.1526e+30f, 5.7784e-19f, 4.7323e-37f, 6.14984e+25f, 77787
8351 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
8352 path.close();
8353 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
8354 path.quadTo(SkBits2Float(0x2828102a), SkBits2Float(0x2c682921), SkBits2Float(0x8c555bf6), SkBits2Float(0x6d03de30));  // 9.32938e-15f, 3.2992e-12f, -1.64366e-31f, 2.5507e+27f
8355 path.cubicTo(SkBits2Float(0x683f2d55), SkBits2Float(0xf05b684b), SkBits2Float(0x8c55272d), SkBits2Float(0x212a292a), SkBits2Float(0x0321082a), SkBits2Float(0x211f2a21));  // 3.61123e+24f, -2.71613e+29f, -1.64207e-31f, 5.76527e-19f, 4.7323e-37f, 5.39271e-19f
8356 path.lineTo(SkBits2Float(0x3a803adf), SkBits2Float(0x8a294f1a));  // 0.000978317f, -8.15193e-33f
8357 path.quadTo(SkBits2Float(0x291d9628), SkBits2Float(0x2a43e62b), SkBits2Float(0x093a2a81), SkBits2Float(0x5c5c8ced));  // 3.49912e-14f, 1.73993e-13f, 2.24089e-33f, 2.48318e+17f
8358 path.lineTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
8359 path.close();
8360 path.moveTo(SkBits2Float(0x68275b2d), SkBits2Float(0xf0685527));  // 3.16127e+24f, -2.87614e+29f
8361 path.cubicTo(SkBits2Float(0x3ac2213a), SkBits2Float(0x291d9628), SkBits2Float(0x2a43e62b), SkBits2Float(0x293a2a81), SkBits2Float(0x5c5c8ced), SkBits2Float(0x5c5c6e5c));  // 0.00148109f, 3.49912e-14f, 1.73993e-13f, 4.13372e-14f, 2.48318e+17f, 2.48183e+17f
8362 path.lineTo(SkBits2Float(0x1f212a8c), SkBits2Float(0xc0032108));  // 3.41283e-20f, -2.04889f
8363 path.lineTo(SkBits2Float(0xed847b4b), SkBits2Float(0x2d552829));  // -5.12513e+27f, 1.21166e-11f
8364 path.conicTo(SkBits2Float(0x552d5b5b), SkBits2Float(0x3b5a6839), SkBits2Float(0x5b2df068), SkBits2Float(0x2a212a1f), SkBits2Float(0x532a8cef));  // 1.1913e+13f, 0.00333263f, 4.89595e+16f, 1.43143e-13f, 7.32509e+11f
8365 
8366     SkPath path2(path);
8367     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 0, filename);
8368 }
8369 
fuzzhang_1(skiatest::Reporter * reporter,const char * filename)8370 static void fuzzhang_1(skiatest::Reporter* reporter, const char* filename) {
8371     SkPath path;
8372     path.setFillType((SkPath::FillType) 1);
8373 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8374 path.cubicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x668ece09), SkBits2Float(0x00000000), SkBits2Float(0x6751c81a), SkBits2Float(0x61c4b0fb));  // 0, 0, 3.37188e+23f, 0, 9.90666e+23f, 4.53539e+20f
8375 path.conicTo(SkBits2Float(0x66f837a9), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x3f823406));  // 5.86087e+23f, 0, 0, 0, 1.01721f
8376 path.close();
8377 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8378 path.quadTo(SkBits2Float(0x675b1bfe), SkBits2Float(0x00000000), SkBits2Float(0x67d76c42), SkBits2Float(0x6292c469));  // 1.03471e+24f, 0, 2.03461e+24f, 1.35369e+21f
8379 path.cubicTo(SkBits2Float(0x6a16df68), SkBits2Float(0x651a2f15), SkBits2Float(0x6c1e7f31), SkBits2Float(0x67a1f9b4), SkBits2Float(0x00000000), SkBits2Float(0x6a2a291f));  // 4.55985e+25f, 4.55071e+22f, 7.66444e+26f, 1.52981e+24f, 0, 5.14279e+25f
8380 path.conicTo(SkBits2Float(0x680dcb75), SkBits2Float(0x68dd898d), SkBits2Float(0x681a434a), SkBits2Float(0x6871046b), SkBits2Float(0x3fea0440));  // 2.67843e+24f, 8.36944e+24f, 2.91394e+24f, 4.55269e+24f, 1.82825f
8381 path.quadTo(SkBits2Float(0x679e1b26), SkBits2Float(0x687703c4), SkBits2Float(0x00000000), SkBits2Float(0x687d2968));  // 1.49327e+24f, 4.66598e+24f, 0, 4.78209e+24f
8382 path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8383 path.close();
8384 
8385     SkPath path1(path);
8386     path.reset();
8387     path.setFillType((SkPath::FillType) 0);
8388 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8389 path.cubicTo(SkBits2Float(0x535353ec), SkBits2Float(0x98989898), SkBits2Float(0x98989898), SkBits2Float(0xf207f36e), SkBits2Float(0xf3f2f2f2), SkBits2Float(0xed3a9781));  // 9.07646e+11f, -3.94452e-24f, -3.94452e-24f, -2.69278e+30f, -3.84968e+31f, -3.60921e+27f
8390 path.quadTo(SkBits2Float(0xf8f8c0ed), SkBits2Float(0xf8f8f8f8), SkBits2Float(0x9f9f9f9f), SkBits2Float(0x3014149f));  // -4.03626e+34f, -4.03981e+34f, -6.76032e-20f, 5.38714e-10f
8391 
8392     SkPath path2(path);
8393     testPathOp(reporter, path1, path2, (SkPathOp) 0, filename);
8394 }
8395 
release_13(skiatest::Reporter * reporter,const char * filename)8396 static void release_13(skiatest::Reporter* reporter, const char* filename) {
8397     SkPath path;
8398     path.setFillType((SkPath::FillType) 1);
8399 path.setFillType(SkPath::kEvenOdd_FillType);
8400 path.moveTo(SkBits2Float(0xd4438848), SkBits2Float(0xd488cf64));  // -3.35922e+12f, -4.70076e+12f
8401 path.lineTo(SkBits2Float(0xd43a056e), SkBits2Float(0xd4851696));  // -3.19582e+12f, -4.57288e+12f
8402 path.quadTo(SkBits2Float(0xd3d48e79), SkBits2Float(0xd49fb136), SkBits2Float(0x00000000), SkBits2Float(0xd4d4d4d4));  // -1.82585e+12f, -5.48698e+12f, 0, -7.31283e+12f
8403 path.quadTo(SkBits2Float(0xd3d06670), SkBits2Float(0xd4a0bb38), SkBits2Float(0xd41d628f), SkBits2Float(0xd472c531));  // -1.79014e+12f, -5.52269e+12f, -2.70385e+12f, -4.17076e+12f
8404 path.lineTo(SkBits2Float(0xd43a0559), SkBits2Float(0xd485168e));  // -3.19581e+12f, -4.57287e+12f
8405 path.lineTo(SkBits2Float(0xd446958b), SkBits2Float(0xd4810278));  // -3.41165e+12f, -4.43274e+12f
8406 path.lineTo(SkBits2Float(0xd443884a), SkBits2Float(0xd488cf65));  // -3.35922e+12f, -4.70076e+12f
8407 path.quadTo(SkBits2Float(0xd47efa09), SkBits2Float(0xd49fd72a), SkBits2Float(0xd4a63f0f), SkBits2Float(0xd4b83ab3));  // -4.38047e+12f, -5.49208e+12f, -5.71218e+12f, -6.33007e+12f
8408 path.lineTo(SkBits2Float(0xd497ca70), SkBits2Float(0xd4c4d4ae));  // -5.21549e+12f, -6.76305e+12f
8409 path.lineTo(SkBits2Float(0xd459d4d4), SkBits2Float(0xd4c4d4d4));  // -3.74231e+12f, -6.76307e+12f
8410 path.lineTo(SkBits2Float(0xd440daf9), SkBits2Float(0xd4c632d3));  // -3.31323e+12f, -6.81005e+12f
8411 path.lineTo(SkBits2Float(0xd4438848), SkBits2Float(0xd488cf64));  // -3.35922e+12f, -4.70076e+12f
8412 path.close();
8413 path.moveTo(SkBits2Float(0xd4767560), SkBits2Float(0xd4d1ca84));  // -4.23412e+12f, -7.20837e+12f
8414 path.lineTo(SkBits2Float(0xd4422174), SkBits2Float(0xd4d02069));  // -3.33514e+12f, -7.15118e+12f
8415 path.lineTo(SkBits2Float(0xd440daa3), SkBits2Float(0xd4c632d9));  // -3.31321e+12f, -6.81005e+12f
8416 path.lineTo(SkBits2Float(0xd41017bc), SkBits2Float(0xd4cb99b6));  // -2.47549e+12f, -6.99566e+12f
8417 path.lineTo(SkBits2Float(0xd442213b), SkBits2Float(0xd4d02067));  // -3.33512e+12f, -7.15117e+12f
8418 path.lineTo(SkBits2Float(0xd442d4d4), SkBits2Float(0xd4d4d4d4));  // -3.34718e+12f, -7.31283e+12f
8419 path.lineTo(SkBits2Float(0xd4767560), SkBits2Float(0xd4d1ca84));  // -4.23412e+12f, -7.20837e+12f
8420 path.close();
8421 path.moveTo(SkBits2Float(0xd46c7a11), SkBits2Float(0xd46c7a2e));  // -4.06264e+12f, -4.06265e+12f
8422 path.lineTo(SkBits2Float(0xd484e02c), SkBits2Float(0xd45fafcd));  // -4.56557e+12f, -3.84291e+12f
8423 path.lineTo(SkBits2Float(0xd462c867), SkBits2Float(0xd45655f7));  // -3.8961e+12f, -3.68226e+12f
8424 path.lineTo(SkBits2Float(0xd45ac463), SkBits2Float(0xd45ac505));  // -3.75839e+12f, -3.75843e+12f
8425 path.lineTo(SkBits2Float(0xd43d2fa9), SkBits2Float(0xd43d2fb5));  // -3.25019e+12f, -3.2502e+12f
8426 path.lineTo(SkBits2Float(0xd41d6287), SkBits2Float(0xd472c52a));  // -2.70385e+12f, -4.17076e+12f
8427 path.quadTo(SkBits2Float(0x00000000), SkBits2Float(0xd3db1b95), SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, -1.88212e+12f, 0, 0
8428 path.quadTo(SkBits2Float(0xd4b7efac), SkBits2Float(0x00000000), SkBits2Float(0xd4d0e88f), SkBits2Float(0xd40b8b46));  // -6.32e+12f, 0, -7.17804e+12f, -2.39735e+12f
8429 path.lineTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0x00000000));  // -7.31283e+12f, 0
8430 path.lineTo(SkBits2Float(0xdcdc154b), SkBits2Float(0x00000000));  // -4.95583e+17f, 0
8431 path.lineTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4c4d477));  // -7.31283e+12f, -6.76303e+12f
8432 path.lineTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d442));  // -7.31283e+12f, -7.31275e+12f
8433 path.lineTo(SkBits2Float(0xd4d4a691), SkBits2Float(0xd4d4d442));  // -7.30662e+12f, -7.31275e+12f
8434 path.lineTo(SkBits2Float(0xd454d4d4), SkBits2Float(0xd4d4aa30));  // -3.65641e+12f, -7.30711e+12f
8435 path.lineTo(SkBits2Float(0xd4bd9def), SkBits2Float(0xd4d43df0));  // -6.51519e+12f, -7.29258e+12f
8436 path.lineTo(SkBits2Float(0xd4767560), SkBits2Float(0xd4d1ca84));  // -4.23412e+12f, -7.20837e+12f
8437 path.lineTo(SkBits2Float(0xd497ca70), SkBits2Float(0xd4c4d4ae));  // -5.21549e+12f, -6.76305e+12f
8438 path.lineTo(SkBits2Float(0xd4bab953), SkBits2Float(0xd4c4d48e));  // -6.41579e+12f, -6.76304e+12f
8439 path.lineTo(SkBits2Float(0xd4a63f0f), SkBits2Float(0xd4b83ab3));  // -5.71218e+12f, -6.33007e+12f
8440 path.lineTo(SkBits2Float(0xd4ae61eb), SkBits2Float(0xd4ae61f4));  // -5.99174e+12f, -5.99174e+12f
8441 path.lineTo(SkBits2Float(0xd46c7a11), SkBits2Float(0xd46c7a2e));  // -4.06264e+12f, -4.06265e+12f
8442 path.close();
8443 path.moveTo(SkBits2Float(0xd46c7a11), SkBits2Float(0xd46c7a2e));  // -4.06264e+12f, -4.06265e+12f
8444 path.lineTo(SkBits2Float(0xd446965c), SkBits2Float(0xd4810237));  // -3.4117e+12f, -4.4327e+12f
8445 path.lineTo(SkBits2Float(0xd45ac549), SkBits2Float(0xd45ac55f));  // -3.75845e+12f, -3.75846e+12f
8446 path.lineTo(SkBits2Float(0xd46c7a11), SkBits2Float(0xd46c7a2e));  // -4.06264e+12f, -4.06265e+12f
8447 path.close();
8448 path.moveTo(SkBits2Float(0xd4b46028), SkBits2Float(0xd41e572a));  // -6.19766e+12f, -2.72027e+12f
8449 path.lineTo(SkBits2Float(0xd4cde20a), SkBits2Float(0xd434bb57));  // -7.07408e+12f, -3.10495e+12f
8450 path.lineTo(SkBits2Float(0xd4c75ffe), SkBits2Float(0xd46f215d));  // -6.85047e+12f, -4.10823e+12f
8451 path.lineTo(SkBits2Float(0xd4b46028), SkBits2Float(0xd41e572a));  // -6.19766e+12f, -2.72027e+12f
8452 path.close();
8453 
8454     SkPath path1(path);
8455     path.reset();
8456     path.setFillType((SkPath::FillType) 0);
8457 path.setFillType(SkPath::kWinding_FillType);
8458 path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000));  // 0, 0
8459 path.quadTo(SkBits2Float(0x00000000), SkBits2Float(0xa5a50000), SkBits2Float(0xd4d4a5a5), SkBits2Float(0xd4d4d4d4));  // 0, -2.86229e-16f, -7.3065e+12f, -7.31283e+12f
8460 path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4cfd4d4), SkBits2Float(0xd4d41dd4));  // -7.31283e+12f, -7.31283e+12f, -7.14103e+12f, -7.28827e+12f
8461 path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d432d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4a5a5d4));  // -7.31283e+12f, -7.29109e+12f, -7.31283e+12f, -5.69161e+12f
8462 path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0x00000000));  // -7.31283e+12f, -7.31283e+12f, -7.31283e+12f, 0
8463 path.moveTo(SkBits2Float(0xa5a5a500), SkBits2Float(0xd4d4d4a5));  // -2.87347e-16f, -7.31281e+12f
8464 path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0x2ad4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4cfd4d4));  // -7.31283e+12f, 3.78064e-13f, -7.31283e+12f, -7.14103e+12f
8465 path.quadTo(SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4));  // -7.31283e+12f, -7.31283e+12f, -7.31283e+12f, -7.31283e+12f
8466 path.quadTo(SkBits2Float(0xd4d40000), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4), SkBits2Float(0xd4d4d4d4));  // -7.28426e+12f, -7.31283e+12f, -7.31283e+12f, -7.31283e+12f
8467 
8468     SkPath path2(path);
8469     testPathOpFuzz(reporter, path1, path2, (SkPathOp) 2, filename);
8470 }
8471 
fuzzhang_2(skiatest::Reporter * reporter,const char * filename)8472 static void fuzzhang_2(skiatest::Reporter* reporter, const char* filename) {
8473     SkPath path;
8474     path.setFillType((SkPath::FillType) 0);
8475 path.setFillType(SkPath::kWinding_FillType);
8476 path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8477 path.quadTo(SkBits2Float(0xe0e02972), SkBits2Float(0xe0e060e0), SkBits2Float(0x728e4603), SkBits2Float(0x72727272));  // -1.29221e+20f, -1.29345e+20f, 5.63603e+30f, 4.80216e+30f
8478 path.lineTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8479 path.close();
8480 path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8481 path.quadTo(SkBits2Float(0x68720052), SkBits2Float(0x52527372), SkBits2Float(0x00527252), SkBits2Float(0x728e4601));  // 4.57127e+24f, 2.2597e+11f, 7.57152e-39f, 5.63603e+30f
8482 path.quadTo(SkBits2Float(0x52ec7272), SkBits2Float(0x6265527f), SkBits2Float(0x8e460152), SkBits2Float(0x72ff8072));  // 5.07766e+11f, 1.05756e+21f, -2.4406e-30f, 1.01215e+31f
8483 path.lineTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8484 path.close();
8485 path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8486 path.lineTo(SkBits2Float(0x52626552), SkBits2Float(0x72727272));  // 2.43091e+11f, 4.80216e+30f
8487 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x62727272), SkBits2Float(0x39393939), SkBits2Float(0x728bc739));  // 4.80216e+30f, 1.11809e+21f, 0.000176643f, 5.53719e+30f
8488 path.cubicTo(SkBits2Float(0x72728092), SkBits2Float(0x72727260), SkBits2Float(0x4d727272), SkBits2Float(0x5252522a), SkBits2Float(0x72735252), SkBits2Float(0x72707272));  // 4.80325e+30f, 4.80215e+30f, 2.54224e+08f, 2.2583e+11f, 4.81948e+30f, 4.76254e+30f
8489 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x56727272), SkBits2Float(0x72720152), SkBits2Float(0x72727270));  // 4.80216e+30f, 6.66433e+13f, 4.79341e+30f, 4.80216e+30f
8490 path.quadTo(SkBits2Float(0x52526172), SkBits2Float(0x8e460300), SkBits2Float(0x72727272), SkBits2Float(0x52525272));  // 2.25894e+11f, -2.44068e-30f, 4.80216e+30f, 2.25832e+11f
8491 path.conicTo(SkBits2Float(0xb5727272), SkBits2Float(0x7f2b727f), SkBits2Float(0x607272ff), SkBits2Float(0x72727276), SkBits2Float(0x2a527272));  // -9.03186e-07f, 2.27892e+38f, 6.98812e+19f, 4.80216e+30f, 1.86915e-13f
8492 path.lineTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8493 path.close();
8494 path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8495 path.lineTo(SkBits2Float(0x72727272), SkBits2Float(0x52525f72));  // 4.80216e+30f, 2.25886e+11f
8496 path.lineTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8497 path.close();
8498 path.moveTo(SkBits2Float(0x5568392a), SkBits2Float(0x72837268));  // 1.59583e+13f, 5.20715e+30f
8499 path.quadTo(SkBits2Float(0x52727272), SkBits2Float(0x64655252), SkBits2Float(0x72c1c152), SkBits2Float(0x72727272));  // 2.60326e+11f, 1.69209e+22f, 7.67543e+30f, 4.80216e+30f
8500 
8501     SkPath path1(path);
8502     path.reset();
8503     path.setFillType((SkPath::FillType) 0);
8504 path.setFillType(SkPath::kWinding_FillType);
8505 
8506     SkPath path2(path);
8507     testPathOpFail(reporter, path1, path2, (SkPathOp) 1, filename);
8508 }
8509 
fuzzhang_3(skiatest::Reporter * reporter,const char * filename)8510 static void fuzzhang_3(skiatest::Reporter* reporter, const char* filename) {
8511     SkPath path;
8512     path.setFillType((SkPath::FillType) 0);
8513 path.setFillType(SkPath::kWinding_FillType);
8514 
8515     SkPath path1(path);
8516     path.reset();
8517     path.setFillType((SkPath::FillType) 0);
8518 path.setFillType(SkPath::kWinding_FillType);
8519 path.moveTo(SkBits2Float(0x46090052), SkBits2Float(0x7270726c));  // 8768.08f, 4.76254e+30f
8520 path.moveTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060));  // -5.63338e+19f, 1.32171e-36f
8521 path.close();
8522 path.moveTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060));  // -5.63338e+19f, 1.32171e-36f
8523 path.lineTo(SkBits2Float(0x77727272), SkBits2Float(0x52520072));  // 4.91741e+33f, 2.25488e+11f
8524 path.lineTo(SkBits2Float(0x46090052), SkBits2Float(0x727272ce));  // 8768.08f, 4.80219e+30f
8525 path.quadTo(SkBits2Float(0x725252ec), SkBits2Float(0x72727272), SkBits2Float(0x72727272), SkBits2Float(0x39393962));  // 4.16589e+30f, 4.80216e+30f, 4.80216e+30f, 0.000176644f
8526 path.lineTo(SkBits2Float(0x6c460900), SkBits2Float(0x72727072));  // 9.57639e+26f, 4.802e+30f
8527 path.cubicTo(SkBits2Float(0xe0e060e0), SkBits2Float(0x72943603), SkBits2Float(0x72777272), SkBits2Float(0x5c525200), SkBits2Float(0x46090052), SkBits2Float(0x727272ce));  // -1.29345e+20f, 5.87124e+30f, 4.90119e+30f, 2.368e+17f, 8768.08f, 4.80219e+30f
8528 path.quadTo(SkBits2Float(0x725252ec), SkBits2Float(0x72727272), SkBits2Float(0x72727272), SkBits2Float(0x39393962));  // 4.16589e+30f, 4.80216e+30f, 4.80216e+30f, 0.000176644f
8529 path.lineTo(SkBits2Float(0x0052ca00), SkBits2Float(0x728e4603));  // 7.60297e-39f, 5.63603e+30f
8530 path.quadTo(SkBits2Float(0xff727272), SkBits2Float(0x52527272), SkBits2Float(0x39392072), SkBits2Float(0xe0393939));  // -3.22267e+38f, 2.25966e+11f, 0.000176551f, -5.3387e+19f
8531 path.lineTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060));  // -5.63338e+19f, 1.32171e-36f
8532 path.close();
8533 path.moveTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060));  // -5.63338e+19f, 1.32171e-36f
8534 path.cubicTo(SkBits2Float(0xdada7272), SkBits2Float(0x2dff7272), SkBits2Float(0x767272f0), SkBits2Float(0x72727272), SkBits2Float(0x21727f72), SkBits2Float(0x0b210929));  // -3.07437e+16f, 2.9041e-11f, 1.22936e+33f, 4.80216e+30f, 8.21615e-19f, 3.10144e-32f
8535 path.cubicTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0x72a5d6d6), SkBits2Float(0x72553872), SkBits2Float(0xdada7072), SkBits2Float(0x5252525a), SkBits2Float(0x72727252));  // -1.18109e+14f, 6.56957e+30f, 4.22327e+30f, -3.07426e+16f, 2.25831e+11f, 4.80215e+30f
8536 path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0xdada0072), SkBits2Float(0x52524b5a), SkBits2Float(0x72528000));  // 4.79991e+30f, -3.0681e+16f, 2.25802e+11f, 4.16938e+30f
8537 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0xca005252), SkBits2Float(0x46030052), SkBits2Float(0x7272728e));  // 4.80216e+30f, -2.10242e+06f, 8384.08f, 4.80217e+30f
8538 path.quadTo(SkBits2Float(0x7272ff72), SkBits2Float(0x20725252), SkBits2Float(0x39393939), SkBits2Float(0xd76ee039));  // 4.81307e+30f, 2.05254e-19f, 0.000176643f, -2.62647e+14f
8539 path.cubicTo(SkBits2Float(0xdada7272), SkBits2Float(0x2dff7272), SkBits2Float(0x767272f0), SkBits2Float(0x72727272), SkBits2Float(0x21727f72), SkBits2Float(0x0b210929));  // -3.07437e+16f, 2.9041e-11f, 1.22936e+33f, 4.80216e+30f, 8.21615e-19f, 3.10144e-32f
8540 path.cubicTo(SkBits2Float(0xd6d6d6d6), SkBits2Float(0x72a5d6d6), SkBits2Float(0x72553872), SkBits2Float(0xdada7072), SkBits2Float(0x5252525a), SkBits2Float(0x72727252));  // -1.18109e+14f, 6.56957e+30f, 4.22327e+30f, -3.07426e+16f, 2.25831e+11f, 4.80215e+30f
8541 path.quadTo(SkBits2Float(0x72725572), SkBits2Float(0xdada0072), SkBits2Float(0x52524b5a), SkBits2Float(0x72528000));  // 4.79991e+30f, -3.0681e+16f, 2.25802e+11f, 4.16938e+30f
8542 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.25831e+11f, 3.36289e-15f, 4.80216e+30f
8543 path.quadTo(SkBits2Float(0x72667254), SkBits2Float(0x00000040), SkBits2Float(0x00a70155), SkBits2Float(0x726800ff));  // 4.56447e+30f, 8.96831e-44f, 1.5337e-38f, 4.59531e+30f
8544 path.quadTo(SkBits2Float(0x7b727272), SkBits2Float(0xad000c52), SkBits2Float(0x1c10adad), SkBits2Float(0x72728d8a));  // 1.25886e+36f, -7.27869e-12f, 4.78701e-22f, 4.80425e+30f
8545 path.quadTo(SkBits2Float(0xff056546), SkBits2Float(0x727205ff), SkBits2Float(0x524b5aff), SkBits2Float(0x64005252));  // -1.77313e+38f, 4.79377e+30f, 2.18351e+11f, 9.46846e+21f
8546 path.quadTo(SkBits2Float(0x72524872), SkBits2Float(0xdada7272), SkBits2Float(0x5252525a), SkBits2Float(0x72727252));  // 4.16508e+30f, -3.07437e+16f, 2.25831e+11f, 4.80215e+30f
8547 path.quadTo(SkBits2Float(0x72724172), SkBits2Float(0xdad10072), SkBits2Float(0x52524b5a), SkBits2Float(0x725b8000));  // 4.79837e+30f, -2.94144e+16f, 2.25802e+11f, 4.34765e+30f
8548 path.quadTo(SkBits2Float(0x72727272), SkBits2Float(0x52525252), SkBits2Float(0x27725252), SkBits2Float(0x72727272));  // 4.80216e+30f, 2.25831e+11f, 3.36289e-15f, 4.80216e+30f
8549 path.quadTo(SkBits2Float(0x72728372), SkBits2Float(0x00000040), SkBits2Float(0xf6a70147), SkBits2Float(0xc2c2c256));  // 4.80347e+30f, 8.96831e-44f, -1.69363e+33f, -97.3796f
8550 path.lineTo(SkBits2Float(0xe0437272), SkBits2Float(0x03e0e060));  // -5.63338e+19f, 1.32171e-36f
8551 path.close();
8552 path.moveTo(SkBits2Float(0x7a787a7a), SkBits2Float(0x7a3a7a7a));  // 3.22543e+35f, 2.42063e+35f
8553 path.lineTo(SkBits2Float(0x8f4603e0), SkBits2Float(0x72727272));  // -9.7629e-30f, 4.80216e+30f
8554 path.quadTo(SkBits2Float(0x00807272), SkBits2Float(0x46090052), SkBits2Float(0x7270726c), SkBits2Float(0x60e04372));  // 1.1796e-38f, 8768.08f, 4.76254e+30f, 1.29279e+20f
8555 path.moveTo(SkBits2Float(0x943603e0), SkBits2Float(0x77727272));  // -9.18942e-27f, 4.91741e+33f
8556 path.quadTo(SkBits2Float(0x5c525200), SkBits2Float(0x46090052), SkBits2Float(0x727272ce), SkBits2Float(0x5252ec72));  // 2.368e+17f, 8768.08f, 4.80219e+30f, 2.26478e+11f
8557 
8558     SkPath path2(path);
8559     testPathOpFail(reporter, path1, path2, (SkPathOp) 3, filename);
8560 }
8561 
8562 
8563 static struct TestDesc failTests[] = {
8564     TEST(fuzzhang_3),
8565     TEST(fuzzhang_2),
8566     TEST(release_13),
8567     TEST(fuzzhang_1),
8568     TEST(fuzz763_57),
8569     TEST(fuzz763_56),
8570     TEST(fuzz763_55),
8571     TEST(fuzz763_54),
8572     TEST(fuzz763_53),
8573     TEST(fuzz763_52),
8574     TEST(fuzz763_51),
8575     TEST(fuzz763_50),
8576     TEST(fuzz763_49),
8577     TEST(fuzz763_48),
8578     TEST(fuzz763_47),
8579     TEST(fuzz763_46),
8580     TEST(fuzz763_45),
8581     TEST(fuzz763_44),
8582     TEST(fuzz763_43),
8583     TEST(fuzz763_42),
8584     TEST(fuzz763_41),
8585     TEST(fuzz763_40),
8586     TEST(fuzz763_39),
8587     TEST(fuzz763_38),
8588     TEST(fuzz763_37),
8589     TEST(fuzz763_36),
8590     TEST(fuzz763_35),
8591     TEST(fuzz763_34),
8592     TEST(fuzz763_33),
8593     TEST(fuzz763_32),
8594     TEST(fuzz763_31),
8595     TEST(fuzz763_30),
8596     TEST(fuzz763_29),
8597     TEST(fuzz763_28),
8598     TEST(fuzz763_27),
8599     TEST(fuzz763_26),
8600     TEST(fuzz763_25),
8601     TEST(fuzz763_24),
8602     TEST(fuzz763_23),
8603     TEST(fuzz763_22),
8604     TEST(fuzz763_21),
8605     TEST(fuzz763_20),
8606     TEST(fuzz763_19),
8607     TEST(fuzz763_18),
8608     TEST(fuzz763_17),
8609     TEST(fuzz763_16),
8610     TEST(fuzz763_15),
8611     TEST(fuzz763_14),
8612     TEST(fuzz763_13),
8613     TEST(fuzz763_12),
8614     TEST(fuzz763_11),
8615     TEST(fuzz763_10),
8616     TEST(kfuzz2),
8617     TEST(fuzz763_7),
8618     TEST(fuzz763_6),
8619     TEST(fuzz763_2c),
8620     TEST(fuzz763_2b),
8621     TEST(fuzz763_2a),
8622     TEST(fuzz763_5a),
8623     TEST(fuzz763_3a),
8624     TEST(fuzz763_1a),
8625     TEST(fuzz763_1b),
8626     TEST(fuzz763_1c),
8627     TEST(fuzz763_2),
8628     TEST(fuzz763_5),
8629     TEST(fuzz763_3),
8630     TEST(fuzz763_4),
8631     TEST(fuzz763_9),
8632     TEST(fuzz1450_1),
8633     TEST(fuzz1450_0),
8634     TEST(bug597926_0),
8635     TEST(fuzz535151),
8636     TEST(fuzz753_91),
8637     TEST(fuzz714),
8638     TEST(fuzz487a),
8639     TEST(fuzz433),
8640     TEST(fuzz1),
8641     TEST(fuzz487b),
8642     TEST(fuzz433b),
8643     TEST(bufferOverflow),
8644 };
8645 
8646 static const size_t failTestCount = SK_ARRAY_COUNT(failTests);
8647 
DEF_TEST(PathOpsFailOp,reporter)8648 DEF_TEST(PathOpsFailOp, reporter) {
8649 #if DEBUG_SHOW_TEST_NAME
8650     strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
8651 #endif
8652     RunTestSet(reporter, failTests, failTestCount, nullptr, nullptr, nullptr, false);
8653 }
8654 
8655 static struct TestDesc repTests[] = {
8656     TEST(fuzz763_5a),
8657 };
8658 
DEF_TEST(PathOpsRepOp,reporter)8659 DEF_TEST(PathOpsRepOp, reporter) {
8660   for (int index = 0; index < 1; ++index)
8661     RunTestSet(reporter, repTests, SK_ARRAY_COUNT(repTests), nullptr, nullptr, nullptr, false);
8662 }
8663