Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: tests/PathOpsSkpTest.cpp

Issue 52653002: pathops work in progress (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: add raster vs gpu test Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/PathOpsSkpClipTest.cpp ('k') | tests/PathOpsThreadedCommon.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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)
OLDNEW
« no previous file with comments | « tests/PathOpsSkpClipTest.cpp ('k') | tests/PathOpsThreadedCommon.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698