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 "EdgeWalker_Test.h" 8 #include "Intersection_Tests.h" 9 #include "SkBitmap.h" 10 11 static SkBitmap bitmap; 12 13 static void testSimplifyTriangle() { 14 SkPath path, out; 15 path.setFillType(SkPath::kWinding_FillType); 16 path.moveTo(10,10); // triangle |\ . 17 path.lineTo(10,30); // |_\ . 18 path.lineTo(20,30); 19 path.close(); 20 path.moveTo(20,10); // triangle /| 21 path.lineTo(10,30); // /_| 22 path.lineTo(20,30); 23 path.close(); 24 testSimplify(path, true, out, bitmap); // expect |\/| 25 // |__| 26 } 27 28 static void testSimplifyTriangle3() { 29 SkPath path, out; 30 path.moveTo(0, 0); 31 path.lineTo(1, 0); 32 path.lineTo(0, 1); 33 path.close(); 34 path.moveTo(0, 0); 35 path.lineTo(1, 0); 36 path.lineTo(3, 1); 37 path.close(); 38 testSimplify(path, true, out, bitmap); 39 } 40 41 static void testSimplifyTriangle4() { 42 SkPath path, out; 43 path.moveTo(0, 0); 44 path.lineTo(1, 0); 45 path.lineTo(0, 1); 46 path.close(); 47 path.moveTo(0, 0); 48 path.lineTo(1, 0); 49 path.lineTo(2, 1); 50 path.close(); 51 testSimplify(path, true, out, bitmap); 52 } 53 54 static void testSimplifyTriangle5() { 55 SkPath path, out; 56 path.moveTo(0, 0); 57 path.lineTo(1, 0); 58 path.lineTo(0, 1); 59 path.close(); 60 path.moveTo(0, 0); 61 path.lineTo(1, 1); 62 path.lineTo(2, 1); 63 path.close(); 64 testSimplify(path, true, out, bitmap); 65 } 66 67 static void testSimplifyTriangle6() { 68 SkPath path, out; 69 path.moveTo(0, 0); 70 path.lineTo(1, 0); 71 path.lineTo(0, 1); 72 path.lineTo(0, 0); 73 path.close(); 74 path.moveTo(0, 0); 75 path.lineTo(0, 1); 76 path.lineTo(3, 1); 77 path.lineTo(0, 0); 78 path.close(); 79 testSimplify(path, true, out, bitmap); 80 } 81 82 static void testSimplifyTriangle7() { 83 SkPath path, out; 84 path.moveTo(0, 0); 85 path.lineTo(1, 0); 86 path.lineTo(0, 1); 87 path.lineTo(0, 0); 88 path.close(); 89 path.moveTo(0, 0); 90 path.lineTo(1, 1); 91 path.lineTo(0, 2); 92 path.lineTo(0, 0); 93 path.close(); 94 testSimplify(path, true, out, bitmap); 95 } 96 97 static void testSimplifyTriangle8() { 98 SkPath path, out; 99 path.moveTo(0, 0); 100 path.lineTo(1, 0); 101 path.lineTo(0, 1); 102 path.lineTo(0, 0); 103 path.close(); 104 path.moveTo(0, 1); 105 path.lineTo(1, 2); 106 path.lineTo(1, 3); 107 path.lineTo(0, 1); 108 path.close(); 109 testSimplify(path, true, out, bitmap); 110 } 111 112 static void testSimplifyTriangle9() { 113 SkPath path, out; 114 path.moveTo(0, 0); 115 path.lineTo(1, 0); 116 path.lineTo(1, 1); 117 path.lineTo(0, 0); 118 path.close(); 119 path.moveTo(0, 0); 120 path.lineTo(1, 1); 121 path.lineTo(2, 1); 122 path.lineTo(0, 0); 123 path.close(); 124 testSimplify(path, true, out, bitmap); 125 } 126 127 static void testSimplifyTriangle10() { 128 SkPath path, out; 129 path.moveTo(0, 0); 130 path.lineTo(1, 0); 131 path.lineTo(1, 1); 132 path.lineTo(0, 0); 133 path.close(); 134 path.moveTo(0, 0); 135 path.lineTo(2, 0); 136 path.lineTo(0, 1); 137 path.lineTo(0, 0); 138 path.close(); 139 testSimplify(path, true, out, bitmap); 140 } 141 142 static void testSimplifyTriangle11() { 143 SkPath path, out; 144 path.moveTo(0, 0); 145 path.lineTo(1, 0); 146 path.lineTo(0, 2); 147 path.lineTo(0, 0); 148 path.close(); 149 path.moveTo(0, 0); 150 path.lineTo(2, 1); 151 path.lineTo(2, 2); 152 path.lineTo(0, 0); 153 path.close(); 154 testSimplify(path, true, out, bitmap); 155 } 156 157 static void testSimplifyTriangle12() { 158 SkPath path, out; 159 path.moveTo(0, 0); 160 path.lineTo(1, 0); 161 path.lineTo(1, 2); 162 path.lineTo(0, 0); 163 path.close(); 164 path.moveTo(2, 0); 165 path.lineTo(0, 3); 166 path.lineTo(1, 1); 167 path.lineTo(2, 0); 168 path.close(); 169 testSimplify(path, true, out, bitmap); 170 } 171 172 static void testSimplifyTriangle13() { 173 SkPath path, out; 174 path.moveTo(0, 0); 175 path.lineTo(1, 0); 176 path.lineTo(0, 3); 177 path.lineTo(0, 0); 178 path.close(); 179 path.moveTo(3, 0); 180 path.lineTo(0, 3); 181 path.lineTo(1, 1); 182 path.lineTo(3, 0); 183 path.close(); 184 testSimplify(path, true, out, bitmap); 185 } 186 187 static void testSimplifyTriangle14() { 188 SkPath path, out; 189 path.moveTo(0, 0); 190 path.lineTo(1, 0); 191 path.lineTo(0, 1); 192 path.lineTo(0, 0); 193 path.close(); 194 path.moveTo(0, 0); 195 path.lineTo(1, 0); 196 path.lineTo(0, 1); 197 path.lineTo(0, 0); 198 path.close(); 199 testSimplify(path, true, out, bitmap); 200 } 201 202 static void testSimplifyTriangle15() { 203 SkPath path, out; 204 path.setFillType(SkPath::kEvenOdd_FillType); 205 path.moveTo(0, 0); 206 path.lineTo(0, 1); 207 path.lineTo(1, 2); 208 path.close(); 209 path.moveTo(0, 0); 210 path.lineTo(0, 1); 211 path.lineTo(2, 2); 212 path.close(); 213 testSimplify(path, true, out, bitmap); 214 } 215 216 static void testSimplifyTriangle16() { 217 SkPath path, out; 218 path.moveTo(0, 0); 219 path.lineTo(0, 1); 220 path.lineTo(1, 2); 221 path.close(); 222 path.moveTo(0, 0); 223 path.lineTo(0, 1); 224 path.lineTo(1, 3); 225 path.close(); 226 testSimplify(path, true, out, bitmap); 227 } 228 229 static void testSimplifyTriangle17() { 230 SkPath path, out; 231 path.moveTo(0, 0); 232 path.lineTo(0, 1); 233 path.lineTo(1, 2); 234 path.close(); 235 path.moveTo(0, 0); 236 path.lineTo(1, 3); 237 path.lineTo(0, 1); 238 path.close(); 239 testSimplify(path, true, out, bitmap); 240 } 241 242 static void testSimplifyTriangle18() { 243 SkPath path, out; 244 path.moveTo(0, 0); 245 path.lineTo(0, 1); 246 path.lineTo(1, 2); 247 path.close(); 248 path.moveTo(1, 0); 249 path.lineTo(0, 1); 250 path.lineTo(0, 3); 251 path.close(); 252 testSimplify(path, true, out, bitmap); 253 } 254 255 static void testSimplifyTriangle19() { 256 SkPath path, out; 257 path.setFillType(SkPath::kEvenOdd_FillType); 258 path.moveTo(0, 0); 259 path.lineTo(0, 1); 260 path.lineTo(3, 2); 261 path.close(); 262 path.moveTo(0, 0); 263 path.lineTo(1, 1); 264 path.lineTo(2, 1); 265 path.close(); 266 testSimplify(path, true, out, bitmap); 267 } 268 269 static void testSimplifyTriangle20() { 270 SkPath path, out; 271 path.moveTo(0, 0); 272 path.lineTo(2, 1); 273 path.lineTo(1, 3); 274 path.close(); 275 path.moveTo(2, 0); 276 path.lineTo(3, 2); 277 path.lineTo(0, 3); 278 path.close(); 279 testSimplify(path, true, out, bitmap); 280 } 281 282 static void testSimplifyTriangle21() { 283 SkPath path, out; 284 path.moveTo(0, 0); 285 path.lineTo(1, 0); 286 path.lineTo(1, 2); 287 path.close(); 288 path.moveTo(2, 0); 289 path.lineTo(2, 1); 290 path.lineTo(0, 3); 291 path.close(); 292 testSimplify(path, true, out, bitmap); 293 } 294 295 static void testSimplifyDegenerateTriangle1() { 296 SkPath path, out; 297 path.moveTo(0, 0); 298 path.lineTo(0, 0); 299 path.lineTo(0, 0); 300 path.close(); 301 path.moveTo(0, 0); 302 path.lineTo(0, 0); 303 path.lineTo(0, 0); 304 path.close(); 305 testSimplify(path, true, out, bitmap); 306 } 307 308 static void testSimplifyDegenerateTriangle2() { 309 SkPath path, out; 310 path.moveTo(0, 0); 311 path.lineTo(1, 1); 312 path.lineTo(2, 2); 313 path.close(); 314 path.moveTo(1, 0); 315 path.lineTo(2, 2); 316 path.lineTo(3, 3); 317 path.close(); 318 testSimplify(path, true, out, bitmap); 319 } 320 321 static void testSimplifyWindingParallelogram() { 322 SkPath path, out; 323 path.setFillType(SkPath::kWinding_FillType); 324 path.moveTo(20,10); // parallelogram _ 325 path.lineTo(30,30); // \ \ . 326 path.lineTo(40,30); // \_\ . 327 path.lineTo(30,10); 328 path.close(); 329 path.moveTo(20,10); // parallelogram _ 330 path.lineTo(10,30); // / / 331 path.lineTo(20,30); // /_/ 332 path.lineTo(30,10); 333 path.close(); 334 testSimplify(path, true, out, bitmap); // expect _ 335 // / \ . 336 } // /___\ . 337 338 static void testSimplifyXorParallelogram() { 339 SkPath path, out; 340 path.setFillType(SkPath::kEvenOdd_FillType); 341 path.moveTo(20,10); // parallelogram _ 342 path.lineTo(30,30); // \ \ . 343 path.lineTo(40,30); // \_\ . 344 path.lineTo(30,10); 345 path.close(); 346 path.moveTo(20,10); // parallelogram _ 347 path.lineTo(10,30); // / / 348 path.lineTo(20,30); // /_/ 349 path.lineTo(30,10); 350 path.close(); 351 testSimplify(path, true, out, bitmap); // expect _ 352 } // \ / 353 354 static void testSimplifyTriangle2() { 355 SkPath path, out; 356 path.setFillType(SkPath::kWinding_FillType); 357 path.moveTo(10,10); // triangle |\ . 358 path.lineTo(10,30); // |_\ . 359 path.lineTo(20,30); 360 path.close(); 361 path.moveTo(10,10); // triangle _ 362 path.lineTo(20,10); // \ | 363 path.lineTo(20,30); // \| 364 path.close(); // _ 365 testSimplify(path, true, out, bitmap); // expect | | 366 } // |_| 367 368 #if 0 369 static void testPathTriangleRendering() { 370 SkPath one, two; 371 one.moveTo(0, 0); 372 one.lineTo(3, 3); 373 one.lineTo(0, 3); 374 one.lineTo(1, 2); 375 one.close(); 376 for (float x = .1f; x <= 2.9ff; x += .1f) { 377 SkDebugf("%s x=%g\n", __FUNCTION__, x); 378 two.moveTo(0, 0); 379 two.lineTo(x, x); 380 two.lineTo(3, 3); 381 two.lineTo(0, 3); 382 two.lineTo(1, 2); 383 two.close(); 384 comparePaths(one, two); 385 two.reset(); 386 } 387 } 388 #endif 389 390 static void simplify(const char* functionName, const SkPath& path, 391 bool fill, SkPath& out) { 392 if (false) SkDebugf("%s\n", functionName); 393 simplify(path, fill, out); 394 } 395 396 static void testSimplifySkinnyTriangle1() { 397 for (int x = 1; x < 255; ++x) { 398 SkPath path, out; 399 path.moveTo((x * 101) % 10, 0); 400 path.lineTo((x * 91) % 10, 1000); 401 path.lineTo((x * 71) % 10, 2000); 402 path.lineTo((x * 51) % 10, 3000); 403 path.close(); 404 path.moveTo((x * 101) % 20, 0); 405 path.lineTo((x * 91) % 20, 1000); 406 path.lineTo((x * 71) % 20, 2000); 407 path.lineTo((x * 51) % 20, 3000); 408 path.close(); 409 path.moveTo((x * 101) % 30, 0); 410 path.lineTo((x * 91) % 30, 1000); 411 path.lineTo((x * 71) % 30, 2000); 412 path.lineTo((x * 51) % 30, 3000); 413 path.close(); 414 simplify(path, true, out); 415 } 416 } 417 418 static void testSimplifySkinnyTriangle2() { 419 SkPath path, out; 420 #if 01 421 path.moveTo(591.091064f, 627.534851f); 422 path.lineTo(541.088135f, 560.707642f); 423 path.lineTo(491.085175f, 493.880310f); 424 path.lineTo(441.082214f, 427.053101f); 425 //path.lineTo(591.091064f, 627.534851f); 426 path.close(); 427 #endif 428 path.moveTo(317.093445f, 592.013306f); 429 path.lineTo(366.316162f, 542.986572f); 430 path.lineTo(416.051514f, 486.978577f); 431 path.lineTo(465.786865f, 430.970581f); 432 //path.lineTo(317.093445f, 592.013306f); 433 path.close(); 434 #if 0 435 path.moveTo(289.392517f, 517.138489f); 436 path.lineTo(249.886078f, 508.598022f); 437 path.lineTo(217.110916f, 450.916443f); 438 path.lineTo(196.621033f, 394.917633f); 439 //path.lineTo(289.392517f, 517.138489f); 440 path.close(); 441 #endif 442 simplify(__FUNCTION__, path, true, out); 443 } 444 445 static void testSimplifySkinnyTriangle3() { 446 SkPath path, out; 447 path.moveTo(591, 627.534851f); 448 path.lineTo(541, 560.707642f); 449 path.lineTo(491, 493.880310f); 450 path.lineTo(441, 427.053101f); 451 path.close(); 452 path.moveTo(317, 592.013306f); 453 path.lineTo(366, 542.986572f); 454 path.lineTo(416, 486.978577f); 455 path.lineTo(465, 430.970581f); 456 path.close(); 457 simplify(__FUNCTION__, path, true, out); 458 } 459 460 static void testSimplifySkinnyTriangle4() { 461 SkPath path, out; 462 path.moveTo(572.655212f, 614.959961f); 463 path.lineTo(524.618896f, 549.339600f); 464 path.lineTo(476.582581f, 483.719269f); 465 path.lineTo(428.546265f, 418.098938f); 466 path.lineTo(572.655212f, 614.959961f); 467 path.close(); 468 path.moveTo(312.166382f, 583.723083f); 469 path.lineTo(361.047791f, 529.824219f); 470 path.lineTo(409.929230f, 475.925354f); 471 path.lineTo(458.810669f, 422.026520f); 472 path.lineTo(312.166382f, 583.723083f); 473 path.close(); 474 path.moveTo(278.742737f, 508.065643f); 475 path.lineTo(241.475800f, 493.465118f); 476 path.lineTo(210.344177f, 437.315125f); 477 path.lineTo(197.019455f, 383.794556f); 478 path.lineTo(278.742737f, 508.065643f); 479 path.close(); 480 simplify(__FUNCTION__, path, true, out); 481 } 482 483 static void testSimplifySkinnyTriangle5() { 484 SkPath path, out; 485 path.moveTo(554.690613f, 602.286072f); 486 path.lineTo(508.590057f, 537.906250f); 487 path.lineTo(462.489441f, 473.526520f); 488 path.lineTo(416.388855f, 409.146729f); 489 path.lineTo(554.690613f, 602.286072f); 490 path.close(); 491 path.moveTo(307.216949f, 575.189270f); 492 path.lineTo(355.826965f, 516.804688f); 493 path.lineTo(403.815918f, 464.990753f); 494 path.lineTo(451.804871f, 413.176819f); 495 path.lineTo(307.216949f, 575.189270f); 496 path.close(); 497 path.moveTo(271.998901f, 521.301025f); 498 path.lineTo(234.619705f, 499.687683f); 499 path.lineTo(203.059692f, 441.332336f); 500 path.lineTo(195.994370f, 386.856506f); 501 path.lineTo(271.998901f, 521.301025f); 502 path.close(); 503 simplify(__FUNCTION__, path, true, out); 504 } 505 506 static void testSimplifySkinnyTriangle6() { 507 SkPath path, out; 508 path.moveTo(591.091064f, 627.534851f); 509 path.lineTo(541.088135f, 560.707642f); 510 path.lineTo(491.085175f, 493.880310f); 511 path.lineTo(441.082214f, 427.053101f); 512 path.lineTo(591.091064f, 627.534851f); 513 path.close(); 514 path.moveTo(317.093445f, 592.013306f); 515 path.lineTo(366.316162f, 542.986572f); 516 path.lineTo(416.051514f, 486.978577f); 517 path.lineTo(465.786865f, 430.970581f); 518 path.lineTo(317.093445f, 592.013306f); 519 path.close(); 520 path.moveTo(289.392517f, 517.138489f); 521 path.lineTo(249.886078f, 508.598022f); 522 path.lineTo(217.110916f, 450.916443f); 523 path.lineTo(196.621033f, 394.917633f); 524 path.lineTo(289.392517f, 517.138489f); 525 path.close(); 526 simplify(__FUNCTION__, path, true, out); 527 } 528 529 static void testSimplifyTriangle22() { 530 SkPath path, out; 531 path.moveTo(0, 0); 532 path.lineTo(1, 0); 533 path.lineTo(0, 2); 534 path.close(); 535 path.moveTo(1, 0); 536 path.lineTo(0, 2); 537 path.lineTo(0, 1); 538 path.close(); 539 testSimplify(path, true, out, bitmap); 540 } 541 542 static void testSimplifyTriangle23() { 543 SkPath path, out; 544 path.moveTo(0, 0); 545 path.lineTo(0, 0); 546 path.lineTo(0, 0); 547 path.close(); 548 path.moveTo(0, 0); 549 path.lineTo(0, 1); 550 path.lineTo(1, 2); 551 path.close(); 552 testSimplify(path, true, out, bitmap); 553 } 554 555 static void testSimplifyTriangle24() { 556 SkPath path, out; 557 path.moveTo(0, 0); 558 path.lineTo(0, 0); 559 path.lineTo(0, 1); 560 path.close(); 561 path.moveTo(0, 0); 562 path.lineTo(1, 0); 563 path.lineTo(0, 1); 564 path.close(); 565 testSimplify(path, true, out, bitmap); 566 } 567 568 static void testSimplifySkinnyTriangle7() { 569 SkPath path, out; 570 path.moveTo(487.502319f, 550.811279f); 571 path.lineTo(448.826050f, 491.720123f); 572 path.lineTo(410.149780f, 432.628967f); 573 path.lineTo(371.473572f, 373.537781f); 574 path.lineTo(487.502319f, 550.811279f); 575 path.close(); 576 path.moveTo(295.817108f, 532.655579f); 577 path.lineTo(342.896271f, 485.912292f); 578 path.lineTo(389.975433f, 439.169006f); 579 path.lineTo(437.054596f, 392.425781f); 580 path.lineTo(295.817108f, 532.655579f); 581 path.close(); 582 path.moveTo(239.726822f, 575.025269f); 583 path.lineTo(204.117569f, 521.429688f); 584 path.lineTo(171.275452f, 454.110382f); 585 path.lineTo(193.328583f, 397.859497f); 586 path.lineTo(239.726822f, 575.025269f); 587 path.close(); 588 simplify(__FUNCTION__, path, true, out); 589 } 590 591 static void testSimplifySkinnyTriangle8() { 592 SkPath path, out; 593 path.moveTo(441.943115f, 511.678040f); 594 path.lineTo(408.487549f, 456.880920f); 595 path.lineTo(375.031952f, 402.083801f); 596 path.lineTo(341.576385f, 347.286682f); 597 path.lineTo(441.943115f, 511.678040f); 598 path.close(); 599 path.moveTo(297.548492f, 557.246704f); 600 path.lineTo(350.768494f, 507.627014f); 601 path.lineTo(403.988525f, 458.007385f); 602 path.lineTo(457.208527f, 408.387695f); 603 path.lineTo(297.548492f, 557.246704f); 604 path.close(); 605 path.moveTo(209.857895f, 615.802979f); 606 path.lineTo(178.249481f, 534.230347f); 607 path.lineTo(144.905640f, 460.056824f); 608 path.lineTo(192.953125f, 404.972900f); 609 path.lineTo(209.857895f, 615.802979f); 610 path.close(); 611 simplify(__FUNCTION__, path, true, out); 612 } 613 614 static void testSimplifySkinnyTriangle9() { 615 SkPath path, out; 616 path.moveTo(439.867065f, 528.291931f); 617 path.lineTo(405.413025f, 469.107178f); 618 path.lineTo(370.958954f, 409.922363f); 619 path.lineTo(336.504883f, 350.737610f); 620 path.lineTo(439.867065f, 528.291931f); 621 path.close(); 622 path.moveTo(298.922455f, 573.251953f); 623 path.lineTo(356.360962f, 521.905090f); 624 path.lineTo(413.799438f, 470.558228f); 625 path.lineTo(471.237915f, 419.211365f); 626 path.lineTo(298.922455f, 573.251953f); 627 path.close(); 628 path.moveTo(187.200775f, 643.035156f); 629 path.lineTo(159.713165f, 540.993774f); 630 path.lineTo(126.257164f, 462.198517f); 631 path.lineTo(193.534012f, 409.266235f); 632 path.lineTo(187.200775f, 643.035156f); 633 path.close(); 634 path.close(); 635 simplify(__FUNCTION__, path, true, out); 636 } 637 638 static void testSimplifySkinnyTriangle10() { 639 SkPath path, out; 640 #if 0 641 path.moveTo(99.270325f, 239.365234f); 642 path.lineTo(105.967056f, 173.361206f); 643 path.lineTo(148.821381f, 141.309891f); 644 path.lineTo(159.101013f, 189.235138f); 645 path.lineTo(99.270325f, 239.365234f); 646 path.close(); 647 #endif 648 path.moveTo(213.673737f, 413.292938f); 649 path.lineTo(225.200134f, 343.616821f); 650 path.lineTo(236.726532f, 273.940704f); 651 path.lineTo(219.386414f, 231.373322f); 652 path.lineTo(213.673737f, 413.292938f); 653 path.close(); 654 path.moveTo(43.485352f, 308.984497f); 655 path.lineTo(122.610657f, 305.950134f); 656 path.lineTo(201.735962f, 302.915802f); 657 path.lineTo(280.861267f, 299.881470f); 658 path.lineTo(43.485352f, 308.984497f); 659 path.close(); 660 simplify(__FUNCTION__, path, true, out); 661 } 662 663 static void testSimplifySkinnyTriangle11() { 664 SkPath path, out; 665 path.moveTo(-177.878387f, 265.368988f); 666 path.lineTo(-254.415771f, 303.709961f); 667 path.lineTo(-317.465363f, 271.325562f); 668 path.lineTo(-374.520386f, 207.507660f); 669 path.lineTo(-177.878387f, 265.368988f); 670 path.close(); 671 path.moveTo(-63.582489f, -3.679123f); 672 path.lineTo(-134.496841f, 26.434566f); 673 path.lineTo(-205.411209f, 56.548256f); 674 path.lineTo(-276.325562f, 86.661942f); 675 path.lineTo(-63.582489f, -3.679123f); 676 path.close(); 677 path.moveTo(-57.078423f, 162.633453f); 678 path.lineTo(-95.963928f, 106.261139f); 679 path.lineTo(-134.849457f, 49.888824f); 680 path.lineTo(-173.734955f, -6.483480f); 681 path.lineTo(-57.078423f, 162.633453f); 682 path.close(); 683 simplify(__FUNCTION__, path, true, out); 684 } 685 686 static void testSimplifySkinnyTriangle12() { 687 SkPath path, out; 688 path.moveTo(98.666489f, -94.295059f); 689 path.lineTo(156.584320f, -61.939133f); 690 path.lineTo(174.672974f, -12.343765f); 691 path.lineTo(158.622345f, 52.028267f); 692 path.lineTo(98.666489f, -94.295059f); 693 path.close(); 694 path.moveTo(-133.225616f, -48.622055f); 695 path.lineTo(-73.855499f, -10.375397f); 696 path.lineTo(-14.485367f, 27.871277f); 697 path.lineTo(44.884750f, 66.117935f); 698 path.lineTo(-133.225616f, -48.622055f); 699 path.close(); 700 path.moveTo( 9.030045f, -163.413132f); 701 path.lineTo(-19.605331f, -89.588760f); 702 path.lineTo(-48.240707f, -15.764404f); 703 path.lineTo(-76.876053f, 58.059944f); 704 path.lineTo( 9.030045f, -163.413132f); 705 path.close(); 706 simplify(__FUNCTION__, path, true, out); 707 } 708 709 static void testSimplifySkinnyTriangle13() { 710 SkPath path, out; 711 path.moveTo(340.41568f, -170.97171f); 712 path.lineTo(418.846893f, -142.428329f); 713 path.lineTo(497.278107f, -113.884933f); 714 path.lineTo(449.18222f, -45.6723022f); 715 path.lineTo(340.41568f, -170.97171f); 716 path.close(); 717 path.moveTo(326.610535f, 34.0393639f); 718 path.lineTo(371.334595f, -14.9620667f); 719 path.lineTo(416.058624f, -63.9634857f); 720 path.lineTo(460.782654f, -112.96492f); 721 path.lineTo(326.610535f, 34.0393639f); 722 path.close(); 723 simplify(__FUNCTION__, path, true, out); 724 } 725 726 static void (*simplifyTests[])() = { 727 testSimplifySkinnyTriangle13, 728 testSimplifySkinnyTriangle12, 729 testSimplifySkinnyTriangle11, 730 testSimplifySkinnyTriangle10, 731 testSimplifySkinnyTriangle9, 732 testSimplifySkinnyTriangle8, 733 testSimplifySkinnyTriangle7, 734 testSimplifySkinnyTriangle6, 735 testSimplifySkinnyTriangle5, 736 testSimplifySkinnyTriangle4, 737 testSimplifySkinnyTriangle3, 738 testSimplifySkinnyTriangle2, 739 testSimplifySkinnyTriangle1, 740 testSimplifyTriangle24, 741 testSimplifyTriangle23, 742 testSimplifyTriangle22, 743 testSimplifyDegenerateTriangle2, 744 testSimplifyDegenerateTriangle1, 745 testSimplifyTriangle21, 746 testSimplifyTriangle20, 747 testSimplifyTriangle19, 748 testSimplifyTriangle18, 749 testSimplifyTriangle17, 750 testSimplifyTriangle16, 751 testSimplifyTriangle15, 752 testSimplifyTriangle14, 753 testSimplifyTriangle13, 754 testSimplifyTriangle12, 755 testSimplifyTriangle11, 756 testSimplifyTriangle10, 757 testSimplifyTriangle7, 758 testSimplifyTriangle9, 759 testSimplifyTriangle8, 760 testSimplifyTriangle6, 761 testSimplifyTriangle5, 762 testSimplifyTriangle4, 763 testSimplifyTriangle3, 764 testSimplifyTriangle, 765 testSimplifyTriangle2, 766 testSimplifyWindingParallelogram, 767 testSimplifyXorParallelogram, 768 // testPathTriangleRendering, 769 }; 770 771 static size_t simplifyTestsCount = sizeof(simplifyTests) / sizeof(simplifyTests[0]); 772 773 static void (*firstTest)() = testSimplifySkinnyTriangle12; 774 775 void SimplifyPolygonPaths_Test() { 776 size_t index = 0; 777 if (firstTest) { 778 while (index < simplifyTestsCount && simplifyTests[index] != firstTest) { 779 ++index; 780 } 781 } 782 bool firstTestComplete = false; 783 for ( ; index < simplifyTestsCount; ++index) { 784 (*simplifyTests[index])(); 785 if (simplifyTests[index] == testSimplifySkinnyTriangle2) { 786 if (false) SkDebugf("%s last fast skinny test\n", __FUNCTION__); 787 } 788 firstTestComplete = true; 789 } 790 } 791