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: 12 PathTest_Private(SkPath* path) 13 : fPath(path) {} 14 15 void setPt(int index, SkScalar x, SkScalar y) { 16 fPath->setPt(index, x, y); 17 } 18 19 SkPath* fPath; 20 }; 21 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 } 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 */ 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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