SimplifyNew_Test.cpp revision 03f970652e07c6832cae41fa374cb68ca80d472c
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 8#include "EdgeWalker_Test.h" 9#include "Intersection_Tests.h" 10#include "ShapeOps.h" 11 12#define TEST(name) { name, #name } 13 14static void testLine1() { 15 SkPath path; 16 path.moveTo(2,0); 17 path.lineTo(1,1); 18 path.lineTo(0,0); 19 path.close(); 20 testSimplifyx(path); 21} 22 23static void addInnerCWTriangle(SkPath& path) { 24 path.moveTo(3,0); 25 path.lineTo(4,1); 26 path.lineTo(2,1); 27 path.close(); 28} 29 30static void addInnerCCWTriangle(SkPath& path) { 31 path.moveTo(3,0); 32 path.lineTo(2,1); 33 path.lineTo(4,1); 34 path.close(); 35} 36 37static void addOuterCWTriangle(SkPath& path) { 38 path.moveTo(3,0); 39 path.lineTo(6,2); 40 path.lineTo(0,2); 41 path.close(); 42} 43 44static void addOuterCCWTriangle(SkPath& path) { 45 path.moveTo(3,0); 46 path.lineTo(0,2); 47 path.lineTo(6,2); 48 path.close(); 49} 50 51static void testLine2() { 52 SkPath path; 53 addInnerCWTriangle(path); 54 addOuterCWTriangle(path); 55 testSimplifyx(path); 56} 57 58static void testLine3() { 59 SkPath path; 60 addInnerCCWTriangle(path); 61 addOuterCWTriangle(path); 62 testSimplifyx(path); 63} 64 65static void testLine3a() { 66 SkPath path; 67 addInnerCWTriangle(path); 68 addOuterCCWTriangle(path); 69 testSimplifyx(path); 70} 71 72static void testLine3b() { 73 SkPath path; 74 addInnerCCWTriangle(path); 75 addOuterCCWTriangle(path); 76 testSimplifyx(path); 77} 78 79static void testLine4() { 80 SkPath path; 81 addOuterCCWTriangle(path); 82 addOuterCWTriangle(path); 83 testSimplifyx(path); 84} 85 86static void testLine5() { 87 SkPath path; 88 addOuterCWTriangle(path); 89 addOuterCWTriangle(path); 90 testSimplifyx(path); 91} 92 93static void testLine6() { 94 SkPath path; 95 path.moveTo(0,0); 96 path.lineTo(4,0); 97 path.lineTo(2,2); 98 path.close(); 99 path.moveTo(2,0); 100 path.lineTo(6,0); 101 path.lineTo(4,2); 102 path.close(); 103 testSimplifyx(path); 104} 105 106static void testLine7() { 107 SkPath path; 108 path.moveTo(0,0); 109 path.lineTo(4,0); 110 path.lineTo(2,2); 111 path.close(); 112 path.moveTo(6,0); 113 path.lineTo(2,0); 114 path.lineTo(4,2); 115 path.close(); 116 testSimplifyx(path); 117} 118 119static void testLine7a() { 120 SkPath path; 121 path.moveTo(0,0); 122 path.lineTo(4,0); 123 path.lineTo(2,2); 124 path.close(); 125 testSimplifyx(path); 126} 127 128static void testLine7b() { 129 SkPath path; 130 path.moveTo(0,0); 131 path.lineTo(4,0); 132 path.close(); 133 path.moveTo(6,0); 134 path.lineTo(2,0); 135 path.lineTo(4,2); 136 path.close(); 137 testSimplifyx(path); 138} 139 140static void testLine8() { 141 SkPath path; 142 path.moveTo(0,4); 143 path.lineTo(4,4); 144 path.lineTo(2,2); 145 path.close(); 146 path.moveTo(2,4); 147 path.lineTo(6,4); 148 path.lineTo(4,2); 149 path.close(); 150 testSimplifyx(path); 151} 152 153static void testLine9() { 154 SkPath path; 155 path.moveTo(0,4); 156 path.lineTo(4,4); 157 path.lineTo(2,2); 158 path.close(); 159 path.moveTo(6,4); 160 path.lineTo(2,4); 161 path.lineTo(4,2); 162 path.close(); 163 testSimplifyx(path); 164} 165 166static void testLine10() { 167 SkPath path; 168 path.moveTo(0,4); 169 path.lineTo(4,4); 170 path.lineTo(2,2); 171 path.close(); 172 path.moveTo(2,1); 173 path.lineTo(3,4); 174 path.lineTo(6,1); 175 path.close(); 176 testSimplifyx(path); 177} 178 179static void testLine10a() { 180 SkPath path; 181 path.moveTo(0,4); 182 path.lineTo(8,4); 183 path.lineTo(4,0); 184 path.close(); 185 path.moveTo(2,2); 186 path.lineTo(3,3); 187 path.lineTo(4,2); 188 path.close(); 189 testSimplifyx(path); 190} 191 192static void addCWContainer(SkPath& path) { 193 path.moveTo(6,4); 194 path.lineTo(0,4); 195 path.lineTo(3,1); 196 path.close(); 197} 198 199static void addCCWContainer(SkPath& path) { 200 path.moveTo(0,4); 201 path.lineTo(6,4); 202 path.lineTo(3,1); 203 path.close(); 204} 205 206static void addCWContents(SkPath& path) { 207 path.moveTo(2,3); 208 path.lineTo(3,2); 209 path.lineTo(4,3); 210 path.close(); 211} 212 213static void addCCWContents(SkPath& path) { 214 path.moveTo(3,2); 215 path.lineTo(2,3); 216 path.lineTo(4,3); 217 path.close(); 218} 219 220static void testLine11() { 221 SkPath path; 222 addCWContainer(path); 223 addCWContents(path); 224 testSimplifyx(path); 225} 226 227static void testLine12() { 228 SkPath path; 229 addCCWContainer(path); 230 addCWContents(path); 231 testSimplifyx(path); 232} 233 234static void testLine13() { 235 SkPath path; 236 addCWContainer(path); 237 addCCWContents(path); 238 testSimplifyx(path); 239} 240 241static void testLine14() { 242 SkPath path; 243 addCCWContainer(path); 244 addCCWContents(path); 245 testSimplifyx(path); 246} 247 248static void testLine15() { 249 SkPath path; 250 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0); 251 testSimplifyx(path); 252} 253 254static void testLine16() { 255 SkPath path; 256 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 257 path.addRect(0, 4, 9, 9, (SkPath::Direction) 0); 258 testSimplifyx(path); 259} 260 261static void testLine17() { 262 SkPath path; 263 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 264 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0); 265 testSimplifyx(path); 266} 267 268static void testLine18() { 269 SkPath path; 270 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 271 path.addRect(12, 4, 21, 21, (SkPath::Direction) 0); 272 testSimplifyx(path); 273} 274 275static void testLine19() { 276 SkPath path; 277 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 278 path.addRect(12, 16, 21, 21, (SkPath::Direction) 0); 279 testSimplifyx(path); 280} 281 282static void testLine20() { 283 SkPath path; 284 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0); 285 path.addRect(0, 12, 9, 9, (SkPath::Direction) 0); 286 testSimplifyx(path); 287} 288 289static void testLine21() { 290 SkPath path; 291 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0); 292 path.addRect(0, 16, 9, 9, (SkPath::Direction) 0); 293 testSimplifyx(path); 294} 295 296static void testLine22() { 297 SkPath path; 298 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0); 299 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0); 300 testSimplifyx(path); 301} 302 303static void testLine23() { 304 SkPath path; 305 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0); 306 path.addRect(12, 0, 21, 21, (SkPath::Direction) 0); 307 testSimplifyx(path); 308} 309 310 311 312static void testLine24a() { 313 SkPath path; 314 path.moveTo(2,0); 315 path.lineTo(4,4); 316 path.lineTo(0,4); 317 path.close(); 318 path.moveTo(2,0); 319 path.lineTo(1,2); 320 path.lineTo(2,2); 321 path.close(); 322 testSimplifyx(path); 323} 324 325static void testLine24() { 326 SkPath path; 327 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0); 328 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0); 329 testSimplifyx(path); 330} 331 332static void testLine25() { 333 SkPath path; 334 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0); 335 path.addRect(12, 0, 21, 21, (SkPath::Direction) 0); 336 testSimplifyx(path); 337} 338 339static void testLine26() { 340 SkPath path; 341 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0); 342 path.addRect(0, 12, 9, 9, (SkPath::Direction) 0); 343 testSimplifyx(path); 344} 345 346static void testLine27() { 347 SkPath path; 348 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0); 349 path.addRect(12, 8, 21, 21, (SkPath::Direction) 0); 350 testSimplifyx(path); 351} 352 353static void testLine28() { 354 SkPath path; 355 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0); 356 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0); 357 testSimplifyx(path); 358} 359 360static void testLine29() { 361 SkPath path; 362 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0); 363 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0); 364 testSimplifyx(path); 365} 366 367static void testLine30() { 368 SkPath path; 369 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 370 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 371 path.addRect(4, 4, 13, 13, (SkPath::Direction) 0); 372 testSimplifyx(path); 373} 374 375static void testLine31() { 376 SkPath path; 377 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 378 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 379 path.addRect(0, 4, 9, 9, (SkPath::Direction) 0); 380 testSimplifyx(path); 381} 382 383static void testLine32() { 384 SkPath path; 385 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 386 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 387 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0); 388 testSimplifyx(path); 389} 390 391static void testLine33() { 392 SkPath path; 393 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 394 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 395 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0); 396 testSimplifyx(path); 397} 398 399static void testLine34() { 400 SkPath path; 401 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 402 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0); 403 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0); 404 testSimplifyx(path); 405} 406 407static void testLine35() { 408 SkPath path; 409 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 410 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0); 411 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0); 412 testSimplifyx(path); 413} 414 415static void testLine36() { 416 SkPath path; 417 path.addRect(0, 10, 20, 20, (SkPath::Direction) 0); 418 path.addRect(6, 12, 18, 18, (SkPath::Direction) 0); 419 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0); 420 testSimplifyx(path); 421} 422 423static void testLine37() { 424 SkPath path; 425 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0); 426 path.addRect(18, 24, 30, 30, (SkPath::Direction) 0); 427 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0); 428 testSimplifyx(path); 429} 430 431static void testLine38() { 432 SkPath path; 433 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0); 434 path.addRect(6, 12, 18, 18, (SkPath::Direction) 0); 435 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0); 436 testSimplifyx(path); 437} 438 439static void testLine40() { 440 SkPath path; 441 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0); 442 path.addRect(12, 18, 24, 24, (SkPath::Direction) 0); 443 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0); 444 testSimplifyx(path); 445} 446 447static void testLine41() { 448 SkPath path; 449 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 450 path.addRect(18, 24, 30, 30, (SkPath::Direction) 0); 451 path.addRect(12, 0, 21, 21, (SkPath::Direction) 0); 452 testSimplifyx(path); 453} 454 455static void testLine42() { 456 SkPath path; 457 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 458 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 459 path.addRect(8, 16, 17, 17, (SkPath::Direction) 0); 460 testSimplifyx(path); 461} 462 463static void testLine43() { 464 SkPath path; 465 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 466 path.addRect(6, 24, 18, 18, (SkPath::Direction) 0); 467 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1); 468 testSimplifyx(path); 469} 470 471static void testLine44() { 472 SkPath path; 473 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0); 474 path.addRect(18, 0, 30, 30, (SkPath::Direction) 0); 475 path.addRect(18, 32, 27, 36, (SkPath::Direction) 1); 476 testSimplifyx(path); 477} 478 479static void testLine45() { 480 SkPath path; 481 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0); 482 path.addRect(18, 0, 30, 30, (SkPath::Direction) 0); 483 path.addRect(24, 32, 33, 36, (SkPath::Direction) 0); 484 testSimplifyx(path); 485} 486 487static void testLine46() { 488 SkPath path; 489 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0); 490 path.addRect(24, 0, 36, 36, (SkPath::Direction) 0); 491 path.addRect(24, 32, 33, 36, (SkPath::Direction) 0); 492 testSimplifyx(path); 493} 494 495static void testLine47() { 496 SkPath path; 497 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 498 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 499 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1); 500 testSimplifyx(path); 501} 502 503static void testLine48() { 504 SkPath path; 505 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 506 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0); 507 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1); 508 testSimplifyx(path); 509} 510 511static void testLine49() { 512 SkPath path; 513 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 514 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 515 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0); 516 testSimplifyx(path); 517} 518 519static void testLine50() { 520 SkPath path; 521 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0); 522 path.addRect(24, 20, 36, 30, (SkPath::Direction) 0); 523 testSimplifyx(path); 524} 525 526 527static void testLine51() { 528 SkPath path; 529 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 530 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0); 531 path.addRect(4, 12, 13, 13, (SkPath::Direction) 1); 532 testSimplifyx(path); 533} 534 535static void testLine52() { 536 SkPath path; 537 path.addRect(0, 30, 20, 20, (SkPath::Direction) 0); 538 path.addRect(6, 20, 18, 30, (SkPath::Direction) 0); 539 path.addRect(32, 0, 36, 41, (SkPath::Direction) 0); 540 testSimplifyx(path); 541} 542 543static void testLine53() { 544 SkPath path; 545 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0); 546 path.addRect(12, 20, 24, 30, (SkPath::Direction) 0); 547 path.addRect(12, 32, 21, 36, (SkPath::Direction) 1); 548 testSimplifyx(path); 549} 550 551static void testLine54() { 552 SkPath path; 553 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 554 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0); 555 path.addRect(8, 4, 17, 17, (SkPath::Direction) 1); 556 testSimplifyx(path); 557} 558 559static void testLine55() { 560 SkPath path; 561 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 562 path.addRect(6, 6, 18, 18, (SkPath::Direction) 0); 563 path.addRect(4, 4, 13, 13, (SkPath::Direction) 1); 564 testSimplifyx(path); 565} 566 567static void testLine56() { 568 SkPath path; 569 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0); 570 path.addRect(18, 20, 30, 30, (SkPath::Direction) 0); 571 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1); 572 testSimplifyx(path); 573} 574 575static void testLine57() { 576 SkPath path; 577 path.addRect(20, 0, 40, 40, (SkPath::Direction) 0); 578 path.addRect(20, 0, 30, 40, (SkPath::Direction) 0); 579 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1); 580 testSimplifyx(path); 581} 582 583static void testLine58() { 584 SkPath path; 585 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 586 path.addRect(0, 0, 12, 12, (SkPath::Direction) 1); 587 path.addRect(0, 12, 9, 9, (SkPath::Direction) 1); 588 testSimplifyx(path); 589} 590 591static void testLine59() { 592 SkPath path; 593 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 594 path.addRect(6, 6, 18, 18, (SkPath::Direction) 1); 595 path.addRect(4, 4, 13, 13, (SkPath::Direction) 1); 596 testSimplifyx(path); 597} 598 599static void testLine60() { 600 SkPath path; 601 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 602 path.addRect(6, 12, 18, 18, (SkPath::Direction) 1); 603 path.addRect(4, 12, 13, 13, (SkPath::Direction) 1); 604 testSimplifyx(path); 605} 606 607static void testLine61() { 608 SkPath path; 609 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 610 path.addRect(12, 0, 24, 24, (SkPath::Direction) 1); 611 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1); 612 testSimplifyx(path); 613} 614 615static void testLine62() { 616 SkPath path; 617 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 618 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 619 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0); 620 path.addRect(4, 12, 13, 13, (SkPath::Direction) 1); 621 testSimplifyx(path); 622} 623 624static void testLine63() { 625 SkPath path; 626 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 627 path.addRect(0, 10, 20, 20, (SkPath::Direction) 0); 628 path.addRect(0, 6, 12, 12, (SkPath::Direction) 1); 629 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1); 630 testSimplifyx(path); 631} 632 633static void testLine64() { 634 SkPath path; 635 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 636 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0); 637 path.addRect(18, 6, 30, 30, (SkPath::Direction) 0); 638 testSimplifyx(path); 639} 640 641static void testLine65() { 642 SkPath path; 643 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 644 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0); 645 path.addRect(24, 0, 36, 36, (SkPath::Direction) 0); 646 path.addRect(32, 6, 36, 41, (SkPath::Direction) 1); 647 testSimplifyx(path); 648} 649 650static void testLine66() { 651 SkPath path; 652 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 653 path.addRect(0, 30, 20, 20, (SkPath::Direction) 0); 654 path.addRect(12, 20, 24, 30, (SkPath::Direction) 0); 655 testSimplifyx(path); 656} 657 658static void testLine67() { 659 SkPath path; 660 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 661 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0); 662 path.addRect(24, 20, 36, 30, (SkPath::Direction) 0); 663 path.addRect(32, 0, 36, 41, (SkPath::Direction) 0); 664 testSimplifyx(path); 665} 666 667static void testLine68a() { 668 SkPath path; 669 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0); 670 path.addRect(2, 2, 6, 6, (SkPath::Direction) 0); 671 path.addRect(1, 2, 4, 2, (SkPath::Direction) 0); 672 testSimplifyx(path); 673} 674 675static void testLine68b() { 676 SkPath path; 677 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0); 678 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 679 path.addRect(1, 2, 2, 2, (SkPath::Direction) 0); 680 testSimplifyx(path); 681} 682 683static void testLine68c() { 684 SkPath path; 685 path.addRect(0, 0, 8, 8, (SkPath::Direction) 1); 686 path.addRect(2, 2, 6, 6, (SkPath::Direction) 0); 687 path.addRect(1, 2, 4, 2, (SkPath::Direction) 0); 688 testSimplifyx(path); 689} 690 691static void testLine68d() { 692 SkPath path; 693 path.addRect(0, 0, 8, 8, (SkPath::Direction) 1); 694 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 695 path.addRect(1, 2, 4, 2, (SkPath::Direction) 0); 696 testSimplifyx(path); 697} 698 699static void testLine68e() { 700 SkPath path; 701 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0); 702 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0); 703 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 704 path.addRect(1, 2, 2, 2, (SkPath::Direction) 0); 705 testSimplifyx(path); 706} 707 708static void testLine68f() { 709 SkPath path; 710 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0); 711 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 712 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 713 path.addRect(1, 2, 2, 2, (SkPath::Direction) 0); 714 testSimplifyx(path); 715} 716 717static void testLine68g() { 718 SkPath path; 719 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0); 720 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0); 721 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 722 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 723 path.addRect(1, 2, 2, 2, (SkPath::Direction) 0); 724 testSimplifyx(path); 725} 726 727static void testLine68h() { 728 SkPath path; 729 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0); 730 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 731 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 732 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1); 733 path.addRect(1, 2, 2, 2, (SkPath::Direction) 0); 734 testSimplifyx(path); 735} 736 737static void testLine69() { 738 SkPath path; 739 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0); 740 path.addRect(0, 20, 12, 30, (SkPath::Direction) 0); 741 path.addRect(12, 32, 21, 36, (SkPath::Direction) 0); 742 testSimplifyx(path); 743} 744 745static void testLine70() { 746 SkPath path; 747 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 748 path.addRect(0, 24, 12, 12, (SkPath::Direction) 0); 749 path.addRect(12, 32, 21, 36, (SkPath::Direction) 1); 750 testSimplifyx(path); 751} 752 753static void testLine71() { 754 SkPath path; 755 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0); 756 path.addRect(12, 0, 24, 24, (SkPath::Direction) 0); 757 path.addRect(12, 32, 21, 36, (SkPath::Direction) 0); 758 testSimplifyx(path); 759} 760 761static void testLine72() { 762 SkPath path; 763 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 764 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0); 765 path.addRect(6, 20, 18, 30, (SkPath::Direction) 0); 766 testSimplifyx(path); 767} 768 769static void testLine73() { 770 SkPath path; 771 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 772 path.addRect(0, 40, 20, 20, (SkPath::Direction) 0); 773 path.addRect(0, 20, 12, 30, (SkPath::Direction) 0); 774 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1); 775 testSimplifyx(path); 776} 777 778static void testLine74() { 779 SkPath path; 780 path.addRect(20, 30, 40, 40, (SkPath::Direction) 0); 781 path.addRect(24, 20, 36, 30, (SkPath::Direction) 1); 782 path.addRect(32, 24, 36, 41, (SkPath::Direction) 1); 783 testSimplifyx(path); 784} 785 786static void testLine75() { 787 SkPath path; 788 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0); 789 path.addRect(10, 0, 30, 30, (SkPath::Direction) 1); 790 path.addRect(18, 0, 30, 30, (SkPath::Direction) 1); 791 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1); 792 testSimplifyx(path); 793} 794 795static void testLine76() { 796 SkPath path; 797 path.addRect(36, 0, 66, 60, (SkPath::Direction) 0); 798 path.addRect(10, 20, 40, 30, (SkPath::Direction) 0); 799 path.addRect(24, 20, 36, 30, (SkPath::Direction) 1); 800 path.addRect(32, 6, 36, 41, (SkPath::Direction) 1); 801 testSimplifyx(path); 802} 803 804static void testLine77() { 805 SkPath path; 806 path.addRect(20, 0, 40, 40, (SkPath::Direction) 0); 807 path.addRect(24, 6, 36, 36, (SkPath::Direction) 1); 808 path.addRect(24, 32, 33, 36, (SkPath::Direction) 1); 809 testSimplifyx(path); 810} 811 812static void testLine78() { 813 SkPath path; 814 path.addRect(0, 0, 30, 60, (SkPath::Direction) 0); 815 path.addRect(10, 20, 30, 30, (SkPath::Direction) 1); 816 path.addRect(18, 20, 30, 30, (SkPath::Direction) 1); 817 path.addRect(32, 0, 36, 41, (SkPath::Direction) 1); 818 testSimplifyx(path); 819} 820 821static void testLine79() { 822 SkPath path; 823 path.addRect(0, 36, 60, 30, (SkPath::Direction) 0); 824 path.addRect(10, 30, 40, 30, (SkPath::Direction) 0); 825 path.addRect(0, 20, 12, 30, (SkPath::Direction) 1); 826 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1); 827 testSimplifyx(path); 828} 829 830static void testDegenerate1() { 831 SkPath path; 832 path.moveTo(0, 0); 833 path.lineTo(0, 0); 834 path.lineTo(2, 0); 835 path.close(); 836 path.moveTo(0, 0); 837 path.lineTo(1, 0); 838 path.lineTo(2, 0); 839 path.close(); 840 testSimplifyx(path); 841} 842 843static void testDegenerate2() { 844 SkPath path; 845 path.moveTo(0, 0); 846 path.lineTo(0, 0); 847 path.lineTo(0, 0); 848 path.close(); 849 path.moveTo(0, 0); 850 path.lineTo(1, 0); 851 path.lineTo(0, 1); 852 path.close(); 853 testSimplifyx(path); 854} 855 856static void testDegenerate3() { 857 SkPath path; 858 path.moveTo(0, 0); 859 path.lineTo(2, 0); 860 path.lineTo(1, 0); 861 path.close(); 862 path.moveTo(0, 0); 863 path.lineTo(0, 0); 864 path.lineTo(3, 0); 865 path.close(); 866 testSimplifyx(path); 867} 868 869static void testDegenerate4() { 870 SkPath path; 871 path.moveTo(0, 0); 872 path.lineTo(1, 0); 873 path.lineTo(1, 3); 874 path.close(); 875 path.moveTo(1, 0); 876 path.lineTo(1, 1); 877 path.lineTo(1, 2); 878 path.close(); 879 testSimplifyx(path); 880} 881 882static void testNondegenerate1() { 883 SkPath path; 884 path.moveTo(0, 0); 885 path.lineTo(3, 0); 886 path.lineTo(1, 3); 887 path.close(); 888 path.moveTo(1, 1); 889 path.lineTo(2, 1); 890 path.lineTo(1, 2); 891 path.close(); 892 testSimplifyx(path); 893} 894 895static void testNondegenerate2() { 896 SkPath path; 897 path.moveTo(1, 0); 898 path.lineTo(0, 1); 899 path.lineTo(1, 1); 900 path.close(); 901 path.moveTo(0, 2); 902 path.lineTo(0, 3); 903 path.lineTo(1, 2); 904 path.close(); 905 testSimplifyx(path); 906} 907 908static void testNondegenerate3() { 909 SkPath path; 910 path.moveTo(0, 0); 911 path.lineTo(1, 0); 912 path.lineTo(2, 1); 913 path.close(); 914 path.moveTo(0, 1); 915 path.lineTo(1, 1); 916 path.lineTo(0, 2); 917 path.close(); 918 testSimplifyx(path); 919} 920 921static void testNondegenerate4() { 922 SkPath path; 923 path.moveTo(1, 0); 924 path.lineTo(0, 1); 925 path.lineTo(1, 2); 926 path.close(); 927 path.moveTo(0, 2); 928 path.lineTo(0, 3); 929 path.lineTo(1, 3); 930 path.close(); 931 testSimplifyx(path); 932} 933 934static void testQuadralateral5() { 935 SkPath path; 936 path.moveTo(0, 0); 937 path.lineTo(0, 0); 938 path.lineTo(1, 0); 939 path.lineTo(1, 1); 940 path.close(); 941 path.moveTo(0, 0); 942 path.lineTo(2, 2); 943 path.lineTo(3, 2); 944 path.lineTo(3, 3); 945 path.close(); 946 testSimplifyx(path); 947} 948 949static void testQuadralateral6() { 950 SkPath path; 951 path.moveTo(0, 0); 952 path.lineTo(0, 0); 953 path.lineTo(1, 0); 954 path.lineTo(1, 1); 955 path.close(); 956 path.moveTo(1, 0); 957 path.lineTo(2, 0); 958 path.lineTo(0, 2); 959 path.lineTo(2, 2); 960 path.close(); 961 testSimplifyx(path); 962} 963 964static void testFauxQuadralateral6() { 965 SkPath path; 966 path.moveTo(0, 0); 967 path.lineTo(1, 0); 968 path.lineTo(1, 1); 969 path.close(); 970 path.moveTo(1, 0); 971 path.lineTo(2, 0); 972 path.lineTo(1 + 1.0f/3, 2.0f/3); 973 path.close(); 974 path.moveTo(1 + 1.0f/3, 2.0f/3); 975 path.lineTo(0, 2); 976 path.lineTo(2, 2); 977 path.close(); 978 testSimplifyx(path); 979} 980 981static void testFauxQuadralateral6a() { 982 SkPath path; 983 path.moveTo(0, 0); 984 path.lineTo(3, 0); 985 path.lineTo(3, 3); 986 path.close(); 987 path.moveTo(3, 0); 988 path.lineTo(6, 0); 989 path.lineTo(4, 2); 990 path.close(); 991 path.moveTo(4, 2); 992 path.lineTo(0, 6); 993 path.lineTo(6, 6); 994 path.close(); 995 testSimplifyx(path); 996} 997 998static void testFauxQuadralateral6b() { 999 SkPath path; 1000 path.moveTo(0, 0); 1001 path.lineTo(3, 0); 1002 path.lineTo(3, 3); 1003 path.close(); 1004 path.moveTo(3, 0); 1005 path.lineTo(6, 0); 1006 path.lineTo(4, 2); 1007 path.close(); 1008 path.moveTo(4, 2); 1009 path.lineTo(6, 6); 1010 path.lineTo(0, 6); 1011 path.close(); 1012 testSimplifyx(path); 1013} 1014 1015static void testFauxQuadralateral6c() { 1016 SkPath path; 1017 path.moveTo(0, 0); 1018 path.lineTo(3, 3); 1019 path.lineTo(3, 0); 1020 path.close(); 1021 path.moveTo(3, 0); 1022 path.lineTo(6, 0); 1023 path.lineTo(4, 2); 1024 path.close(); 1025 path.moveTo(4, 2); 1026 path.lineTo(0, 6); 1027 path.lineTo(6, 6); 1028 path.close(); 1029 testSimplifyx(path); 1030} 1031 1032static void testFauxQuadralateral6d() { 1033 SkPath path; 1034 path.moveTo(0, 0); 1035 path.lineTo(3, 3); 1036 path.lineTo(3, 0); 1037 path.close(); 1038 path.moveTo(3, 0); 1039 path.lineTo(6, 0); 1040 path.lineTo(4, 2); 1041 path.close(); 1042 path.moveTo(4, 2); 1043 path.lineTo(6, 6); 1044 path.lineTo(0, 6); 1045 path.close(); 1046 testSimplifyx(path); 1047} 1048 1049static void testQuadralateral6a() { 1050 SkPath path; 1051 path.moveTo(0, 0); 1052 path.lineTo(0, 0); 1053 path.lineTo(3, 0); 1054 path.lineTo(3, 3); 1055 path.close(); 1056 path.moveTo(3, 0); 1057 path.lineTo(6, 0); 1058 path.lineTo(0, 6); 1059 path.lineTo(6, 6); 1060 path.close(); 1061 testSimplifyx(path); 1062} 1063 1064static void testQuadralateral7() { 1065 SkPath path; 1066 path.moveTo(0, 0); 1067 path.lineTo(0, 0); 1068 path.lineTo(1, 0); 1069 path.lineTo(2, 1); 1070 path.close(); 1071 path.moveTo(1, 0); 1072 path.lineTo(1, 1); 1073 path.lineTo(2, 2); 1074 path.lineTo(1, 3); 1075 path.close(); 1076 testSimplifyx(path); 1077} 1078 1079static void testQuadralateral8() { 1080 SkPath path; 1081 path.moveTo(0, 0); 1082 path.lineTo(3, 1); 1083 path.lineTo(1, 3); 1084 path.lineTo(3, 3); 1085 path.close(); 1086 path.moveTo(2, 1); 1087 path.lineTo(0, 2); 1088 path.lineTo(3, 2); 1089 path.lineTo(2, 3); 1090 path.close(); 1091 testSimplifyx(path); 1092} 1093 1094static void testQuadralateral9() { 1095 SkPath path; 1096 path.moveTo(0, 0); 1097 path.lineTo(1, 0); 1098 path.lineTo(1, 2); 1099 path.lineTo(2, 2); 1100 path.close(); 1101 path.moveTo(1, 1); 1102 path.lineTo(2, 1); 1103 path.lineTo(1, 3); 1104 path.lineTo(2, 3); 1105 path.close(); 1106 testSimplifyx(path); 1107} 1108 1109static void testLine1x() { 1110 SkPath path; 1111 path.setFillType(SkPath::kEvenOdd_FillType); 1112 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0); 1113 path.addRect(4, 0, 13, 13, (SkPath::Direction) 0); 1114 testSimplifyx(path); 1115} 1116 1117static void testLine2x() { 1118 SkPath path; 1119 path.setFillType(SkPath::kEvenOdd_FillType); 1120 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0); 1121 path.addRect(0, 20, 12, 30, (SkPath::Direction) 0); 1122 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1); 1123 testSimplifyx(path); 1124} 1125 1126static void testLine3x() { 1127 SkPath path; 1128 path.setFillType(SkPath::kEvenOdd_FillType); 1129 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0); 1130 path.addRect(18, 20, 30, 30, (SkPath::Direction) 1); 1131 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1); 1132 testSimplifyx(path); 1133} 1134 1135static void testLine4x() { 1136 SkPath path; 1137 path.setFillType(SkPath::kEvenOdd_FillType); 1138 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0); 1139 path.addRect(24, 20, 36, 30, (SkPath::Direction) 1); 1140 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1); 1141 testSimplifyx(path); 1142} 1143 1144static void testQuadratic1() { 1145 SkPath path; 1146 path.moveTo(0, 0); 1147 path.quadTo(0, 0, 0, 0); 1148 path.lineTo(1, 0); 1149 path.close(); 1150 path.moveTo(0, 0); 1151 path.lineTo(0, 0); 1152 path.quadTo(0, 0, 0, 0); 1153 path.close(); 1154 testSimplifyx(path); 1155} 1156 1157static void testQuadratic2() { 1158 SkPath path; 1159 path.moveTo(0, 0); 1160 path.quadTo(0, 0, 0, 0); 1161 path.lineTo(3, 0); 1162 path.close(); 1163 path.moveTo(0, 0); 1164 path.lineTo(0, 0); 1165 path.quadTo(1, 0, 0, 1); 1166 path.close(); 1167 testSimplifyx(path); 1168} 1169 1170static void testQuadratic3() { 1171 SkPath path; 1172 path.moveTo(0, 0); 1173 path.quadTo(0, 0, 1, 0); 1174 path.lineTo(0, 2); 1175 path.close(); 1176 path.moveTo(0, 0); 1177 path.lineTo(0, 0); 1178 path.quadTo(1, 0, 0, 1); 1179 path.close(); 1180 testSimplifyx(path); 1181} 1182 1183static void (*firstTest)() = testQuadratic3; 1184 1185static struct { 1186 void (*fun)(); 1187 const char* str; 1188} tests[] = { 1189 TEST(testQuadratic3), 1190 TEST(testQuadratic2), 1191 TEST(testQuadratic1), 1192 TEST(testLine4x), 1193 TEST(testLine3x), 1194 TEST(testLine2x), 1195 TEST(testLine1x), 1196 TEST(testQuadralateral9), 1197 TEST(testQuadralateral8), 1198 TEST(testQuadralateral7), 1199 TEST(testQuadralateral6), 1200 TEST(testQuadralateral6a), 1201 TEST(testFauxQuadralateral6d), 1202 TEST(testFauxQuadralateral6c), 1203 TEST(testFauxQuadralateral6b), 1204 TEST(testFauxQuadralateral6a), 1205 TEST(testFauxQuadralateral6), 1206 TEST(testQuadralateral5), 1207 TEST(testNondegenerate4), 1208 TEST(testNondegenerate3), 1209 TEST(testNondegenerate2), 1210 TEST(testNondegenerate1), 1211 TEST(testDegenerate4), 1212 TEST(testDegenerate3), 1213 TEST(testDegenerate2), 1214 TEST(testDegenerate1), 1215 TEST(testLine79), 1216 TEST(testLine78), 1217 TEST(testLine77), 1218 TEST(testLine76), 1219 TEST(testLine75), 1220 TEST(testLine74), 1221 TEST(testLine73), 1222 TEST(testLine72), 1223 TEST(testLine71), 1224 TEST(testLine70), 1225 TEST(testLine69), 1226 TEST(testLine68h), 1227 TEST(testLine68g), 1228 TEST(testLine68f), 1229 TEST(testLine68e), 1230 TEST(testLine68d), 1231 TEST(testLine68c), 1232 TEST(testLine68b), 1233 TEST(testLine68a), 1234 TEST(testLine67), 1235 TEST(testLine66), 1236 TEST(testLine65), 1237 TEST(testLine64), 1238 TEST(testLine63), 1239 TEST(testLine62), 1240 TEST(testLine61), 1241 TEST(testLine60), 1242 TEST(testLine59), 1243 TEST(testLine58), 1244 TEST(testLine57), 1245 TEST(testLine56), 1246 TEST(testLine55), 1247 TEST(testLine54), 1248 TEST(testLine53), 1249 TEST(testLine52), 1250 TEST(testLine51), 1251 TEST(testLine50), 1252 TEST(testLine49), 1253 TEST(testLine48), 1254 TEST(testLine47), 1255 TEST(testLine46), 1256 TEST(testLine45), 1257 TEST(testLine44), 1258 TEST(testLine43), 1259 TEST(testLine42), 1260 TEST(testLine41), 1261 TEST(testLine40), 1262 TEST(testLine38), 1263 TEST(testLine37), 1264 TEST(testLine36), 1265 TEST(testLine35), 1266 TEST(testLine34), 1267 TEST(testLine33), 1268 TEST(testLine32), 1269 TEST(testLine31), 1270 TEST(testLine30), 1271 TEST(testLine29), 1272 TEST(testLine28), 1273 TEST(testLine27), 1274 TEST(testLine26), 1275 TEST(testLine25), 1276 TEST(testLine24a), 1277 TEST(testLine24), 1278 TEST(testLine23), 1279 TEST(testLine22), 1280 TEST(testLine21), 1281 TEST(testLine20), 1282 TEST(testLine19), 1283 TEST(testLine18), 1284 TEST(testLine17), 1285 TEST(testLine16), 1286 TEST(testLine15), 1287 TEST(testLine14), 1288 TEST(testLine13), 1289 TEST(testLine12), 1290 TEST(testLine11), 1291 TEST(testLine10a), 1292 TEST(testLine10), 1293 TEST(testLine9), 1294 TEST(testLine8), 1295 TEST(testLine7b), 1296 TEST(testLine7a), 1297 TEST(testLine7), 1298 TEST(testLine6), 1299 TEST(testLine5), 1300 TEST(testLine4), 1301 TEST(testLine3b), 1302 TEST(testLine3a), 1303 TEST(testLine3), 1304 TEST(testLine2), 1305 TEST(testLine1), 1306}; 1307 1308static const size_t testCount = sizeof(tests) / sizeof(tests[0]); 1309 1310static struct { 1311 void (*fun)(); 1312 const char* str; 1313} subTests[] = { 1314 TEST(testQuadralateral6), 1315 TEST(testQuadralateral6a), 1316 TEST(testFauxQuadralateral6d), 1317 TEST(testFauxQuadralateral6c), 1318 TEST(testFauxQuadralateral6b), 1319 TEST(testFauxQuadralateral6a), 1320 TEST(testFauxQuadralateral6), 1321}; 1322 1323static const size_t subTestCount = sizeof(subTests) / sizeof(subTests[0]); 1324 1325static bool skipAll = false; 1326static bool runSubTests = false; 1327 1328void SimplifyNew_Test() { 1329 if (skipAll) { 1330 return; 1331 } 1332#ifdef SK_DEBUG 1333 gDebugMaxWindSum = 4; 1334 gDebugMaxWindValue = 4; 1335 size_t index; 1336#endif 1337 if (runSubTests) { 1338 index = subTestCount - 1; 1339 do { 1340 SkDebugf(" %s [%s]\n", __FUNCTION__, subTests[index].str); 1341 (*subTests[index].fun)(); 1342 } while (index--); 1343 } 1344 index = testCount - 1; 1345 if (firstTest) { 1346 while (index > 0 && tests[index].fun != firstTest) { 1347 --index; 1348 } 1349 SkDebugf(" %s [%s]\n", __FUNCTION__, tests[index].str); 1350 (*tests[index].fun)(); 1351 } 1352 index = testCount - 1; 1353 bool firstTestComplete = false; 1354 do { 1355 SkDebugf(" %s [%s]\n", __FUNCTION__, tests[index].str); 1356 (*tests[index].fun)(); 1357 firstTestComplete = true; 1358 } while (index--); 1359#ifdef SK_DEBUG 1360 gDebugMaxWindSum = SK_MaxS32; 1361 gDebugMaxWindValue = SK_MaxS32; 1362#endif 1363} 1364