OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 #include "PathOpsExtendedTest.h" | 7 #include "PathOpsExtendedTest.h" |
8 | 8 |
9 #define TEST(name) { name, #name } | 9 #define TEST(name) { name, #name } |
10 | 10 |
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 pathB.lineTo(1233, 787); | 501 pathB.lineTo(1233, 787); |
502 pathB.quadTo(1233, 793.213196f, 1228.60791f, 797.608032f); | 502 pathB.quadTo(1233, 793.213196f, 1228.60791f, 797.608032f); |
503 pathB.quadTo(1224.21313f, 802, 1218, 802); | 503 pathB.quadTo(1224.21313f, 802, 1218, 802); |
504 pathB.lineTo(48, 802); | 504 pathB.lineTo(48, 802); |
505 pathB.quadTo(41.7867432f, 802, 37.3919678f, 797.608032f); | 505 pathB.quadTo(41.7867432f, 802, 37.3919678f, 797.608032f); |
506 pathB.quadTo(33, 793.213196f, 33, 787); | 506 pathB.quadTo(33, 793.213196f, 33, 787); |
507 pathB.close(); | 507 pathB.close(); |
508 testPathOp(reporter, path, pathB, kIntersect_PathOp); | 508 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
509 } | 509 } |
510 | 510 |
511 #define TRY_BROKEN_TESTS 0 | |
512 #if TRY_BROKEN_TESTS | |
513 static void skpfrauen_magazin_com83(skiatest::Reporter* reporter) { | 511 static void skpfrauen_magazin_com83(skiatest::Reporter* reporter) { |
514 SkPath path; | 512 SkPath path; |
515 path.setFillType(SkPath::kEvenOdd_FillType); | 513 path.setFillType(SkPath::kEvenOdd_FillType); |
516 path.moveTo(808, 886); | 514 path.moveTo(808, 886); |
517 path.cubicTo(805.581055f, 886, 803.563293f, 887.717773f, 803.100037f, 890); | 515 path.cubicTo(805.581055f, 886, 803.563293f, 887.717773f, 803.100037f, 890); |
518 path.lineTo(1122.90002f, 890); | 516 path.lineTo(1122.90002f, 890); |
519 path.cubicTo(1122.43677f, 887.717773f, 1120.41895f, 886, 1118, 886); | 517 path.cubicTo(1122.43677f, 887.717773f, 1120.41895f, 886, 1118, 886); |
520 path.lineTo(808, 886); | 518 path.lineTo(808, 886); |
521 path.close(); | 519 path.close(); |
522 SkPath pathB; | 520 SkPath pathB; |
523 pathB.setFillType(SkPath::kInverseWinding_FillType); | 521 pathB.setFillType(SkPath::kInverseWinding_FillType); |
524 pathB.moveTo(808, 886); | 522 pathB.moveTo(808, 886); |
525 pathB.lineTo(1118, 886); | 523 pathB.lineTo(1118, 886); |
526 pathB.cubicTo(1120.76147f, 886, 1123, 888.238586f, 1123, 891); | 524 pathB.cubicTo(1120.76147f, 886, 1123, 888.238586f, 1123, 891); |
527 pathB.lineTo(1123, 1521); | 525 pathB.lineTo(1123, 1521); |
528 pathB.cubicTo(1123, 1523.20911f, 1120.76147f, 1525, 1118, 1525); | 526 pathB.cubicTo(1123, 1523.20911f, 1120.76147f, 1525, 1118, 1525); |
529 pathB.lineTo(808, 1525); | 527 pathB.lineTo(808, 1525); |
530 pathB.cubicTo(805.238586f, 1525, 803, 1523.20911f, 803, 1521); | 528 pathB.cubicTo(805.238586f, 1525, 803, 1523.20911f, 803, 1521); |
531 pathB.lineTo(803, 891); | 529 pathB.lineTo(803, 891); |
532 pathB.cubicTo(803, 888.238586f, 805.238586f, 886, 808, 886); | 530 pathB.cubicTo(803, 888.238586f, 805.238586f, 886, 808, 886); |
533 pathB.close(); | 531 pathB.close(); |
534 testPathOp(reporter, path, pathB, kIntersect_PathOp); | 532 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
535 } | 533 } |
536 | 534 |
| 535 #define TRY_BROKEN_TESTS 0 |
| 536 #if TRY_BROKEN_TESTS |
537 static void skpi_gino_com16(skiatest::Reporter* reporter) { | 537 static void skpi_gino_com16(skiatest::Reporter* reporter) { |
538 SkPath path; | 538 SkPath path; |
539 path.setFillType(SkPath::kEvenOdd_FillType); | 539 path.setFillType(SkPath::kEvenOdd_FillType); |
540 path.moveTo(184, 734); | 540 path.moveTo(184, 734); |
541 path.quadTo(133.051727f, 734, 97.0258636f, 770.025879f); | 541 path.quadTo(133.051727f, 734, 97.0258636f, 770.025879f); |
542 path.quadTo(61, 806.051758f, 61, 857); | 542 path.quadTo(61, 806.051758f, 61, 857); |
543 path.quadTo(61, 895.835083f, 81.9317017f, 926); | 543 path.quadTo(61, 895.835083f, 81.9317017f, 926); |
544 path.lineTo(286.068298f, 926); | 544 path.lineTo(286.068298f, 926); |
545 path.quadTo(307, 895.835083f, 307, 857); | 545 path.quadTo(307, 895.835083f, 307, 857); |
546 path.quadTo(307, 806.051758f, 270.974121f, 770.025879f); | 546 path.quadTo(307, 806.051758f, 270.974121f, 770.025879f); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 pathB.cubicTo(770.65686f, 729, 772, 729.895447f, 772, 731); | 607 pathB.cubicTo(770.65686f, 729, 772, 729.895447f, 772, 731); |
608 pathB.lineTo(772, 790); | 608 pathB.lineTo(772, 790); |
609 pathB.cubicTo(772, 791.65686f, 770.65686f, 793, 769, 793); | 609 pathB.cubicTo(772, 791.65686f, 770.65686f, 793, 769, 793); |
610 pathB.lineTo(655, 793); | 610 pathB.lineTo(655, 793); |
611 pathB.cubicTo(653.34314f, 793, 652, 791.65686f, 652, 790); | 611 pathB.cubicTo(653.34314f, 793, 652, 791.65686f, 652, 790); |
612 pathB.lineTo(652, 731); | 612 pathB.lineTo(652, 731); |
613 pathB.cubicTo(652, 729.895447f, 653.34314f, 729, 655, 729); | 613 pathB.cubicTo(652, 729.895447f, 653.34314f, 729, 655, 729); |
614 pathB.close(); | 614 pathB.close(); |
615 testPathOp(reporter, path, pathB, kIntersect_PathOp); | 615 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
616 } | 616 } |
| 617 #endif |
617 | 618 |
618 static void skpsudoestenegocios_com186(skiatest::Reporter* reporter) { | 619 static void skpsudoestenegocios_com186(skiatest::Reporter* reporter) { |
619 SkPath path; | 620 SkPath path; |
620 path.setFillType(SkPath::kEvenOdd_FillType); | 621 path.setFillType(SkPath::kEvenOdd_FillType); |
621 path.moveTo(0, 495); | 622 path.moveTo(0, 495); |
622 path.lineTo(1.23685242e-14f, 293); | 623 path.lineTo(1.23685242e-14f, 293); |
623 path.lineTo(44, 293); | 624 path.lineTo(44, 293); |
624 path.quadTo(45.6568527f, 293, 46.8288002f, 294.171204f); | 625 path.quadTo(45.6568527f, 293, 46.8288002f, 294.171204f); |
625 path.quadTo(48, 295.34314f, 48, 297); | 626 path.quadTo(48, 295.34314f, 48, 297); |
626 path.lineTo(48, 491); | 627 path.lineTo(48, 491); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 path.close(); | 659 path.close(); |
659 SkPath pathB; | 660 SkPath pathB; |
660 pathB.setFillType(SkPath::kWinding_FillType); | 661 pathB.setFillType(SkPath::kWinding_FillType); |
661 pathB.moveTo(783.256775f, 713.443054f); | 662 pathB.moveTo(783.256775f, 713.443054f); |
662 pathB.lineTo(863.428589f, 691.96106f); | 663 pathB.lineTo(863.428589f, 691.96106f); |
663 pathB.lineTo(866.016724f, 701.620361f); | 664 pathB.lineTo(866.016724f, 701.620361f); |
664 pathB.lineTo(785.84491f, 723.102356f); | 665 pathB.lineTo(785.84491f, 723.102356f); |
665 pathB.close(); | 666 pathB.close(); |
666 testPathOp(reporter, path, pathB, kIntersect_PathOp); | 667 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
667 } | 668 } |
| 669 |
| 670 static void skphostloco_com11(skiatest::Reporter* reporter) { |
| 671 SkPath path; |
| 672 path.setFillType(SkPath::kEvenOdd_FillType); |
| 673 path.moveTo(6.66133815e-16f, 648); |
| 674 path.lineTo(25.8522835f, 648); |
| 675 path.quadTo(27.5087376f, 647.999634f, 28.6807098f, 646.82843f); |
| 676 path.quadTo(29.8518829f, 645.656433f, 29.8522835f, 644); |
| 677 path.lineTo(29.8522835f, 467); |
| 678 path.quadTo(29.8518829f, 465.343536f, 28.6807098f, 464.17157f); |
| 679 path.quadTo(27.5087376f, 463.000397f, 25.8522835f, 463); |
| 680 path.lineTo(2.22044605e-16f, 463); |
| 681 path.lineTo(6.66133815e-16f, 648); |
| 682 path.close(); |
| 683 SkPath pathB; |
| 684 pathB.setFillType(SkPath::kWinding_FillType); |
| 685 pathB.moveTo(0, 463); |
| 686 pathB.lineTo(30, 463); |
| 687 pathB.lineTo(30, 648); |
| 688 pathB.lineTo(0, 648); |
| 689 pathB.close(); |
| 690 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 691 } |
| 692 |
| 693 static void skpsergeychunkevich_com8(skiatest::Reporter* reporter) { |
| 694 SkPath path; |
| 695 path.setFillType(SkPath::kEvenOdd_FillType); |
| 696 path.moveTo(0, 926); |
| 697 path.lineTo(0, 0); |
| 698 path.lineTo(1265, 0); |
| 699 path.lineTo(1265, 926); |
| 700 path.lineTo(0, 926); |
| 701 path.close(); |
| 702 SkPath pathB; |
| 703 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 704 pathB.moveTo(37, 374); |
| 705 pathB.lineTo(37, 535); |
| 706 pathB.cubicTo(37, 536.65686f, 35.6568565f, 538, 34, 538); |
| 707 pathB.lineTo(1.02866934e-14f, 538); |
| 708 pathB.lineTo(6.12303177e-17f, 371); |
| 709 pathB.lineTo(34, 371); |
| 710 pathB.cubicTo(35.6568565f, 371, 37, 372.34314f, 37, 374); |
| 711 pathB.close(); |
| 712 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 713 } |
| 714 |
| 715 static void skptracksflow_com9(skiatest::Reporter* reporter) { |
| 716 SkPath path; |
| 717 path.setFillType(SkPath::kEvenOdd_FillType); |
| 718 path.moveTo(16, 56); |
| 719 path.lineTo(32, 56); |
| 720 path.lineTo(32, 72); |
| 721 path.lineTo(16, 72); |
| 722 path.lineTo(16, 56); |
| 723 path.close(); |
| 724 SkPath pathB; |
| 725 pathB.setFillType(SkPath::kEvenOdd_FillType); |
| 726 pathB.moveTo(31.65625f, 70.0555649f); |
| 727 pathB.lineTo(31.65625f, 70.0554962f); |
| 728 pathB.lineTo(26.9727192f, 65.3615341f); |
| 729 pathB.cubicTo(27.6210003f, 64.4029694f, 28.0048752f, 63.2470932f, 28.0048752
f, 62.0027809f); |
| 730 pathB.cubicTo(28.0048752f, 58.6875305f, 25.3199062f, 56, 22.0046558f, 56); |
| 731 pathB.cubicTo(18.6894073f, 56, 16.0031872f, 58.6875305f, 16.0031872f, 62.002
7809f); |
| 732 pathB.cubicTo(16.0031872f, 65.3180008f, 18.6913433f, 68.0055618f, 22.0066261
f, 68.0055618f); |
| 733 pathB.cubicTo(23.2509995f, 68.0055618f, 24.4072189f, 67.6187515f, 25.3657818
f, 66.9704056f); |
| 734 pathB.lineTo(30.0599365f, 71.65625f); |
| 735 pathB.lineTo(30.0600014f, 71.65625f); |
| 736 pathB.cubicTo(30.2668133f, 71.875f, 30.5524693f, 71.9992828f, 30.868f, 71.99
92828f); |
| 737 pathB.cubicTo(31.4994049f, 71.9992828f, 32.0014687f, 71.4909363f, 32.0014687
f, 70.8595276f); |
| 738 pathB.cubicTo(32.0015335f, 70.5439072f, 31.875f, 70.2623444f, 31.65625f, 70.
0555649f); |
| 739 pathB.close(); |
| 740 pathB.moveTo(18.0054054f, 62.0027809f); |
| 741 pathB.cubicTo(18.0054054f, 59.7925949f, 19.7970943f, 58.0009079f, 22.0072823
f, 58.0009079f); |
| 742 pathB.cubicTo(24.2174377f, 58.0009079f, 26.0091248f, 59.7925949f, 26.0091248
f, 62.0027809f); |
| 743 pathB.cubicTo(26.0091248f, 64.2129364f, 24.2174377f, 66.0046234f, 22.0072803
f, 66.0046234f); |
| 744 pathB.cubicTo(19.7970943f, 66.0045929f, 18.0054054f, 64.2129059f, 18.0054054
f, 62.0027809f); |
| 745 pathB.close(); |
| 746 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 747 } |
| 748 |
| 749 static void skpautobutler_dk29(skiatest::Reporter* reporter) { |
| 750 SkPath path; |
| 751 path.setFillType(SkPath::kEvenOdd_FillType); |
| 752 path.moveTo(0, 926); |
| 753 path.lineTo(0, 0); |
| 754 path.lineTo(1265, 0); |
| 755 path.lineTo(1265, 926); |
| 756 path.lineTo(0, 926); |
| 757 path.close(); |
| 758 SkPath pathB; |
| 759 pathB.setFillType(SkPath::kWinding_FillType); |
| 760 pathB.moveTo(21, 162); |
| 761 pathB.lineTo(21, 301); |
| 762 pathB.lineTo(8.57224448e-15f, 301); |
| 763 pathB.lineTo(6.12303177e-17f, 162); |
| 764 pathB.close(); |
| 765 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 766 } |
| 767 |
| 768 static void skponlinecollege_org144(skiatest::Reporter* reporter) { |
| 769 SkPath path; |
| 770 path.setFillType(SkPath::kEvenOdd_FillType); |
| 771 path.moveTo(179, 407); |
| 772 path.cubicTo(177.34314f, 407, 176, 408.34314f, 176, 410); |
| 773 path.lineTo(176, 436); |
| 774 path.cubicTo(176, 437.65686f, 177.34314f, 439, 179, 439); |
| 775 path.lineTo(337.002289f, 439); |
| 776 path.cubicTo(338.105835f, 438.998779f, 339, 438.103821f, 339, 437); |
| 777 path.lineTo(339, 409); |
| 778 path.cubicTo(339, 407.896362f, 338.10611f, 407.001526f, 337.002838f, 407); |
| 779 path.lineTo(179, 407); |
| 780 path.close(); |
| 781 SkPath pathB; |
| 782 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 783 pathB.moveTo(179, 408); |
| 784 pathB.lineTo(337, 408); |
| 785 pathB.cubicTo(338.65686f, 408, 340, 408.895416f, 340, 410); |
| 786 pathB.lineTo(340, 436); |
| 787 pathB.cubicTo(340, 437.65686f, 338.65686f, 439, 337, 439); |
| 788 pathB.lineTo(179, 439); |
| 789 pathB.cubicTo(177.895432f, 439, 177, 437.65686f, 177, 436); |
| 790 pathB.lineTo(177, 410); |
| 791 pathB.cubicTo(177, 408.895416f, 177.895432f, 408, 179, 408); |
| 792 pathB.close(); |
| 793 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 794 } |
| 795 |
| 796 static void skpnational_com_au81(skiatest::Reporter* reporter) { |
| 797 SkPath path; |
| 798 path.setFillType(SkPath::kEvenOdd_FillType); |
| 799 path.moveTo(807, 817); |
| 800 path.quadTo(806.585876f, 817.000122f, 806.292908f, 817.292908f); |
| 801 path.quadTo(806.000122f, 817.585876f, 806, 818); |
| 802 path.lineTo(806, 881); |
| 803 path.lineTo(1111, 881); |
| 804 path.lineTo(1111, 818); |
| 805 path.quadTo(1110.99988f, 817.585876f, 1110.70715f, 817.292908f); |
| 806 path.quadTo(1110.41406f, 817.000122f, 1110, 817); |
| 807 path.lineTo(807, 817); |
| 808 path.close(); |
| 809 SkPath pathB; |
| 810 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 811 pathB.moveTo(807, 817); |
| 812 pathB.lineTo(1110, 817); |
| 813 pathB.cubicTo(1110.55225f, 817, 1111, 817.447693f, 1111, 818); |
| 814 pathB.lineTo(1111, 880); |
| 815 pathB.lineTo(806, 880); |
| 816 pathB.lineTo(806, 818); |
| 817 pathB.cubicTo(806, 817.447693f, 806.447693f, 817, 807, 817); |
| 818 pathB.close(); |
| 819 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 820 } |
| 821 |
| 822 static void skprentacheat_com30(skiatest::Reporter* reporter) { |
| 823 SkPath path; |
| 824 path.setFillType(SkPath::kEvenOdd_FillType); |
| 825 path.moveTo(967, 263); |
| 826 path.quadTo(966.585876f, 263.000092f, 966.292908f, 263.292908f); |
| 827 path.quadTo(966.000122f, 263.585876f, 966, 264); |
| 828 path.lineTo(966, 301); |
| 829 path.lineTo(1214, 301); |
| 830 path.lineTo(1214, 264); |
| 831 path.quadTo(1213.99988f, 263.585876f, 1213.70715f, 263.292908f); |
| 832 path.quadTo(1213.41406f, 263.000092f, 1213, 263); |
| 833 path.lineTo(967, 263); |
| 834 path.close(); |
| 835 SkPath pathB; |
| 836 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 837 pathB.moveTo(967, 263); |
| 838 pathB.lineTo(1213, 263); |
| 839 pathB.cubicTo(1213.55225f, 263, 1214, 263.447723f, 1214, 264); |
| 840 pathB.lineTo(1214, 300); |
| 841 pathB.lineTo(966, 300); |
| 842 pathB.lineTo(966, 264); |
| 843 pathB.cubicTo(966, 263.447723f, 966.447693f, 263, 967, 263); |
| 844 pathB.close(); |
| 845 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 846 } |
| 847 |
| 848 static void skpbreakmystyle_com10(skiatest::Reporter* reporter) { |
| 849 SkPath path; |
| 850 path.setFillType(SkPath::kEvenOdd_FillType); |
| 851 path.moveTo(271.032867f, -5.32907052e-15f); |
| 852 path.lineTo(56.9671326f, -5.16253706e-15f); |
| 853 path.quadTo(52.7835083f, 3.69968891f, 48.7416f, 7.74160004f); |
| 854 path.quadTo(1, 55.4831848f, 1, 123); |
| 855 path.quadTo(1, 190.516815f, 48.7416f, 238.258392f); |
| 856 path.quadTo(96.4831848f, 286, 164, 286); |
| 857 path.quadTo(231.516815f, 286, 279.258392f, 238.258392f); |
| 858 path.quadTo(327, 190.516815f, 327, 123); |
| 859 path.quadTo(327, 55.4831848f, 279.258392f, 7.74160004f); |
| 860 path.quadTo(275.216431f, 3.69964004f, 271.032867f, -5.32907052e-15f); |
| 861 path.close(); |
| 862 SkPath pathB; |
| 863 pathB.setFillType(SkPath::kWinding_FillType); |
| 864 pathB.moveTo(327, 123); |
| 865 pathB.quadTo(327, 190.516815f, 279.258392f, 238.258392f); |
| 866 pathB.quadTo(231.516815f, 286, 164, 286); |
| 867 pathB.quadTo(96.4831848f, 286, 48.7416f, 238.258392f); |
| 868 pathB.quadTo(1, 190.516815f, 1, 123); |
| 869 pathB.quadTo(1, 55.4831848f, 48.7416f, 7.74160004f); |
| 870 pathB.quadTo(96.4831848f, -40, 164, -40); |
| 871 pathB.quadTo(231.516815f, -40, 279.258392f, 7.74160004f); |
| 872 pathB.quadTo(327, 55.4831848f, 327, 123); |
| 873 pathB.close(); |
| 874 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 875 } |
| 876 |
| 877 static void skpsd_graphic_net104(skiatest::Reporter* reporter) { |
| 878 SkPath path; |
| 879 path.setFillType(SkPath::kEvenOdd_FillType); |
| 880 path.moveTo(475.421448f, 836.985962f); |
| 881 path.lineTo(461.280975f, 841.990662f); |
| 882 path.cubicTo(466.80899f, 857.609802f, 458.62854f, 874.752991f, 443.009399f,
880.281006f); |
| 883 path.cubicTo(435.199829f, 883.044983f, 427.009247f, 882.381897f, 420.080048f
, 879.075378f); |
| 884 path.lineTo(413.620056f, 892.613037f); |
| 885 path.quadTo(430.419983f, 900.629761f, 447.96701f, 894.43811f); |
| 886 path.quadTo(448.00708f, 894.42395f, 448.014038f, 894.421509f); |
| 887 path.quadTo(448.043976f, 894.410889f, 448.061066f, 894.404846f); |
| 888 path.quadTo(465.596313f, 888.179932f, 473.613037f, 871.379944f); |
| 889 path.quadTo(477.351227f, 863.546143f, 478, 855.549866f); |
| 890 path.lineTo(478, 848.804321f); |
| 891 path.quadTo(477.528076f, 842.93811f, 475.421448f, 836.985962f); |
| 892 path.close(); |
| 893 SkPath pathB; |
| 894 pathB.setFillType(SkPath::kWinding_FillType); |
| 895 pathB.moveTo(405.592621f, 909.435547f); |
| 896 pathB.lineTo(390.578583f, 867.014099f); |
| 897 pathB.lineTo(433, 852.000061f); |
| 898 pathB.lineTo(490.435486f, 879.40741f); |
| 899 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 900 } |
| 901 |
| 902 #if TRY_BROKEN_TESTS |
| 903 /* this cubic/quad pair |
| 904 c = 430,280 430,278.895416 473.876068,278 528,278 |
| 905 q = 430,280 430.009796,277.101196 458.703552,275.050262 |
| 906 only intersect at the shared point (430,280) |
| 907 they sort backwards because the tangent from pt[0] to control pt[1] |
| 908 c' = (0.00000000000000000, -1.1045837402343750) |
| 909 q' = (0.0097961425781250000, -2.8988037109375000) |
| 910 suggests that the quad is counterclockwise of the cubic, when the reverse is tr
ue |
| 911 the angle code is fooled because the control pt[1] of both the quad and cubic |
| 912 is far away from cubic cntl [2] and quad pt [2]. |
| 913 Maybe in angle setup, this instability can be detected to suppress sorting on t
he initial tangent |
| 914 Or the error term can be passed to NearRay that is magnified by the distance fr
om the next ctrl? |
| 915 */ |
| 916 static void skpnaoxrane_ru23(skiatest::Reporter* reporter) { |
| 917 SkPath path; |
| 918 path.setFillType(SkPath::kEvenOdd_FillType); |
| 919 path.moveTo(458.703552f, 275.050262f); |
| 920 path.quadTo(487.41687f, 273.000702f, 528, 273); |
| 921 path.lineTo(529, 273); |
| 922 path.quadTo(530.242371f, 273.000305f, 531.121338f, 273.878693f); |
| 923 path.quadTo(531.999695f, 274.75766f, 532, 276); |
| 924 path.lineTo(532, 378); |
| 925 path.quadTo(531.990173f, 380.898804f, 503.296448f, 382.949738f); |
| 926 path.quadTo(474.58313f, 384.999298f, 434, 385); |
| 927 path.lineTo(433, 385); |
| 928 path.quadTo(431.75766f, 384.999695f, 430.878693f, 384.121307f); |
| 929 path.quadTo(430.000305f, 383.24234f, 430, 382); |
| 930 path.lineTo(430, 280); |
| 931 path.quadTo(430.009796f, 277.101196f, 458.703552f, 275.050262f); |
| 932 path.close(); |
| 933 SkPath pathB; |
| 934 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 935 pathB.moveTo(528, 278); |
| 936 pathB.lineTo(529, 278); |
| 937 pathB.cubicTo(530.65686f, 278, 532, 278, 532, 278); |
| 938 pathB.lineTo(532, 378); |
| 939 pathB.cubicTo(532, 379.104584f, 488.123932f, 380, 434, 380); |
| 940 pathB.lineTo(433, 380); |
| 941 pathB.cubicTo(431.34314f, 380, 430, 380, 430, 380); |
| 942 pathB.lineTo(430, 280); |
| 943 pathB.cubicTo(430, 278.895416f, 473.876068f, 278, 528, 278); |
| 944 pathB.close(); |
| 945 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 946 } |
| 947 |
| 948 /* didn't investigate thoroughly, but looks to be missorting quad and cubic |
| 949 {{468.507751,560.724426}, {467.275146,552.856262}, {465.84668,547.288391}} |
| 950 {{463.779907,542.671143}, {464.829529,542.672974}, {466.946289,550.755676},
{468.507751,560.724426}} |
| 951 decision maker is case 14 leftLessThanRight |
| 952 */ |
| 953 static void skptcmevents_org23(skiatest::Reporter* reporter) { |
| 954 SkPath path; |
| 955 path.setFillType(SkPath::kEvenOdd_FillType); |
| 956 path.moveTo(465.503998f, 546); |
| 957 path.lineTo(347, 546); |
| 958 path.lineTo(347, 632); |
| 959 path.lineTo(469.104248f, 632); |
| 960 path.quadTo(470.79007f, 627.638672f, 471.833496f, 621.036255f); |
| 961 path.quadTo(474.902588f, 601.562866f, 470.591064f, 574.024353f); |
| 962 path.lineTo(468.507751f, 560.724426f); |
| 963 path.quadTo(467.275146f, 552.856262f, 465.84668f, 547.288391f); |
| 964 path.quadTo(465.670349f, 546.601501f, 465.503998f, 546); |
| 965 path.close(); |
| 966 SkPath pathB; |
| 967 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 968 pathB.moveTo(363.052246f, 542.495361f); |
| 969 pathB.lineTo(463.779907f, 542.671143f); |
| 970 pathB.cubicTo(464.829529f, 542.672974f, 466.946289f, 550.755676f, 468.507751
f, 560.724426f); |
| 971 pathB.lineTo(470.591064f, 574.024353f); |
| 972 pathB.cubicTo(476.26178f, 610.226624f, 471.498932f, 639.557922f, 459.953003f
, 639.537781f); |
| 973 pathB.lineTo(368.727936f, 639.378601f); |
| 974 pathB.cubicTo(351.933868f, 639.349304f, 337.053741f, 631.244324f, 335.492249
f, 621.275574f); |
| 975 pathB.lineTo(325.968597f, 560.475708f); |
| 976 pathB.cubicTo(324.407104f, 550.506958f, 341.01001f, 542.456909f, 363.052246f
, 542.495361f); |
| 977 pathB.close(); |
| 978 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 979 } |
| 980 |
| 981 static void skpredbullskatearcade_es16(skiatest::Reporter* reporter) { |
| 982 SkPath path; |
| 983 path.setFillType(SkPath::kEvenOdd_FillType); |
| 984 path.moveTo(936.765625f, 458.965302f); |
| 985 path.cubicTo(937.028442f, 453.863251f, 933.145813f, 449.864502f, 928.093445f
, 450.033905f); |
| 986 path.lineTo(661.882263f, 458.958862f); |
| 987 path.lineTo(661.875366f, 458.959106f); |
| 988 path.cubicTo(656.828369f, 459.13205f, 652.525085f, 463.399719f, 652.258545f,
468.496124f); |
| 989 path.lineTo(652.258179f, 468.503662f); |
| 990 path.lineTo(649.021729f, 531.322754f); |
| 991 path.cubicTo(648.75885f, 536.424805f, 652.641479f, 540.423523f, 657.693848f,
540.25415f); |
| 992 path.lineTo(923.905029f, 531.329163f); |
| 993 path.cubicTo(928.955017f, 531.159851f, 933.262268f, 526.890442f, 933.528809f
, 521.791565f); |
| 994 path.lineTo(933.529175f, 521.784363f); |
| 995 path.lineTo(936.765625f, 458.965302f); |
| 996 path.close(); |
| 997 SkPath pathB; |
| 998 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 999 pathB.moveTo(661.882263f, 458.958862f); |
| 1000 pathB.lineTo(928.093445f, 450.033905f); |
| 1001 pathB.cubicTo(929.103882f, 450, 929.709961f, 454.108612f, 929.447144f, 459.2
10663f); |
| 1002 pathB.lineTo(926.210693f, 522.029724f); |
| 1003 pathB.cubicTo(926.079224f, 524.58075f, 925.153442f, 526.676208f, 924.143066f
, 526.710083f); |
| 1004 pathB.lineTo(657.931885f, 535.635071f); |
| 1005 pathB.cubicTo(652.879456f, 535.804443f, 648.890259f, 533.873779f, 649.021729
f, 531.322754f); |
| 1006 pathB.lineTo(652.258179f, 468.503662f); |
| 1007 pathB.cubicTo(652.520996f, 463.401611f, 656.829834f, 459.128235f, 661.882263
f, 458.958862f); |
| 1008 pathB.close(); |
| 1009 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1010 } |
| 1011 |
| 1012 static void skpfinanzasdigital_com9(skiatest::Reporter* reporter) { |
| 1013 SkPath path; |
| 1014 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1015 path.moveTo(156, 126); |
| 1016 path.quadTo(154.343552f, 126.000397f, 153.17157f, 127.17157f); |
| 1017 path.quadTo(152.000397f, 128.343552f, 152, 130); |
| 1018 path.lineTo(152, 174); |
| 1019 path.lineTo(1114, 174); |
| 1020 path.lineTo(1114, 130); |
| 1021 path.quadTo(1113.99963f, 128.343552f, 1112.82837f, 127.17157f); |
| 1022 path.quadTo(1111.65649f, 126.000397f, 1110, 126); |
| 1023 path.lineTo(156, 126); |
| 1024 path.close(); |
| 1025 SkPath pathB; |
| 1026 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 1027 pathB.moveTo(156, 126); |
| 1028 pathB.lineTo(1110, 126); |
| 1029 pathB.cubicTo(1111.65686f, 126, 1113, 127.790863f, 1113, 130); |
| 1030 pathB.lineTo(1113, 174); |
| 1031 pathB.lineTo(153, 174); |
| 1032 pathB.lineTo(153, 130); |
| 1033 pathB.cubicTo(153, 127.790863f, 154.34314f, 126, 156, 126); |
| 1034 pathB.close(); |
| 1035 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1036 } |
668 #endif | 1037 #endif |
669 | 1038 |
| 1039 static void skppartainasdemo250_org56(skiatest::Reporter* reporter) { |
| 1040 SkPath path; |
| 1041 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1042 path.moveTo(182.000015f, 645); |
| 1043 path.lineTo(182, 640); |
| 1044 path.cubicTo(174.322327f, 640, 166.644669f, 637.071045f, 160.786804f, 631.21
3196f); |
| 1045 path.cubicTo(149.071075f, 619.497437f, 149.071075f, 600.502563f, 160.786804f
, 588.786804f); |
| 1046 path.lineTo(157.251266f, 585.251221f); |
| 1047 path.quadTo(147, 595.502502f, 147.000015f, 610); |
| 1048 path.quadTo(147, 624.482605f, 157.230255f, 634.727722f); |
| 1049 path.quadTo(157.251251f, 634.748779f, 157.251282f, 634.748779f); |
| 1050 path.quadTo(157.282852f, 634.780334f, 157.272263f, 634.769775f); |
| 1051 path.quadTo(167.517334f, 645, 182.000015f, 645); |
| 1052 path.close(); |
| 1053 SkPath pathB; |
| 1054 pathB.setFillType(SkPath::kWinding_FillType); |
| 1055 pathB.moveTo(182, 659.497498f); |
| 1056 pathB.lineTo(206.748749f, 634.748718f); |
| 1057 pathB.lineTo(182.000015f, 610); |
| 1058 pathB.lineTo(132.502533f, 610); |
| 1059 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1060 } |
| 1061 |
| 1062 static void skpmlk_com326(skiatest::Reporter* reporter) { |
| 1063 SkPath path; |
| 1064 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1065 path.moveTo(154, 670); |
| 1066 path.cubicTo(151.238571f, 670, 149, 672.238586f, 149, 675); |
| 1067 path.lineTo(149, 710.001465f); |
| 1068 path.cubicTo(149.000809f, 712.209961f, 150.791367f, 714, 153, 714); |
| 1069 path.lineTo(189, 714); |
| 1070 path.cubicTo(191.209137f, 714, 193, 712.209167f, 193, 710); |
| 1071 path.lineTo(193, 675); |
| 1072 path.cubicTo(193, 672.238586f, 190.761429f, 670, 188, 670); |
| 1073 path.lineTo(154, 670); |
| 1074 path.close(); |
| 1075 SkPath pathB; |
| 1076 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 1077 pathB.moveTo(154, 671); |
| 1078 pathB.lineTo(188, 671); |
| 1079 pathB.cubicTo(190.761429f, 671, 193, 672.790833f, 193, 675); |
| 1080 pathB.lineTo(193, 710); |
| 1081 pathB.cubicTo(193, 712.761414f, 190.761429f, 715, 188, 715); |
| 1082 pathB.lineTo(154, 715); |
| 1083 pathB.cubicTo(151.238571f, 715, 149, 712.761414f, 149, 710); |
| 1084 pathB.lineTo(149, 675); |
| 1085 pathB.cubicTo(149, 672.790833f, 151.238571f, 671, 154, 671); |
| 1086 pathB.close(); |
| 1087 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1088 } |
| 1089 |
| 1090 static void skpcyclist_friends_gr52(skiatest::Reporter* reporter) { |
| 1091 SkPath path; |
| 1092 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1093 path.moveTo(50, 182); |
| 1094 path.lineTo(1215, 182); |
| 1095 path.lineTo(1215, 202); |
| 1096 path.quadTo(1214.99951f, 204.070572f, 1213.53552f, 205.535538f); |
| 1097 path.quadTo(1212.07056f, 206.999496f, 1210, 207); |
| 1098 path.lineTo(55, 207); |
| 1099 path.quadTo(52.9294319f, 206.999496f, 51.4644661f, 205.535538f); |
| 1100 path.quadTo(50.0004997f, 204.070572f, 50, 202); |
| 1101 path.lineTo(50, 182); |
| 1102 path.close(); |
| 1103 SkPath pathB; |
| 1104 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 1105 pathB.moveTo(50, 183); |
| 1106 pathB.lineTo(1215, 183); |
| 1107 pathB.lineTo(1215, 202); |
| 1108 pathB.cubicTo(1215, 204.761429f, 1212.76147f, 207, 1210, 207); |
| 1109 pathB.lineTo(55, 207); |
| 1110 pathB.cubicTo(52.238575f, 207, 50, 204.761429f, 50, 202); |
| 1111 pathB.lineTo(50, 183); |
| 1112 pathB.close(); |
| 1113 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1114 } |
| 1115 |
| 1116 /* cubic ends just above opp line */ |
| 1117 static void skpwww_fj_p_com_22(skiatest::Reporter* reporter) { |
| 1118 SkPath path; |
| 1119 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1120 path.moveTo(172, 201); |
| 1121 path.lineTo(172, 202); |
| 1122 path.lineTo(220, 202); |
| 1123 path.cubicTo(221.65686f, 202, 223, 200.65686f, 223, 199); |
| 1124 path.cubicTo(223, 200.104568f, 221.65686f, 201, 220, 201); |
| 1125 path.lineTo(172, 201); |
| 1126 path.close(); |
| 1127 SkPath pathB; |
| 1128 pathB.setFillType(SkPath::kWinding_FillType); |
| 1129 pathB.moveTo(161, 202); |
| 1130 pathB.lineTo(161, 199); |
| 1131 pathB.lineTo(223, 199.000015f); |
| 1132 pathB.lineTo(223, 202); |
| 1133 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1134 } |
| 1135 |
| 1136 #define TRY_SEPT_BROKEN_TESTS 0 |
| 1137 #if TRY_SEPT_BROKEN_TESTS |
| 1138 // pair of lines are not quite coincident, so sorting line/cubic fails (i think) |
| 1139 static void skpwww_lavoixdunord_fr_11(skiatest::Reporter* reporter) { |
| 1140 SkPath path; |
| 1141 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1142 path.moveTo(806, 57); |
| 1143 path.cubicTo(806, 55.3431473f, 807.34314f, 54, 809, 54); |
| 1144 path.lineTo(930, 54); |
| 1145 path.cubicTo(931.65686f, 54, 933, 55.3431473f, 933, 57); |
| 1146 path.lineTo(933, 91); |
| 1147 path.cubicTo(933, 92.6568527f, 931.65686f, 94, 930, 94); |
| 1148 path.lineTo(809, 94); |
| 1149 path.cubicTo(807.34314f, 94, 806, 92.6568527f, 806, 91); |
| 1150 path.lineTo(806, 57); |
| 1151 path.close(); |
| 1152 path.moveTo(808, 58); |
| 1153 path.cubicTo(808, 56.8954315f, 808.895447f, 56, 810, 56); |
| 1154 path.lineTo(929, 56); |
| 1155 path.cubicTo(930.104553f, 56, 931, 56.8954315f, 931, 58); |
| 1156 path.lineTo(931, 90); |
| 1157 path.cubicTo(931, 91.1045685f, 930.104553f, 92, 929, 92); |
| 1158 path.lineTo(810, 92); |
| 1159 path.cubicTo(808.895447f, 92, 808, 91.1045685f, 808, 90); |
| 1160 path.lineTo(808, 58); |
| 1161 path.close(); |
| 1162 SkPath pathB; |
| 1163 pathB.setFillType(SkPath::kWinding_FillType); |
| 1164 pathB.moveTo(806, 54); |
| 1165 pathB.lineTo(808, 56); |
| 1166 pathB.lineTo(935.02002f, 56.0200005f); |
| 1167 pathB.lineTo(933, 54); |
| 1168 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1169 } |
| 1170 |
| 1171 // pair of curves have nearly the same initial tangent but are sorting by |
| 1172 // that alone sorts them incorrectly. Need to detect that tangents are nearly |
| 1173 // identical and not reliable by themselves |
| 1174 static void skppptv_com_62(skiatest::Reporter* reporter) { |
| 1175 SkPath path; |
| 1176 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1177 path.moveTo(173, 5342); |
| 1178 path.quadTo(171.343536f, 5342.00049f, 170.17157f, 5343.17139f); |
| 1179 path.quadTo(169.000397f, 5344.34375f, 169, 5346); |
| 1180 path.lineTo(169, 5372); |
| 1181 path.lineTo(234, 5372); |
| 1182 path.lineTo(234, 5346); |
| 1183 path.quadTo(233.999603f, 5344.34375f, 232.82843f, 5343.17139f); |
| 1184 path.quadTo(231.656464f, 5342.00049f, 230, 5342); |
| 1185 path.lineTo(173, 5342); |
| 1186 path.close(); |
| 1187 SkPath pathB; |
| 1188 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 1189 pathB.moveTo(173, 5342); |
| 1190 pathB.lineTo(230, 5342); |
| 1191 pathB.cubicTo(231.65686f, 5342, 233, 5343.79102f, 233, 5346); |
| 1192 pathB.lineTo(233, 5372); |
| 1193 pathB.lineTo(169, 5372); |
| 1194 pathB.lineTo(169, 5346); |
| 1195 pathB.cubicTo(169, 5343.79102f, 170.790863f, 5342, 173, 5342); |
| 1196 pathB.close(); |
| 1197 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1198 } |
| 1199 |
| 1200 // nearly identical to lavoixdunord -- to not-quite-coincident lines |
| 1201 static void skpwww_booking_com_68(skiatest::Reporter* reporter) { |
| 1202 SkPath path; |
| 1203 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1204 path.moveTo(90, 187); |
| 1205 path.cubicTo(90, 185.34314f, 91.3431473f, 184, 93, 184); |
| 1206 path.lineTo(588, 184); |
| 1207 path.cubicTo(589.65686f, 184, 591, 185.34314f, 591, 187); |
| 1208 path.lineTo(591, 218); |
| 1209 path.cubicTo(591, 219.65686f, 589.65686f, 221, 588, 221); |
| 1210 path.lineTo(93, 221); |
| 1211 path.cubicTo(91.3431473f, 221, 90, 219.65686f, 90, 218); |
| 1212 path.lineTo(90, 187); |
| 1213 path.close(); |
| 1214 path.moveTo(92, 188); |
| 1215 path.cubicTo(92, 186.895432f, 92.8954315f, 186, 94, 186); |
| 1216 path.lineTo(587, 186); |
| 1217 path.cubicTo(588.104553f, 186, 589, 186.895432f, 589, 188); |
| 1218 path.lineTo(589, 217); |
| 1219 path.cubicTo(589, 218.104568f, 588.104553f, 219, 587, 219); |
| 1220 path.lineTo(94, 219); |
| 1221 path.cubicTo(92.8954315f, 219, 92, 218.104568f, 92, 217); |
| 1222 path.lineTo(92, 188); |
| 1223 path.close(); |
| 1224 SkPath pathB; |
| 1225 pathB.setFillType(SkPath::kWinding_FillType); |
| 1226 pathB.moveTo(90, 184); |
| 1227 pathB.lineTo(92, 186); |
| 1228 pathB.lineTo(593.02002f, 186.020004f); |
| 1229 pathB.lineTo(591, 184); |
| 1230 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1231 } |
| 1232 |
| 1233 // visually looks like lavoixdunord and www_booking_com |
| 1234 static void skpwww_despegar_com_mx_272(skiatest::Reporter* reporter) { |
| 1235 SkPath path; |
| 1236 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1237 path.moveTo(635, 1788); |
| 1238 path.cubicTo(635, 1786.34314f, 636.34314f, 1785, 638, 1785); |
| 1239 path.lineTo(832, 1785); |
| 1240 path.cubicTo(833.65686f, 1785, 835, 1786.34314f, 835, 1788); |
| 1241 path.lineTo(835, 1812); |
| 1242 path.cubicTo(835, 1813.65686f, 833.65686f, 1815, 832, 1815); |
| 1243 path.lineTo(638, 1815); |
| 1244 path.cubicTo(636.34314f, 1815, 635, 1813.65686f, 635, 1812); |
| 1245 path.lineTo(635, 1788); |
| 1246 path.close(); |
| 1247 path.moveTo(637, 1789); |
| 1248 path.cubicTo(637, 1787.89539f, 637.895447f, 1787, 639, 1787); |
| 1249 path.lineTo(831, 1787); |
| 1250 path.cubicTo(832.104553f, 1787, 833, 1787.89539f, 833, 1789); |
| 1251 path.lineTo(833, 1811); |
| 1252 path.cubicTo(833, 1812.10461f, 832.104553f, 1813, 831, 1813); |
| 1253 path.lineTo(639, 1813); |
| 1254 path.cubicTo(637.895447f, 1813, 637, 1812.10461f, 637, 1811); |
| 1255 path.lineTo(637, 1789); |
| 1256 path.close(); |
| 1257 SkPath pathB; |
| 1258 pathB.setFillType(SkPath::kWinding_FillType); |
| 1259 pathB.moveTo(835, 1785); |
| 1260 pathB.lineTo(833, 1787); |
| 1261 pathB.lineTo(832.97998f, 1817.02002f); |
| 1262 pathB.lineTo(835, 1815); |
| 1263 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1264 } |
| 1265 #endif |
| 1266 |
| 1267 static void skpwww_joomla_org_23(skiatest::Reporter* reporter) { |
| 1268 SkPath path; |
| 1269 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1270 path.moveTo(320, 347); |
| 1271 path.cubicTo(320, 344.238586f, 322.238586f, 342, 325, 342); |
| 1272 path.lineTo(416, 342); |
| 1273 path.cubicTo(418.761414f, 342, 421, 344.238586f, 421, 347); |
| 1274 path.cubicTo(421, 344.790863f, 418.761414f, 343, 416, 343); |
| 1275 path.lineTo(325, 343); |
| 1276 path.cubicTo(322.238586f, 343, 320, 344.790863f, 320, 347); |
| 1277 path.close(); |
| 1278 path.moveTo(320, 378); |
| 1279 path.cubicTo(320, 380.761414f, 322.238586f, 383, 325, 383); |
| 1280 path.lineTo(416, 383); |
| 1281 path.cubicTo(418.761414f, 383, 421, 380.761414f, 421, 378); |
| 1282 path.cubicTo(421, 380.209137f, 418.761414f, 382, 416, 382); |
| 1283 path.lineTo(325, 382); |
| 1284 path.cubicTo(322.238586f, 382, 320, 380.209137f, 320, 378); |
| 1285 path.close(); |
| 1286 SkPath pathB; |
| 1287 pathB.setFillType(SkPath::kWinding_FillType); |
| 1288 pathB.moveTo(320, 383); |
| 1289 pathB.lineTo(320, 378); |
| 1290 pathB.lineTo(421, 378.000031f); |
| 1291 pathB.lineTo(421, 383); |
| 1292 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1293 } |
| 1294 |
| 1295 static void skpwww_macrumors_com_131(skiatest::Reporter* reporter) { |
| 1296 SkPath path; |
| 1297 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1298 path.moveTo(136, 14089); |
| 1299 path.lineTo(136, 14056); |
| 1300 path.lineTo(778, 14056); |
| 1301 path.lineTo(778, 14089); |
| 1302 path.quadTo(777.999573f, 14090.6562f, 776.82843f, 14091.8281f); |
| 1303 path.quadTo(775.656433f, 14093, 774, 14093); |
| 1304 path.lineTo(140, 14093); |
| 1305 path.quadTo(138.343552f, 14093, 137.17157f, 14091.8281f); |
| 1306 path.quadTo(136.000397f, 14090.6562f, 136, 14089); |
| 1307 path.close(); |
| 1308 SkPath pathB; |
| 1309 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 1310 pathB.moveTo(136, 14057); |
| 1311 pathB.lineTo(778, 14057); |
| 1312 pathB.lineTo(778, 14089); |
| 1313 pathB.cubicTo(778, 14091.209f, 776.209167f, 14093, 774, 14093); |
| 1314 pathB.lineTo(140, 14093); |
| 1315 pathB.cubicTo(137.790863f, 14093, 136, 14091.209f, 136, 14089); |
| 1316 pathB.lineTo(136, 14057); |
| 1317 pathB.close(); |
| 1318 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1319 } |
| 1320 |
| 1321 static void skpwww_leadpages_net_84(skiatest::Reporter* reporter) { |
| 1322 SkPath path; |
| 1323 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1324 path.moveTo(377.1716f, 5910.17139f); |
| 1325 path.cubicTo(376.447723f, 5910.89551f, 376, 5911.89551f, 376, 5913); |
| 1326 path.lineTo(376, 5972); |
| 1327 path.cubicTo(376, 5974.20898f, 377.790863f, 5976, 380, 5976); |
| 1328 path.cubicTo(378.34314f, 5976, 377, 5974.20898f, 377, 5972); |
| 1329 path.lineTo(377, 5913); |
| 1330 path.cubicTo(377, 5912.17139f, 377.335785f, 5911.42188f, 377.878693f, 5910.8
7891f); |
| 1331 path.lineTo(377.1716f, 5910.17139f); |
| 1332 path.close(); |
| 1333 SkPath pathB; |
| 1334 pathB.setFillType(SkPath::kWinding_FillType); |
| 1335 pathB.moveTo(376, 5909); |
| 1336 pathB.lineTo(378.481873f, 5909); |
| 1337 pathB.lineTo(379.999878f, 5976); |
| 1338 pathB.lineTo(376, 5976); |
| 1339 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1340 } |
| 1341 |
| 1342 static void skpwww_briian_com_34(skiatest::Reporter* reporter) { |
| 1343 SkPath path; |
| 1344 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1345 path.moveTo(843, 216); |
| 1346 path.cubicTo(843, 213.238571f, 845.238586f, 211, 848, 211); |
| 1347 path.lineTo(1191, 211); |
| 1348 path.cubicTo(1193.76147f, 211, 1196, 213.238571f, 1196, 216); |
| 1349 path.lineTo(1196, 779); |
| 1350 path.cubicTo(1196, 781.761414f, 1193.76147f, 784, 1191, 784); |
| 1351 path.lineTo(848, 784); |
| 1352 path.cubicTo(845.238586f, 784, 843, 781.761414f, 843, 779); |
| 1353 path.lineTo(843, 216); |
| 1354 path.close(); |
| 1355 path.moveTo(844, 217); |
| 1356 path.cubicTo(844, 214.238571f, 846.238586f, 212, 849, 212); |
| 1357 path.lineTo(1190, 212); |
| 1358 path.cubicTo(1192.76147f, 212, 1195, 214.238571f, 1195, 217); |
| 1359 path.lineTo(1195, 778); |
| 1360 path.cubicTo(1195, 779.65686f, 1192.76147f, 781, 1190, 781); |
| 1361 path.lineTo(849, 781); |
| 1362 path.cubicTo(846.238586f, 781, 844, 779.65686f, 844, 778); |
| 1363 path.lineTo(844, 217); |
| 1364 path.close(); |
| 1365 SkPath pathB; |
| 1366 pathB.setFillType(SkPath::kWinding_FillType); |
| 1367 pathB.moveTo(843, 784); |
| 1368 pathB.lineTo(843, 779); |
| 1369 pathB.lineTo(1196, 779.000061f); |
| 1370 pathB.lineTo(1196, 784); |
| 1371 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1372 } |
| 1373 |
| 1374 |
| 1375 static void skpwww_sciality_com_100(skiatest::Reporter* reporter) { |
| 1376 SkPath path; |
| 1377 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1378 path.moveTo(162, 468); |
| 1379 path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472); |
| 1380 path.lineTo(158, 528); |
| 1381 path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532); |
| 1382 path.lineTo(275, 532); |
| 1383 path.cubicTo(277.209137f, 532, 279, 530.209106f, 279, 528); |
| 1384 path.lineTo(279, 472); |
| 1385 path.cubicTo(279, 469.790863f, 277.209137f, 468, 275, 468); |
| 1386 path.lineTo(162, 468); |
| 1387 path.close(); |
| 1388 SkPath pathB; |
| 1389 pathB.setFillType(SkPath::kWinding_FillType); |
| 1390 pathB.moveTo(275, 468); |
| 1391 pathB.cubicTo(276.65686f, 468, 278, 469.34314f, 278, 471); |
| 1392 pathB.lineTo(278, 529); |
| 1393 pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532); |
| 1394 pathB.lineTo(161, 532); |
| 1395 pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529); |
| 1396 pathB.lineTo(158, 471); |
| 1397 pathB.cubicTo(158, 469.34314f, 159.34314f, 468, 161, 468); |
| 1398 pathB.lineTo(275, 468); |
| 1399 pathB.close(); |
| 1400 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1401 } |
| 1402 |
| 1403 #if TRY_SEPT_BROKEN_TESTS |
| 1404 static void skpwww_sciality_com_101(skiatest::Reporter* reporter) { |
| 1405 SkPath path; |
| 1406 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1407 path.moveTo(162, 468); |
| 1408 path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472); |
| 1409 path.lineTo(158, 528); |
| 1410 path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532); |
| 1411 path.lineTo(275.009186f, 532); |
| 1412 path.cubicTo(276.661774f, 531.994995f, 278, 530.653748f, 278, 529); |
| 1413 path.lineTo(278, 471); |
| 1414 path.cubicTo(278, 469.346375f, 276.662079f, 468.005249f, 275.009705f, 468); |
| 1415 path.lineTo(162, 468); |
| 1416 path.close(); |
| 1417 SkPath pathB; |
| 1418 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 1419 pathB.moveTo(161, 469); |
| 1420 pathB.lineTo(275, 469); |
| 1421 pathB.cubicTo(276.65686f, 469, 278, 469.895416f, 278, 471); |
| 1422 pathB.lineTo(278, 529); |
| 1423 pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532); |
| 1424 pathB.lineTo(161, 532); |
| 1425 pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529); |
| 1426 pathB.lineTo(158, 471); |
| 1427 pathB.cubicTo(158, 469.895416f, 159.34314f, 469, 161, 469); |
| 1428 pathB.close(); |
| 1429 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1430 } |
| 1431 #endif |
| 1432 |
| 1433 static void skpwww_meb_gov_tr_5(skiatest::Reporter* reporter) { |
| 1434 SkPath path; |
| 1435 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1436 path.moveTo(137.34314f, 145.34314f); |
| 1437 path.quadTo(139.687088f, 143.000793f, 143, 143); |
| 1438 path.lineTo(242, 143); |
| 1439 path.quadTo(245.312912f, 143.000793f, 247.65686f, 145.34314f); |
| 1440 path.quadTo(249.999207f, 147.687088f, 250, 151); |
| 1441 path.lineTo(250, 177); |
| 1442 path.lineTo(135, 177); |
| 1443 path.lineTo(135, 151); |
| 1444 path.quadTo(135.000793f, 147.687088f, 137.34314f, 145.34314f); |
| 1445 path.close(); |
| 1446 SkPath pathB; |
| 1447 pathB.setFillType(SkPath::kWinding_FillType); |
| 1448 pathB.moveTo(135, 143); |
| 1449 pathB.lineTo(250, 143); |
| 1450 pathB.lineTo(250, 177); |
| 1451 pathB.lineTo(135, 177); |
| 1452 pathB.close(); |
| 1453 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1454 } |
| 1455 |
| 1456 #if TRY_SEPT_BROKEN_TESTS |
| 1457 static void skpwww_meb_gov_tr_6(skiatest::Reporter* reporter) { |
| 1458 SkPath path; |
| 1459 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1460 path.moveTo(143, 143); |
| 1461 path.quadTo(139.687088f, 143.000793f, 137.34314f, 145.34314f); |
| 1462 path.quadTo(135.000793f, 147.687088f, 135, 151); |
| 1463 path.lineTo(135, 177); |
| 1464 path.lineTo(250, 177); |
| 1465 path.lineTo(250, 151); |
| 1466 path.quadTo(249.999207f, 147.687088f, 247.65686f, 145.34314f); |
| 1467 path.quadTo(245.312912f, 143.000793f, 242, 143); |
| 1468 path.lineTo(143, 143); |
| 1469 path.close(); |
| 1470 SkPath pathB; |
| 1471 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 1472 pathB.moveTo(143, 143); |
| 1473 pathB.lineTo(242, 143); |
| 1474 pathB.cubicTo(245.865997f, 143, 249, 146.581726f, 249, 151); |
| 1475 pathB.lineTo(249, 177); |
| 1476 pathB.lineTo(135, 177); |
| 1477 pathB.lineTo(135, 151); |
| 1478 pathB.cubicTo(135, 146.581726f, 138.581726f, 143, 143, 143); |
| 1479 pathB.close(); |
| 1480 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1481 } |
| 1482 #endif |
| 1483 |
| 1484 static void skpgithub_io_25(skiatest::Reporter* reporter) { |
| 1485 SkPath path; |
| 1486 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1487 path.moveTo(1001.87866f, 14.8786793f); |
| 1488 path.quadTo(1002.75745f, 14.0001001f, 1004, 14); |
| 1489 path.lineTo(1105, 14); |
| 1490 path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f); |
| 1491 path.quadTo(1107.99988f, 15.7574596f, 1108, 17); |
| 1492 path.lineTo(1108, 41); |
| 1493 path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f); |
| 1494 path.quadTo(1106.24255f, 43.9999008f, 1105, 44); |
| 1495 path.lineTo(1004, 44); |
| 1496 path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f); |
| 1497 path.quadTo(1001.00012f, 42.2425423f, 1001, 41); |
| 1498 path.lineTo(1001, 17); |
| 1499 path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f); |
| 1500 path.close(); |
| 1501 SkPath pathB; |
| 1502 pathB.setFillType(SkPath::kInverseWinding_FillType); |
| 1503 pathB.moveTo(1005, 16); |
| 1504 pathB.lineTo(1104, 16); |
| 1505 pathB.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18); |
| 1506 pathB.lineTo(1106, 40); |
| 1507 pathB.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42); |
| 1508 pathB.lineTo(1005, 42); |
| 1509 pathB.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40); |
| 1510 pathB.lineTo(1003, 18); |
| 1511 pathB.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16); |
| 1512 pathB.close(); |
| 1513 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1514 } |
| 1515 |
| 1516 static void skpgithub_io_26(skiatest::Reporter* reporter) { |
| 1517 SkPath path; |
| 1518 path.setFillType(SkPath::kEvenOdd_FillType); |
| 1519 path.moveTo(1001.87866f, 14.8786793f); |
| 1520 path.quadTo(1002.75745f, 14.0001001f, 1004, 14); |
| 1521 path.lineTo(1105, 14); |
| 1522 path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f); |
| 1523 path.quadTo(1107.99988f, 15.7574596f, 1108, 17); |
| 1524 path.lineTo(1108, 41); |
| 1525 path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f); |
| 1526 path.quadTo(1106.24255f, 43.9999008f, 1105, 44); |
| 1527 path.lineTo(1004, 44); |
| 1528 path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f); |
| 1529 path.quadTo(1001.00012f, 42.2425423f, 1001, 41); |
| 1530 path.lineTo(1001, 17); |
| 1531 path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f); |
| 1532 path.close(); |
| 1533 path.moveTo(1003, 18); |
| 1534 path.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16); |
| 1535 path.lineTo(1104, 16); |
| 1536 path.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18); |
| 1537 path.lineTo(1106, 40); |
| 1538 path.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42); |
| 1539 path.lineTo(1005, 42); |
| 1540 path.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40); |
| 1541 path.lineTo(1003, 18); |
| 1542 path.close(); |
| 1543 SkPath pathB; |
| 1544 pathB.setFillType(SkPath::kWinding_FillType); |
| 1545 pathB.moveTo(1108, 14); |
| 1546 pathB.lineTo(1106, 16); |
| 1547 pathB.lineTo(1105.97998f, 46.0200005f); |
| 1548 pathB.lineTo(1108, 44); |
| 1549 testPathOp(reporter, path, pathB, kIntersect_PathOp); |
| 1550 } |
| 1551 |
670 static void (*firstTest)(skiatest::Reporter* ) = 0; | 1552 static void (*firstTest)(skiatest::Reporter* ) = 0; |
671 | 1553 |
672 static struct TestDesc tests[] = { | 1554 static struct TestDesc tests[] = { |
| 1555 #if TRY_SEPT_BROKEN_TESTS |
| 1556 TEST(skpwww_meb_gov_tr_6), |
| 1557 TEST(skpwww_sciality_com_101), |
| 1558 TEST(skpwww_booking_com_68), // similar to lavoixdunord |
| 1559 TEST(skpwww_despegar_com_mx_272), // similar to lavoixdunord |
| 1560 TEST(skpwww_lavoixdunord_fr_11), // not quite coincident, sorting line/cubi
c fails |
| 1561 TEST(skppptv_com_62), // cubic have nearly identical tangents, sort incorre
ctly |
| 1562 #endif |
673 #if TRY_BROKEN_TESTS | 1563 #if TRY_BROKEN_TESTS |
674 TEST(skppchappy_com_au102), | 1564 TEST(skppchappy_com_au102), |
675 TEST(skpsciality_com161), | 1565 TEST(skpsciality_com161), |
| 1566 TEST(skpi_gino_com16), |
| 1567 TEST(skpnaoxrane_ru23), // see test for failure evaluation |
| 1568 TEST(skptcmevents_org23), // see test for (partial) failure evaluation |
| 1569 TEST(skpredbullskatearcade_es16), // cubic have nearly identical tangents,
sort incorrectly |
| 1570 TEST(skpfinanzasdigital_com9), // cubic/quad tangents too close to sort |
| 1571 #endif |
| 1572 TEST(skpgithub_io_26), |
| 1573 TEST(skpgithub_io_25), |
| 1574 TEST(skpwww_meb_gov_tr_5), |
| 1575 TEST(skpwww_sciality_com_100), |
| 1576 TEST(skpwww_joomla_org_23), |
| 1577 TEST(skpwww_macrumors_com_131), |
| 1578 TEST(skpwww_briian_com_34), |
| 1579 TEST(skpwww_leadpages_net_84), |
| 1580 TEST(skpwww_fj_p_com_22), |
| 1581 TEST(skppartainasdemo250_org56), |
| 1582 TEST(skpsd_graphic_net104), |
| 1583 TEST(skpbreakmystyle_com10), |
| 1584 TEST(skpnational_com_au81), |
| 1585 TEST(skprentacheat_com30), |
| 1586 TEST(skptracksflow_com9), |
| 1587 TEST(skpautobutler_dk29), |
| 1588 TEST(skponlinecollege_org144), |
| 1589 TEST(skphostloco_com11), |
| 1590 TEST(skpsergeychunkevich_com8), |
| 1591 TEST(skpmlk_com326), |
| 1592 TEST(skpcyclist_friends_gr52), |
| 1593 TEST(skpfrauen_magazin_com83), |
| 1594 TEST(skpthesuburbanite_com213), |
676 TEST(skpsudoestenegocios_com186), | 1595 TEST(skpsudoestenegocios_com186), |
677 TEST(skpfrauen_magazin_com83), | |
678 TEST(skpi_gino_com16), | |
679 #endif | |
680 TEST(skpmtrk_uz27), | 1596 TEST(skpmtrk_uz27), |
681 TEST(skpilkoora_com37), | 1597 TEST(skpilkoora_com37), |
682 TEST(skpmm4everfriends_com43), | 1598 TEST(skpmm4everfriends_com43), |
683 TEST(skpflite_com41), | 1599 TEST(skpflite_com41), |
684 TEST(skpcheeseandburger_com225), | 1600 TEST(skpcheeseandburger_com225), |
685 TEST(skpeverytechpro_blogspot_com100), | 1601 TEST(skpeverytechpro_blogspot_com100), |
686 }; | 1602 }; |
687 | 1603 |
688 static const size_t testCount = SK_ARRAY_COUNT(tests); | 1604 static const size_t testCount = SK_ARRAY_COUNT(tests); |
689 | 1605 |
690 static bool runReverse = false; | 1606 static bool runReverse = false; |
691 static void (*stopTest)(skiatest::Reporter* ) = 0; | 1607 static void (*stopTest)(skiatest::Reporter* ) = 0; |
692 | 1608 |
693 static void PathOpsSkpTest(skiatest::Reporter* reporter) { | 1609 static void PathOpsSkpTest(skiatest::Reporter* reporter) { |
694 #if DEBUG_SHOW_TEST_NAME | 1610 #if DEBUG_SHOW_TEST_NAME |
695 strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH); | 1611 strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH); |
696 #endif | 1612 #endif |
697 RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse); | 1613 RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse); |
698 } | 1614 } |
699 | 1615 |
700 #include "TestClassDef.h" | 1616 #include "TestClassDef.h" |
701 | 1617 |
702 DEFINE_TESTCLASS_SHORT(PathOpsSkpTest) | 1618 DEFINE_TESTCLASS_SHORT(PathOpsSkpTest) |
OLD | NEW |