blob: 86fe6058a1462767bed7a5ebdb532dfcfa811e83 [file] [log] [blame]
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7#include "PathOpsExtendedTest.h"
8
tfarina@chromium.org78e7b4e2014-01-02 21:45:03 +00009#include "TestClassDef.h"
10
caryclark@google.com7eaa53d2013-10-02 14:49:34 +000011#define TEST(name) { name, #name }
12
13static void skpcheeseandburger_com225(skiatest::Reporter* reporter) {
14 SkPath path;
15 path.setFillType(SkPath::kEvenOdd_FillType);
16 path.moveTo(555, 468);
17 path.lineTo(555, 362);
18 path.lineTo(872, 362);
19 path.lineTo(872, 468);
20 path.lineTo(555, 468);
21 path.close();
22 SkPath pathB;
23 pathB.setFillType(SkPath::kWinding_FillType);
24 pathB.moveTo(859.11792f, 397.320343f);
25 pathB.cubicTo(855.523071f, 399.691284f, 853.721191f, 402.40863f, 853.721191f, 405.552216f);
26 pathB.cubicTo(853.721191f, 407.911163f, 854.727478f, 410.115387f, 857.043518f, 412.252716f);
27 pathB.cubicTo(859.920532f, 414.916138f, 862.704773f, 417.086426f, 864.679382f, 418.852386f);
28 pathB.cubicTo(866.382446f, 420.371765f, 867.19104f, 422.108795f, 867.19104f, 423.506378f);
29 pathB.cubicTo(867.19104f, 424.551605f, 866.741821f, 425.539886f, 865.935242f, 426.281616f);
30 pathB.cubicTo(865.250366f, 426.910553f, 864.662415f, 427.339813f, 864.139282f, 427.4646f);
31 pathB.cubicTo(863.536377f, 427.605347f, 862.259521f, 426.491272f, 860.366821f, 424.208191f);
32 pathB.cubicTo(858.345276f, 421.770355f, 857.317017f, 419.733856f, 857.317017f, 417.98587f);
33 pathB.cubicTo(857.317017f, 417.198212f, 857.942993f, 415.930389f, 857.942993f, 415.930389f);
34 pathB.cubicTo(857.942993f, 415.930389f, 852.106018f, 421.296173f, 852.279663f, 422.549042f);
35 pathB.cubicTo(852.462402f, 423.890747f, 853.669312f, 425.703613f, 855.876465f, 428.252258f);
36 pathB.cubicTo(858.038818f, 430.754944f, 859.4953f, 431.840088f, 860.190125f, 431.594513f);
37 pathB.cubicTo(862.571045f, 430.754944f, 865.48999f, 429.237549f, 868.44397f, 427.018372f);
38 pathB.cubicTo(870.505371f, 425.470032f, 871.582581f, 423.534332f, 871.582581f, 421.001678f);
39 pathB.cubicTo(871.582581f, 417.945923f, 870.056213f, 415.171692f, 867.015381f, 412.640045f);
40 pathB.cubicTo(863.683105f, 409.872803f, 861.445923f, 408.027954f, 860.551514f, 407.140503f);
41 pathB.cubicTo(858.660767f, 405.264709f, 857.765259f, 403.50174f, 857.765259f, 402.187988f);
42 pathB.cubicTo(857.765259f, 401.141785f, 858.339355f, 400.394073f, 859.476318f, 399.925873f);
43 pathB.cubicTo(860.004395f, 399.704254f, 861.270264f, 400.515869f, 863.156006f, 402.36969f);
44 pathB.cubicTo(865.094727f, 404.28241f, 866.203796f, 405.565186f, 866.383484f, 406.130219f);
45 pathB.cubicTo(868.250244f, 404.305359f, 869.179688f, 403.397919f, 871.046509f, 401.58902f);
46 pathB.cubicTo(868.26825f, 399.296967f, 864.431824f, 394.705841f, 863.156006f, 394.600037f);
47 pathB.cubicTo(863.145996f, 394.600037f, 863.136108f, 394.59903f, 863.126099f, 394.59903f);
48 pathB.cubicTo(862.352417f, 394.598022f, 859.909607f, 396.79425f, 859.11792f, 397.320343f);
49 pathB.moveTo(832.164246f, 394.307526f);
50 pathB.cubicTo(832.451721f, 394.425323f, 832.598511f, 394.486206f, 832.886963f, 394.605011f);
51 pathB.cubicTo(834.078979f, 395.474518f, 834.674927f, 395.90979f, 835.867859f, 396.781281f);
52 pathB.cubicTo(836.502808f, 397.325348f, 836.863159f, 398.000183f, 836.863159f, 398.964539f);
53 pathB.lineTo(836.863159f, 419.740845f);
54 pathB.cubicTo(836.863159f, 420.876923f, 836.319092f, 422.17868f, 835.055298f, 423.617188f);
55 pathB.cubicTo(836.39502f, 424.512665f, 837.063843f, 424.961884f, 838.39856f, 425.864349f);
56 pathB.cubicTo(839.477661f, 426.578125f, 841.37439f, 427.27594f, 842.275879f, 427.443634f);
57 pathB.cubicTo(842.999634f, 427.574402f, 843.82019f, 427.513519f, 844.354309f, 427.216034f);
58 pathB.cubicTo(846.956787f, 425.765503f, 848.689819f, 423.588257f, 848.58606f, 423.483429f);
59 pathB.cubicTo(848.58606f, 423.483429f, 846.877991f, 423.327698f, 845.971558f, 422.807587f);
60 pathB.cubicTo(845.253784f, 422.284485f, 844.892395f, 422.022949f, 844.171631f, 421.502838f);
61 pathB.cubicTo(843.361023f, 420.915833f, 842.907837f, 420.308899f, 842.907837f, 419.350525f);
62 pathB.lineTo(842.907837f, 399.445709f);
63 pathB.cubicTo(842.907837f, 398.053101f, 843.272217f, 397.417175f, 843.812256f, 397.518005f);
64 pathB.cubicTo(844.170654f, 397.583893f, 844.711731f, 398.122986f, 845.432495f, 398.782837f);
65 pathB.cubicTo(846.116333f, 399.402771f, 846.459717f, 399.709259f, 847.14856f, 400.3302f);
66 pathB.cubicTo(844.986206f, 402.099152f, 843.988892f, 403.926025f, 843.988892f, 405.932556f);
67 pathB.cubicTo(843.988892f, 410.209229f, 848.272583f, 410.951935f, 849.576355f, 408.394348f);
68 pathB.cubicTo(849.871826f, 407.816345f, 850.421875f, 406.214081f, 850.387939f, 406.196106f);
69 pathB.cubicTo(850.387939f, 406.196106f, 849.305786f, 406.771118f, 848.495239f, 406.615387f);
70 pathB.cubicTo(846.96582f, 406.316895f, 846.153198f, 405.46637f, 846.153198f, 403.89505f);
71 pathB.cubicTo(846.153198f, 401.796661f, 848.50116f, 399.09729f, 852.279663f, 396.270142f);
72 pathB.cubicTo(851.014893f, 395.315796f, 847.723511f, 391.546265f, 846.875f, 391.546265f);
73 pathB.cubicTo(846.330933f, 391.546265f, 843.988892f, 394.403351f, 843.273193f, 394.972382f);
74 pathB.cubicTo(840.889282f, 392.886963f, 839.700317f, 391.850739f, 837.312378f, 389.786285f);
75 pathB.cubicTo(835.257935f, 391.589203f, 834.225708f, 392.491638f, 832.164246f, 394.307526f);
76 pathB.moveTo(818.860107f, 392.707275f);
77 pathB.cubicTo(819.857361f, 393.382111f, 822.302124f, 395.764038f, 824.387573f, 397.051819f);
78 pathB.cubicTo(822.57666f, 398.249756f, 820.582092f, 399.687286f, 818.860107f, 400.827332f);
79 pathB.lineTo(818.860107f, 392.707275f);
80 pathB.close();
81 pathB.moveTo(810.69812f, 391.096039f);
82 pathB.cubicTo(810.69812f, 391.096039f, 812.786499f, 394.093903f, 812.786499f, 394.965393f);
83 pathB.lineTo(812.786499f, 415.743713f);
84 pathB.cubicTo(812.786499f, 417.753265f, 811.881042f, 418.497986f, 810.974609f, 419.769806f);
85 pathB.cubicTo(813.948486f, 421.160431f, 815.437988f, 421.864197f, 818.404846f, 423.283783f);
86 pathB.cubicTo(819.948181f, 423.95462f, 822.417969f, 424.592529f, 823.937317f, 423.782928f);
87 pathB.cubicTo(827.905518f, 421.663544f, 831.53125f, 417.600525f, 832.255005f, 415.191681f);
88 pathB.cubicTo(833.882263f, 409.877808f, 823.095825f, 411.495026f, 823.119751f, 411.518982f);
89 pathB.cubicTo(823.119751f, 411.518982f, 832.000488f, 411.874359f, 830.537964f, 416.29776f);
90 pathB.cubicTo(829.888123f, 418.253418f, 827.278564f, 420.292908f, 825.385864f, 419.55719f);
91 pathB.cubicTo(821.14209f, 417.915985f, 818.861023f, 417.414856f, 818.861023f, 414.970032f);
92 pathB.lineTo(818.861023f, 403.096436f);
93 pathB.cubicTo(822.126404f, 399.132233f, 831.289673f, 395.897797f, 831.356567f, 395.657227f);
94 pathB.cubicTo(831.356567f, 395.657227f, 823.022888f, 387.594055f, 821.763062f, 387.476257f);
95 pathB.cubicTo(821.755066f, 387.47525f, 821.746094f, 387.47525f, 821.737061f, 387.47525f);
96 pathB.cubicTo(820.793701f, 387.47525f, 810.72406f, 390.967255f, 810.69812f, 391.096039f);
97 pathB.moveTo(624.254211f, 390.498077f);
98 pathB.cubicTo(625.252502f, 390.893402f, 627.708252f, 392.592468f, 629.796692f, 393.307251f);
99 pathB.cubicTo(627.978821f, 395.006317f, 625.980225f, 397.000916f, 624.254211f, 398.618134f);
100 pathB.lineTo(624.254211f, 390.498077f);
101 pathB.close();
102 pathB.moveTo(627.160217f, 384.460449f);
103 pathB.cubicTo(626.286743f, 384.51535f, 616.076233f, 390.993225f, 616.086243f, 391.141968f);
104 pathB.cubicTo(616.086243f, 391.141968f, 618.173645f, 393.561798f, 618.173645f, 394.437317f);
105 pathB.lineTo(618.173645f, 415.216614f);
106 pathB.cubicTo(618.173645f, 417.222168f, 617.265198f, 418.219482f, 616.355774f, 419.742859f);
107 pathB.cubicTo(619.331665f, 420.307892f, 620.824097f, 420.599396f, 623.802979f, 421.198364f);
108 pathB.cubicTo(625.346313f, 421.437958f, 627.818115f, 421.39801f, 629.342468f, 420.166138f);
109 pathB.cubicTo(633.340576f, 416.939667f, 636.982361f, 411.871368f, 637.714111f, 409.263855f);
110 pathB.cubicTo(639.348267f, 403.500732f, 628.508911f, 408.111816f, 628.52887f, 408.126801f);
111 pathB.cubicTo(628.52887f, 408.126801f, 637.468506f, 405.998444f, 635.985046f, 410.844147f);
112 pathB.cubicTo(635.332153f, 412.984467f, 632.705688f, 415.748718f, 630.801941f, 415.541077f);
113 pathB.cubicTo(626.537292f, 415.072876f, 624.257202f, 415.202667f, 624.257202f, 412.755859f);
114 pathB.cubicTo(624.257202f, 408.007019f, 624.255188f, 405.636078f, 624.255188f, 400.884247f);
115 pathB.cubicTo(627.525574f, 396.016602f, 636.801636f, 390.283447f, 636.801636f, 389.97995f);
116 pathB.cubicTo(636.801636f, 389.97995f, 628.360168f, 384.458435f, 627.18219f, 384.458435f);
117 pathB.cubicTo(627.174194f, 384.460449f, 627.167236f, 384.460449f, 627.160217f, 384.460449f);
118 pathB.moveTo(796.530396f, 416.438538f);
119 pathB.cubicTo(795.892517f, 416.365662f, 794.527832f, 415.589996f, 792.348572f, 414.036652f);
120 pathB.lineTo(792.348572f, 391.425476f);
121 pathB.cubicTo(792.348572f, 390.465118f, 792.530273f, 390.047852f, 792.89563f, 390.088776f);
122 pathB.cubicTo(793.075317f, 390.109741f, 793.3479f, 390.317383f, 793.804077f, 390.629852f);
123 pathB.cubicTo(795.113831f, 391.585205f, 795.768738f, 392.059387f, 797.077515f, 393.018738f);
124 pathB.cubicTo(797.983948f, 393.648651f, 798.348267f, 394.219666f, 798.348267f, 394.742767f);
125 pathB.lineTo(798.348267f, 413.253998f);
126 pathB.cubicTo(798.348267f, 415.391327f, 797.783264f, 416.451508f, 796.728088f, 416.451508f);
127 pathB.cubicTo(796.664185f, 416.4505f, 796.598267f, 416.446533f, 796.530396f, 416.438538f);
128 pathB.moveTo(795.165771f, 383.714722f);
129 pathB.cubicTo(794.022705f, 383.851471f, 783.959961f, 388.652252f, 783.880127f, 388.873871f);
130 pathB.cubicTo(783.880127f, 388.873871f, 785.054077f, 389.871155f, 785.522339f, 390.606873f);
131 pathB.cubicTo(786.000488f, 391.361603f, 786.246094f, 391.9935f, 786.246094f, 392.427765f);
132 pathB.lineTo(786.246094f, 411.987183f);
133 pathB.cubicTo(786.246094f, 413.733185f, 784.160645f, 416.428558f, 784.246521f, 416.759979f);
134 pathB.cubicTo(784.258484f, 416.79892f, 785.432495f, 417.14032f, 785.793823f, 417.350952f);
135 pathB.cubicTo(786.739258f, 417.937958f, 787.213379f, 418.228455f, 788.161804f, 418.821442f);
136 pathB.cubicTo(789.342773f, 419.554199f, 790.619568f, 419.956482f, 791.892395f, 420.098236f);
137 pathB.cubicTo(794.533813f, 420.390747f, 796.717102f, 419.337555f, 798.349304f, 416.999573f);
138 pathB.lineTo(798.349304f, 425.212463f);
139 pathB.cubicTo(797.94696f, 425.47702f, 797.750305f, 425.609772f, 797.356018f, 425.874329f);
140 pathB.cubicTo(795.259583f, 423.619202f, 792.806824f, 422.286499f, 789.985657f, 421.984009f);
141 pathB.cubicTo(785.157959f, 421.463898f, 780.409119f, 428.344086f, 780.423096f, 428.346069f);
142 pathB.cubicTo(780.423096f, 428.346069f, 783.340088f, 424.960907f, 785.889709f, 425.218445f);
143 pathB.cubicTo(789.25592f, 425.565857f, 793.166199f, 430.745972f, 793.805115f, 430.790894f);
144 pathB.cubicTo(793.940857f, 430.798889f, 795.918457f, 429.091797f, 798.454102f, 427.383728f);
145 pathB.cubicTo(801.049683f, 425.635742f, 804.230225f, 423.886749f, 806.619141f, 423.980591f);
146 pathB.cubicTo(805.621826f, 423.586243f, 805.048828f, 423.074127f, 804.804199f, 422.609924f);
147 pathB.cubicTo(804.616577f, 422.25354f, 804.616577f, 421.539764f, 804.616577f, 420.31488f);
148 pathB.cubicTo(804.623535f, 411.732605f, 804.623535f, 403.147339f, 804.623535f, 394.562073f);
149 pathB.cubicTo(804.623535f, 392.464691f, 805.970215f, 391.000183f, 805.984192f, 390.896362f);
150 pathB.cubicTo(805.984192f, 390.896362f, 796.785034f, 383.7117f, 795.219666f, 383.7117f);
151 pathB.cubicTo(795.19873f, 383.712708f, 795.181763f, 383.712708f, 795.165771f, 383.714722f);
152 pathB.moveTo(648.092285f, 387.883545f);
153 pathB.cubicTo(649.095581f, 388.312805f, 651.55835f, 390.099762f, 653.655701f, 390.884399f);
154 pathB.cubicTo(651.831848f, 392.522583f, 649.82428f, 394.447296f, 648.092285f, 396.003601f);
155 pathB.lineTo(648.092285f, 387.883545f);
156 pathB.close();
157 pathB.moveTo(651.009277f, 381.943756f);
158 pathB.cubicTo(650.147766f, 381.983704f, 639.893372f, 388.105164f, 639.899353f, 388.254913f);
159 pathB.cubicTo(639.899353f, 388.254913f, 641.987793f, 390.744659f, 641.987793f, 391.617157f);
160 pathB.lineTo(641.987793f, 412.399475f);
161 pathB.cubicTo(641.987793f, 414.409027f, 641.082336f, 415.369354f, 640.169861f, 416.864807f);
162 pathB.cubicTo(643.155762f, 417.53064f, 644.650208f, 417.87207f, 647.638062f, 418.573853f);
163 pathB.cubicTo(649.188416f, 418.865356f, 651.666138f, 418.908295f, 653.19751f, 417.725311f);
164 pathB.cubicTo(657.204651f, 414.633636f, 660.859375f, 409.690125f, 661.590088f, 407.106567f);
165 pathB.cubicTo(663.231262f, 401.397339f, 652.356934f, 405.644073f, 652.375916f, 405.663025f);
166 pathB.cubicTo(652.375916f, 405.663025f, 661.338562f, 403.835175f, 659.857056f, 408.632935f);
167 pathB.cubicTo(659.199219f, 410.748291f, 656.568726f, 413.424713f, 654.656982f, 413.151184f);
168 pathB.cubicTo(650.381348f, 412.536224f, 648.092285f, 412.591125f, 648.092285f, 410.146332f);
169 pathB.lineTo(648.092285f, 398.270721f);
170 pathB.cubicTo(651.374634f, 393.5159f, 660.66571f, 388.09021f, 660.674683f, 387.791718f);
171 pathB.cubicTo(660.674683f, 387.791718f, 652.188232f, 381.941772f, 651.022278f, 381.942749f);
172 pathB.cubicTo(651.01825f, 381.942749f, 651.013245f, 381.942749f, 651.009277f, 381.943756f);
173 pathB.moveTo(761.636353f, 385.965851f);
174 pathB.cubicTo(761.927856f, 386.056702f, 762.071594f, 386.098633f, 762.363098f, 386.189453f);
175 pathB.cubicTo(763.570007f, 386.938171f, 764.175964f, 387.311554f, 765.376892f, 388.066254f);
176 pathB.cubicTo(766.019775f, 388.546417f, 766.384155f, 389.184326f, 766.384155f, 390.147675f);
177 pathB.lineTo(766.384155f, 410.924011f);
178 pathB.cubicTo(766.384155f, 412.057037f, 765.836121f, 413.410736f, 764.559326f, 414.979034f);
179 pathB.cubicTo(765.911987f, 415.738739f, 766.579834f, 416.12207f, 767.934509f, 416.887756f);
180 pathB.cubicTo(769.029602f, 417.495728f, 770.944336f, 418.000854f, 771.85675f, 418.075714f);
181 pathB.cubicTo(772.58551f, 418.134613f, 773.413086f, 417.987854f, 773.950195f, 417.638458f);
182 pathB.cubicTo(776.583618f, 415.917419f, 778.332642f, 413.564453f, 778.237793f, 413.473633f);
183 pathB.cubicTo(778.237793f, 413.473633f, 776.507812f, 413.497559f, 775.596313f, 413.066315f);
184 pathB.cubicTo(774.866577f, 412.61908f, 774.497253f, 412.39447f, 773.771484f, 411.951233f);
185 pathB.cubicTo(772.947876f, 411.444092f, 772.493652f, 410.877075f, 772.493652f, 409.919708f);
186 pathB.lineTo(772.493652f, 390.013885f);
187 pathB.cubicTo(772.493652f, 388.618286f, 772.860046f, 387.949432f, 773.407104f, 387.995361f);
188 pathB.cubicTo(773.771484f, 388.026306f, 774.318542f, 388.509491f, 775.049316f, 389.09848f);
189 pathB.cubicTo(775.742065f, 389.646515f, 776.088501f, 389.923065f, 776.77533f, 390.470123f);
190 pathB.cubicTo(774.590088f, 392.45871f, 773.589783f, 394.385376f, 773.589783f, 396.395935f);
191 pathB.cubicTo(773.589783f, 400.673584f, 777.907349f, 401.008026f, 779.237122f, 398.292694f);
192 pathB.cubicTo(779.539551f, 397.684723f, 780.089661f, 396.027557f, 780.058716f, 396.01358f);
193 pathB.cubicTo(780.058716f, 396.01358f, 778.970581f, 396.694427f, 778.149963f, 396.618561f);
194 pathB.cubicTo(776.598633f, 396.4758f, 775.775024f, 395.709106f, 775.775024f, 394.13681f);
195 pathB.cubicTo(775.775024f, 392.042419f, 778.149963f, 389.103455f, 781.973389f, 385.892975f);
196 pathB.cubicTo(780.697571f, 385.06839f, 777.326416f, 381.676208f, 776.506775f, 381.719147f);
197 pathB.cubicTo(775.908813f, 381.747101f, 773.588806f, 384.868744f, 772.860046f, 385.506622f);
198 pathB.cubicTo(770.451172f, 383.664795f, 769.248291f, 382.749359f, 766.843384f, 380.929504f);
199 pathB.cubicTo(764.758972f, 382.934052f, 763.716736f, 383.940338f, 761.636353f, 385.965851f);
200 pathB.moveTo(672.996521f, 379.821411f);
201 pathB.cubicTo(672.123047f, 379.891266f, 669.7052f, 382.898132f, 668.887573f, 383.64682f);
202 pathB.cubicTo(665.239868f, 386.999084f, 663.41095f, 390.213562f, 663.41095f, 393.356171f);
203 pathB.cubicTo(663.41095f, 395.715118f, 664.439209f, 397.642792f, 666.785156f, 399.150208f);
204 pathB.cubicTo(669.702148f, 401.02002f, 672.547302f, 402.439575f, 674.545837f, 403.655487f);
205 pathB.cubicTo(676.261902f, 404.697693f, 677.105469f, 406.231049f, 677.105469f, 407.625671f);
206 pathB.cubicTo(677.105469f, 408.671875f, 676.651245f, 409.777954f, 675.825684f, 410.7453f);
207 pathB.cubicTo(675.12384f, 411.569885f, 674.538879f, 412.145905f, 673.997803f, 412.417419f);
208 pathB.cubicTo(673.38385f, 412.724915f, 672.080078f, 411.958221f, 670.166382f, 410.198242f);
209 pathB.cubicTo(668.113892f, 408.319458f, 667.062683f, 406.55249f, 667.062683f, 404.808502f);
210 pathB.cubicTo(667.062683f, 404.020844f, 667.701599f, 402.580322f, 667.701599f, 402.580322f);
211 pathB.cubicTo(667.701599f, 402.580322f, 661.773804f, 409.542358f, 661.951477f, 410.7453f);
212 pathB.cubicTo(662.13916f, 412.037079f, 663.368042f, 413.524536f, 665.60321f, 415.469208f);
213 pathB.cubicTo(667.791443f, 417.368927f, 669.261963f, 418.074738f, 669.983704f, 417.630493f);
214 pathB.cubicTo(672.412537f, 416.138062f, 675.369446f, 413.822021f, 678.385254f, 410.790222f);
215 pathB.cubicTo(680.485657f, 408.677856f, 681.587769f, 406.446686f, 681.587769f, 403.917023f);
216 pathB.cubicTo(681.587769f, 400.859283f, 680.007446f, 398.490356f, 676.923767f, 396.806244f);
217 pathB.cubicTo(673.540588f, 394.957428f, 671.257507f, 393.71756f, 670.351074f, 393.075653f);
218 pathB.cubicTo(668.434326f, 391.71698f, 667.518921f, 390.193604f, 667.518921f, 388.88385f);
219 pathB.cubicTo(667.518921f, 387.837646f, 668.101929f, 386.934204f, 669.25592f, 386.156525f);
220 pathB.cubicTo(669.796997f, 385.788147f, 671.085815f, 386.257355f, 672.997498f, 387.592072f);
221 pathB.cubicTo(674.966125f, 388.968689f, 676.104187f, 389.951019f, 676.284851f, 390.465118f);
222 pathB.cubicTo(678.186584f, 388.130127f, 679.136963f, 386.966125f, 681.035706f, 384.646118f);
223 pathB.cubicTo(678.244507f, 383.133728f, 674.247375f, 379.819397f, 673.044434f, 379.819397f);
224 pathB.cubicTo(673.027466f, 379.819397f, 673.011475f, 379.820404f, 672.996521f, 379.821411f);
225 pathB.moveTo(732.95459f, 384.60318f);
226 pathB.cubicTo(733.246094f, 384.680054f, 733.391846f, 384.720001f, 733.689331f, 384.794861f);
227 pathB.cubicTo(735.072937f, 385.500641f, 735.769714f, 385.856049f, 737.162354f, 386.563812f);
228 pathB.cubicTo(737.891113f, 386.938171f, 738.164612f, 387.642975f, 738.164612f, 388.6073f);
229 pathB.lineTo(738.164612f, 408.510132f);
230 pathB.cubicTo(738.164612f, 410.257141f, 737.709412f, 411.893341f, 736.064209f, 413.416718f);
231 pathB.cubicTo(737.635498f, 414.235321f, 738.419189f, 414.651611f, 739.991455f, 415.475189f);
232 pathB.cubicTo(740.997742f, 416.034241f, 742.186707f, 416.344696f, 743.098145f, 416.379639f);
233 pathB.cubicTo(743.830872f, 416.410583f, 744.476807f, 416.175964f, 745.019836f, 415.851532f);
234 pathB.cubicTo(746.476318f, 414.977051f, 748.58075f, 413.571442f, 749.225647f, 413.079285f);
235 pathB.cubicTo(751.012573f, 414.253296f, 751.907043f, 414.845276f, 753.69696f, 416.028229f);
236 pathB.cubicTo(754.703247f, 416.610229f, 755.706543f, 416.84082f, 756.528076f, 416.892761f);
237 pathB.cubicTo(757.259827f, 416.93866f, 757.996582f, 416.807892f, 758.537659f, 416.494446f);
238 pathB.cubicTo(760.814758f, 415.174713f, 762.185425f, 413.509552f, 762.552734f, 412.830719f);
239 pathB.cubicTo(761.637329f, 412.681976f, 759.633789f, 411.58786f, 759.263428f, 411.387207f);
240 pathB.cubicTo(758.607544f, 410.994873f, 758.279114f, 410.803223f, 757.621216f, 410.413879f);
241 pathB.cubicTo(756.983276f, 410.020538f, 756.616943f, 409.301788f, 756.616943f, 408.343445f);
242 pathB.lineTo(756.616943f, 388.351746f);
243 pathB.cubicTo(756.616943f, 387.387421f, 757.164978f, 386.548859f, 758.627502f, 385.067383f);
244 pathB.cubicTo(755.523804f, 383.05484f, 753.97052f, 382.057556f, 750.862854f, 380.078949f);
245 pathB.cubicTo(749.001038f, 382.112457f, 748.069641f, 383.130707f, 746.207825f, 385.174194f);
246 pathB.cubicTo(746.501343f, 385.292999f, 746.647095f, 385.353912f, 746.939575f, 385.472687f);
247 pathB.cubicTo(747.996765f, 386.183472f, 748.525879f, 386.538879f, 749.587036f, 387.257629f);
248 pathB.cubicTo(750.224915f, 387.724823f, 750.498474f, 388.351746f, 750.498474f, 389.223267f);
249 pathB.lineTo(750.498474f, 407.822327f);
250 pathB.cubicTo(750.498474f, 408.694824f, 750.339722f, 409.955658f, 749.951416f, 410.847137f);
251 pathB.cubicTo(749.550049f, 411.761566f, 749.039978f, 411.585876f, 748.487915f, 411.560913f);
252 pathB.cubicTo(747.393799f, 411.503998f, 746.385498f, 410.53067f, 745.473083f, 410.022552f);
253 pathB.cubicTo(744.760254f, 409.627228f, 744.380981f, 409.013275f, 744.380981f, 407.965088f);
254 pathB.lineTo(744.380981f, 386.840363f);
255 pathB.cubicTo(744.380981f, 385.791138f, 744.833191f, 384.763916f, 745.657776f, 383.839508f);
256 pathB.cubicTo(742.656921f, 382.101501f, 741.161499f, 381.234985f, 738.162659f, 379.525909f);
257 pathB.cubicTo(736.083191f, 381.548431f, 735.039978f, 382.562683f, 732.95459f, 384.60318f);
258 pathB.moveTo(692.546936f, 385.171204f);
259 pathB.cubicTo(693.552246f, 385.667358f, 696.018005f, 387.607025f, 698.122375f, 388.521454f);
260 pathB.cubicTo(696.293518f, 390.043854f, 694.281982f, 391.844757f, 692.546936f, 393.294281f);
261 pathB.lineTo(692.546936f, 385.171204f);
262 pathB.close();
263 pathB.moveTo(695.4729f, 379.417084f);
264 pathB.cubicTo(694.635376f, 379.426086f, 684.32605f, 384.880707f, 684.322083f, 385.025452f);
265 pathB.cubicTo(684.322083f, 385.025452f, 686.422485f, 387.645966f, 686.422485f, 388.521454f);
266 pathB.lineTo(686.422485f, 409.300781f);
267 pathB.cubicTo(686.422485f, 411.312347f, 685.51001f, 412.21579f, 684.595581f, 413.65033f);
268 pathB.cubicTo(687.592468f, 414.504852f, 689.089905f, 414.945099f, 692.088745f, 415.833557f);
269 pathB.cubicTo(693.645081f, 416.221893f, 696.128784f, 416.420563f, 697.667114f, 415.334412f);
270 pathB.cubicTo(701.67926f, 412.494293f, 705.344971f, 407.783386f, 706.077698f, 405.240753f);
271 pathB.cubicTo(707.721924f, 399.638367f, 696.822632f, 403.198273f, 696.845581f, 403.216248f);
272 pathB.cubicTo(696.845581f, 403.216248f, 705.825134f, 401.960388f, 704.337708f, 406.658325f);
273 pathB.cubicTo(703.683838f, 408.733765f, 701.044373f, 411.241455f, 699.129639f, 410.847137f);
274 pathB.cubicTo(694.843018f, 409.968628f, 692.545959f, 409.876801f, 692.545959f, 407.432983f);
275 pathB.lineTo(692.545959f, 395.563354f);
276 pathB.cubicTo(695.838318f, 391.012177f, 705.134338f, 386.160522f, 705.162292f, 385.873993f);
277 pathB.cubicTo(705.162292f, 385.873993f, 696.635925f, 379.416107f, 695.473938f, 379.417084f);
278 pathB.cubicTo(695.474915f, 379.417084f, 695.473938f, 379.417084f, 695.4729f, 379.417084f);
279 pathB.moveTo(570.463562f, 420.81601f);
280 pathB.lineTo(570.463562f, 402.922729f);
281 pathB.cubicTo(571.039551f, 402.800934f, 571.327087f, 402.743042f, 571.901123f, 402.625244f);
282 pathB.lineTo(571.901123f, 423.142029f);
283 pathB.cubicTo(570.911804f, 422.823578f, 570.463562f, 422.123779f, 570.463562f, 420.81601f);
284 pathB.moveTo(570.463562f, 384.062134f);
285 pathB.cubicTo(571.039551f, 384.149963f, 571.327087f, 384.198883f, 571.901123f, 384.290741f);
286 pathB.lineTo(571.901123f, 401.580048f);
287 pathB.cubicTo(571.327087f, 401.695862f, 571.039551f, 401.756744f, 570.463562f, 401.874542f);
288 pathB.lineTo(570.463562f, 384.062134f);
289 pathB.close();
290 pathB.moveTo(573.880676f, 376.556f);
291 pathB.cubicTo(572.483093f, 376.996246f, 561.476013f, 385.624451f, 561.482971f, 385.70929f);
292 pathB.cubicTo(561.482971f, 385.70929f, 563.637268f, 388.554413f, 563.637268f, 389.688446f);
293 pathB.lineTo(563.637268f, 398.423462f);
294 pathB.cubicTo(556.411682f, 399.838043f, 555.429382f, 404.307373f, 555.418396f, 405.679993f);
295 pathB.lineTo(555.418396f, 405.724915f);
296 pathB.cubicTo(555.42041f, 405.94455f, 555.448364f, 406.073334f, 555.477295f, 406.083313f);
297 pathB.cubicTo(555.477295f, 406.083313f, 558.070862f, 404.250458f, 563.637268f, 403.222229f);
298 pathB.lineTo(563.637268f, 404.797516f);
299 pathB.cubicTo(556.993713f, 406.233063f, 555.191772f, 412.494293f, 555.569153f, 412.614105f);
300 pathB.cubicTo(555.569153f, 412.614105f, 561.572815f, 410.21521f, 563.637268f, 409.598267f);
301 pathB.lineTo(563.637268f, 424.00354f);
302 pathB.cubicTo(563.637268f, 426.357483f, 563.36676f, 427.901855f, 562.291565f, 429.70874f);
303 pathB.cubicTo(565.448181f, 430.067139f, 567.028442f, 430.256805f, 570.192017f, 430.653137f);
304 pathB.cubicTo(571.99292f, 430.893707f, 574.782166f, 430.669098f, 576.403381f, 429.136719f);
305 pathB.cubicTo(580.960571f, 424.828125f, 586.135681f, 419.346527f, 586.135681f, 416.115082f);
306 pathB.lineTo(586.135681f, 406.511566f);
307 pathB.cubicTo(586.135681f, 405.377533f, 586.047791f, 404.608856f, 586.678711f, 403.271149f);
308 pathB.cubicTo(584.151062f, 404.98819f, 582.888245f, 405.851715f, 580.362549f, 407.587738f);
309 pathB.cubicTo(579.281433f, 408.320465f, 579.192566f, 409.2948f, 579.192566f, 410.955933f);
310 pathB.lineTo(579.192566f, 421.869202f);
311 pathB.cubicTo(579.192566f, 423.180969f, 577.746033f, 423.273804f, 577.392639f, 423.266815f);
312 pathB.cubicTo(575.636658f, 423.228882f, 574.153259f, 423.295776f, 573.071106f, 423.077148f);
313 pathB.lineTo(573.071106f, 384.663086f);
314 pathB.cubicTo(575.230408f, 385.379852f, 576.309509f, 385.742249f, 578.473816f, 386.473999f);
315 pathB.cubicTo(579.373291f, 386.996094f, 579.553955f, 387.490234f, 579.553955f, 388.013336f);
316 pathB.cubicTo(581.861023f, 384.848785f, 583.015991f, 383.267487f, 585.325073f, 380.114899f);
317 pathB.cubicTo(581.680298f, 379.229431f, 575.865295f, 376.520081f, 574.157227f, 376.521057f);
318 pathB.cubicTo(574.047424f, 376.522064f, 573.955566f, 376.533051f, 573.880676f, 376.556f);
319 pathB.moveTo(593.447083f, 375.096527f);
320 pathB.cubicTo(592.363953f, 375.804291f, 591.821899f, 376.772644f, 591.821899f, 377.908691f);
321 pathB.lineTo(591.821899f, 419.46933f);
322 pathB.cubicTo(591.821899f, 420.517517f, 591.187012f, 422.018951f, 589.921143f, 423.991577f);
323 pathB.cubicTo(591.2948f, 424.412842f, 591.982605f, 424.622467f, 593.354248f, 425.050751f);
324 pathB.cubicTo(594.53125f, 425.462036f, 595.525513f, 425.555878f, 596.427979f, 425.404144f);
325 pathB.cubicTo(597.150757f, 425.279358f, 597.785645f, 424.914978f, 598.326721f, 424.475739f);
326 pathB.cubicTo(600.935242f, 422.385315f, 602.846985f, 419.809753f, 602.759094f, 419.749847f);
327 pathB.cubicTo(602.759094f, 419.749847f, 601.582153f, 419.935516f, 600.59082f, 419.831696f);
328 pathB.cubicTo(600.0448f, 419.74585f, 599.774231f, 419.700928f, 599.233154f, 419.615082f);
329 pathB.cubicTo(598.416565f, 419.484314f, 597.965332f, 418.860382f, 597.965332f, 417.988861f);
330 pathB.lineTo(597.965332f, 396.857147f);
331 pathB.cubicTo(597.965332f, 395.376678f, 598.326721f, 394.617004f, 598.867798f, 394.528137f);
332 pathB.cubicTo(599.232178f, 394.466248f, 599.773254f, 394.731812f, 600.59082f, 395.124115f);
333 pathB.cubicTo(601.601074f, 395.589325f, 602.111206f, 395.819946f, 603.123474f, 396.288116f);
334 pathB.cubicTo(603.93811f, 396.686432f, 603.93512f, 397.38324f, 603.93512f, 398.169891f);
335 pathB.cubicTo(603.93512f, 405.971497f, 603.93512f, 413.768127f, 603.93811f, 421.569702f);
336 pathB.cubicTo(603.93811f, 425.325256f, 601.109924f, 430.634155f, 601.133911f, 430.656128f);
337 pathB.cubicTo(601.133911f, 430.656128f, 605.184937f, 427.222015f, 607.017822f, 424.414825f);
338 pathB.cubicTo(609.118164f, 421.201355f, 610.280212f, 417.987854f, 610.280212f, 415.109802f);
339 pathB.lineTo(610.280212f, 394.593048f);
340 pathB.cubicTo(610.280212f, 393.890228f, 610.823242f, 393.112579f, 611.728699f, 392.020447f);
341 pathB.cubicTo(608.827698f, 390.960266f, 604.000977f, 387.703857f, 602.759094f, 387.967407f);
342 pathB.cubicTo(602.120239f, 388.104187f, 599.957947f, 391.29071f, 597.965332f, 393.27829f);
343 pathB.lineTo(597.965332f, 374.422668f);
344 pathB.cubicTo(597.965332f, 373.461334f, 598.326721f, 372.440063f, 598.867798f, 371.567566f);
345 pathB.cubicTo(596.701538f, 372.96817f, 595.616394f, 373.677948f, 593.447083f, 375.096527f);
346 pathB.moveTo(718.054138f, 409.318756f);
347 pathB.cubicTo(717.461182f, 408.789673f, 716.867188f, 408.178711f, 716.867188f, 407.218353f);
348 pathB.lineTo(716.867188f, 387.053986f);
349 pathB.cubicTo(716.867188f, 385.305969f, 717.323425f, 385.566528f, 718.328674f, 386.013763f);
350 pathB.cubicTo(719.645386f, 386.859314f, 720.307251f, 387.284576f, 721.622009f, 388.135132f);
351 pathB.cubicTo(722.266907f, 388.4935f, 722.903809f, 388.934753f, 722.903809f, 389.721405f);
352 pathB.lineTo(722.903809f, 407.794373f);
353 pathB.cubicTo(722.903809f, 408.66687f, 722.746094f, 410.490753f, 722.259888f, 410.758301f);
354 pathB.cubicTo(722.125122f, 410.83017f, 721.950439f, 410.862122f, 721.746826f, 410.862122f);
355 pathB.cubicTo(720.655701f, 410.864105f, 718.747925f, 409.936707f, 718.054138f, 409.318756f);
356 pathB.moveTo(711.928711f, 364.782227f);
357 pathB.cubicTo(711.195923f, 365.134613f, 710.648865f, 365.834412f, 710.648865f, 366.794769f);
358 pathB.lineTo(710.648865f, 407.392059f);
359 pathB.cubicTo(710.648865f, 409.397614f, 708.519531f, 411.37323f, 708.547485f, 411.684692f);
360 pathB.cubicTo(708.550476f, 411.745605f, 711.838867f, 413.067322f, 713.849365f, 414.368073f);
361 pathB.cubicTo(717.766663f, 416.906738f, 720.162537f, 415.845551f, 722.354797f, 414.073608f);
362 pathB.cubicTo(724.059875f, 412.69397f, 726.55957f, 410.981903f, 730.675537f, 410.124359f);
363 pathB.cubicTo(729.75708f, 409.143066f, 729.213013f, 407.993042f, 729.213013f, 406.683289f);
364 pathB.cubicTo(729.213013f, 399.630402f, 729.209045f, 396.103455f, 729.209045f, 389.047546f);
365 pathB.cubicTo(729.209045f, 387.648956f, 730.577698f, 385.292023f, 730.583679f, 385.149261f);
366 pathB.cubicTo(730.583679f, 385.149261f, 720.888306f, 378.762207f, 719.609497f, 378.947906f);
367 pathB.cubicTo(719.275085f, 378.996826f, 717.872498f, 381.118164f, 716.868225f, 381.896851f);
368 pathB.lineTo(716.868225f, 365.046783f);
369 pathB.cubicTo(716.868225f, 363.740021f, 716.960083f, 363.043213f, 717.597961f, 362);
370 pathB.cubicTo(715.331848f, 363.104095f, 714.19873f, 363.657166f, 711.928711f, 364.782227f);
371 testPathOp(reporter, path, pathB, kIntersect_PathOp);
372}
373
374static void skpeverytechpro_blogspot_com100(skiatest::Reporter* reporter) {
375 SkPath path;
376 path.setFillType(SkPath::kEvenOdd_FillType);
377 path.moveTo(1074.29285f, 627.292786f);
378 path.quadTo(1074.58582f, 627, 1075, 627);
379 path.lineTo(1117, 627);
380 path.quadTo(1124.04163f, 627, 1129.02246f, 631.9776f);
381 path.quadTo(1134, 636.958374f, 1134, 644);
382 path.lineTo(1134, 645);
383 path.quadTo(1134, 652.041626f, 1129.02246f, 657.0224f);
384 path.quadTo(1124.04163f, 662, 1117, 662);
385 path.lineTo(1075, 662);
386 path.quadTo(1074.58582f, 662, 1074.29285f, 661.707214f);
387 path.quadTo(1074, 661.414185f, 1074, 661);
388 path.lineTo(1074, 628);
389 path.quadTo(1074, 627.585815f, 1074.29285f, 627.292786f);
390 path.close();
391 path.moveTo(1076, 629);
392 path.lineTo(1117, 629);
393 path.cubicTo(1125.2843f, 629, 1132, 635.715698f, 1132, 644);
394 path.lineTo(1132, 645);
395 path.cubicTo(1132, 653.284302f, 1125.2843f, 660, 1117, 660);
396 path.lineTo(1076, 660);
397 path.lineTo(1076, 629);
398 path.close();
399 SkPath pathB;
400 pathB.setFillType(SkPath::kWinding_FillType);
401 pathB.moveTo(1074, 627);
402 pathB.lineTo(1075, 628);
403 pathB.lineTo(1116.5f, 644.5f);
404 pathB.lineTo(1134, 627);
405 testPathOp(reporter, path, pathB, kIntersect_PathOp);
406}
407
408static void skpflite_com41(skiatest::Reporter* reporter) {
409 SkPath path;
410 path.setFillType(SkPath::kEvenOdd_FillType);
411 path.moveTo(301.464081f, 424);
412 path.lineTo(296, 433.46405f);
413 path.lineTo(296, 433.810822f);
414 path.lineTo(303.25589f, 438);
415 path.lineTo(304.729736f, 438);
416 path.lineTo(311, 427.139557f);
417 path.lineTo(311, 426.305237f);
418 path.lineTo(307.007202f, 424);
419 path.lineTo(301.464081f, 424);
420 path.close();
421 SkPath pathB;
422 pathB.setFillType(SkPath::kWinding_FillType);
423 pathB.moveTo(302.849854f, 421.599762f);
424 pathB.lineTo(311.510101f, 426.599762f);
425 pathB.lineTo(304.510101f, 438.724121f);
426 pathB.lineTo(295.849854f, 433.724121f);
427 pathB.close();
428 testPathOp(reporter, path, pathB, kIntersect_PathOp);
429}
430
431static void skpilkoora_com37(skiatest::Reporter* reporter) {
432 SkPath path;
433 path.setFillType(SkPath::kEvenOdd_FillType);
434 path.moveTo(818, 157);
435 path.cubicTo(818, 148.715729f, 824.715698f, 142, 833, 142);
436 path.lineTo(909, 142);
437 path.lineTo(909, 143);
438 path.lineTo(833, 143);
439 path.cubicTo(825.268005f, 143, 819, 149.268005f, 819, 157);
440 path.lineTo(819, 926);
441 path.lineTo(818, 926);
442 path.lineTo(818, 157);
443 path.close();
444 path.moveTo(1184, 926);
445 path.lineTo(1185, 926);
446 path.lineTo(1185, 157);
447 path.cubicTo(1185, 148.715729f, 1178.2843f, 142, 1170, 142);
448 path.lineTo(1093, 142);
449 path.lineTo(1093, 143);
450 path.lineTo(1170, 143);
451 path.cubicTo(1177.73193f, 143, 1184, 149.268005f, 1184, 157);
452 path.lineTo(1184, 926);
453 path.close();
454 SkPath pathB;
455 pathB.setFillType(SkPath::kWinding_FillType);
456 pathB.moveTo(1185, 142);
457 pathB.lineTo(1001.5f, 325.5f);
458 pathB.lineTo(1001.5f, 782.5f);
459 pathB.lineTo(1185, 966);
460 testPathOp(reporter, path, pathB, kIntersect_PathOp);
461}
462
463static void skpmm4everfriends_com43(skiatest::Reporter* reporter) {
464 SkPath path;
465 path.setFillType(SkPath::kEvenOdd_FillType);
466 path.moveTo(540.74231f, 215.922546f);
467 path.cubicTo(540.893127f, 215.391159f, 541.443909f, 215.090134f, 541.972473f, 215.250168f);
468 path.lineTo(581.213318f, 227.131104f);
469 path.cubicTo(581.741882f, 227.291153f, 582.048157f, 227.851654f, 581.897339f, 228.383041f);
470 path.lineTo(576.708923f, 246.663925f);
471 path.cubicTo(576.558167f, 247.195297f, 576.007324f, 247.496338f, 575.47876f, 247.336288f);
472 path.lineTo(536.237915f, 235.455353f);
473 path.cubicTo(535.709351f, 235.295319f, 535.403137f, 234.734802f, 535.553894f, 234.20343f);
474 path.lineTo(540.74231f, 215.922546f);
475 path.close();
476 SkPath pathB;
477 pathB.setFillType(SkPath::kWinding_FillType);
478 pathB.moveTo(541.015381f, 214.960388f);
479 pathB.lineTo(582.17041f, 227.420883f);
480 pathB.lineTo(576.435852f, 247.626068f);
481 pathB.lineTo(535.280823f, 235.165573f);
482 pathB.close();
483 testPathOp(reporter, path, pathB, kIntersect_PathOp);
484}
485
486static void skpmtrk_uz27(skiatest::Reporter* reporter) {
487 SkPath path;
488 path.setFillType(SkPath::kEvenOdd_FillType);
489 path.moveTo(33, 787);
490 path.lineTo(33, 412);
491 path.lineTo(1233, 412);
492 path.lineTo(1233, 787);
493 path.quadTo(1233, 793.213196f, 1228.60803f, 797.607971f);
494 path.quadTo(1224.21326f, 802, 1218, 802);
495 path.lineTo(48, 802);
496 path.quadTo(41.7867966f, 802, 37.3919983f, 797.607971f);
497 path.quadTo(33, 793.213196f, 33, 787);
498 path.close();
499 SkPath pathB;
500 pathB.setFillType(SkPath::kWinding_FillType);
501 pathB.moveTo(33, 412);
502 pathB.lineTo(1233, 412);
503 pathB.lineTo(1233, 787);
504 pathB.quadTo(1233, 793.213196f, 1228.60791f, 797.608032f);
505 pathB.quadTo(1224.21313f, 802, 1218, 802);
506 pathB.lineTo(48, 802);
507 pathB.quadTo(41.7867432f, 802, 37.3919678f, 797.608032f);
508 pathB.quadTo(33, 793.213196f, 33, 787);
509 pathB.close();
510 testPathOp(reporter, path, pathB, kIntersect_PathOp);
511}
512
caryclark@google.com7eaa53d2013-10-02 14:49:34 +0000513static void skpfrauen_magazin_com83(skiatest::Reporter* reporter) {
514 SkPath path;
515 path.setFillType(SkPath::kEvenOdd_FillType);
516 path.moveTo(808, 886);
517 path.cubicTo(805.581055f, 886, 803.563293f, 887.717773f, 803.100037f, 890);
518 path.lineTo(1122.90002f, 890);
519 path.cubicTo(1122.43677f, 887.717773f, 1120.41895f, 886, 1118, 886);
520 path.lineTo(808, 886);
521 path.close();
522 SkPath pathB;
523 pathB.setFillType(SkPath::kInverseWinding_FillType);
524 pathB.moveTo(808, 886);
525 pathB.lineTo(1118, 886);
526 pathB.cubicTo(1120.76147f, 886, 1123, 888.238586f, 1123, 891);
527 pathB.lineTo(1123, 1521);
528 pathB.cubicTo(1123, 1523.20911f, 1120.76147f, 1525, 1118, 1525);
529 pathB.lineTo(808, 1525);
530 pathB.cubicTo(805.238586f, 1525, 803, 1523.20911f, 803, 1521);
531 pathB.lineTo(803, 891);
532 pathB.cubicTo(803, 888.238586f, 805.238586f, 886, 808, 886);
533 pathB.close();
534 testPathOp(reporter, path, pathB, kIntersect_PathOp);
535}
536
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +0000537#define TRY_BROKEN_TESTS 0
538#if TRY_BROKEN_TESTS
caryclark@google.com7eaa53d2013-10-02 14:49:34 +0000539static void skpi_gino_com16(skiatest::Reporter* reporter) {
540 SkPath path;
541 path.setFillType(SkPath::kEvenOdd_FillType);
542 path.moveTo(184, 734);
543 path.quadTo(133.051727f, 734, 97.0258636f, 770.025879f);
544 path.quadTo(61, 806.051758f, 61, 857);
545 path.quadTo(61, 895.835083f, 81.9317017f, 926);
546 path.lineTo(286.068298f, 926);
547 path.quadTo(307, 895.835083f, 307, 857);
548 path.quadTo(307, 806.051758f, 270.974121f, 770.025879f);
549 path.quadTo(234.948273f, 734, 184, 734);
550 path.close();
551 SkPath pathB;
552 pathB.setFillType(SkPath::kWinding_FillType);
553 pathB.moveTo(185, 734);
554 pathB.cubicTo(252.93103f, 734, 308, 789.06897f, 308, 857);
555 pathB.cubicTo(308, 924.93103f, 252.93103f, 980, 185, 980);
556 pathB.lineTo(184, 980);
557 pathB.cubicTo(116.068977f, 980, 61, 924.93103f, 61, 857);
558 pathB.cubicTo(61, 789.06897f, 116.068977f, 734, 184, 734);
559 pathB.lineTo(185, 734);
560 pathB.close();
561 testPathOp(reporter, path, pathB, kIntersect_PathOp);
562}
563
564static void skppchappy_com_au102(skiatest::Reporter* reporter) {
565 SkPath path;
566 path.setFillType(SkPath::kEvenOdd_FillType);
567 path.moveTo(363, 493);
568 path.cubicTo(360.790863f, 493, 359, 494.790863f, 359, 497);
569 path.lineTo(359, 656);
570 path.cubicTo(359, 658.209106f, 360.790863f, 660, 363, 660);
571 path.lineTo(623.001709f, 660);
572 path.cubicTo(624.657776f, 659.999023f, 626, 658.65625f, 626, 657);
573 path.lineTo(626, 496);
574 path.cubicTo(626, 494.343872f, 624.657959f, 493.00116f, 623.002075f, 493);
575 path.lineTo(363, 493);
576 path.close();
577 SkPath pathB;
578 pathB.setFillType(SkPath::kInverseWinding_FillType);
579 pathB.moveTo(362, 494);
580 pathB.lineTo(623, 494);
581 pathB.cubicTo(624.65686f, 494, 626, 494.895416f, 626, 496);
582 pathB.lineTo(626, 657);
583 pathB.cubicTo(626, 658.65686f, 624.65686f, 660, 623, 660);
584 pathB.lineTo(362, 660);
585 pathB.cubicTo(360.34314f, 660, 359, 658.65686f, 359, 657);
586 pathB.lineTo(359, 496);
587 pathB.cubicTo(359, 494.895416f, 360.34314f, 494, 362, 494);
588 pathB.close();
589 testPathOp(reporter, path, pathB, kIntersect_PathOp);
590}
591
592static void skpsciality_com161(skiatest::Reporter* reporter) {
593 SkPath path;
594 path.setFillType(SkPath::kEvenOdd_FillType);
595 path.moveTo(656, 728);
596 path.cubicTo(653.790833f, 728, 652, 729.790833f, 652, 732);
597 path.lineTo(652, 789);
598 path.cubicTo(652, 791.209106f, 653.790833f, 793, 656, 793);
599 path.lineTo(769.001282f, 793);
600 path.cubicTo(770.657532f, 792.999268f, 772, 791.656433f, 772, 790);
601 path.lineTo(772, 731);
602 path.cubicTo(772, 729.34314f, 770.65686f, 728, 769, 728);
603 path.lineTo(656, 728);
604 path.close();
605 SkPath pathB;
606 pathB.setFillType(SkPath::kInverseWinding_FillType);
607 pathB.moveTo(655, 729);
608 pathB.lineTo(769, 729);
609 pathB.cubicTo(770.65686f, 729, 772, 729.895447f, 772, 731);
610 pathB.lineTo(772, 790);
611 pathB.cubicTo(772, 791.65686f, 770.65686f, 793, 769, 793);
612 pathB.lineTo(655, 793);
613 pathB.cubicTo(653.34314f, 793, 652, 791.65686f, 652, 790);
614 pathB.lineTo(652, 731);
615 pathB.cubicTo(652, 729.895447f, 653.34314f, 729, 655, 729);
616 pathB.close();
617 testPathOp(reporter, path, pathB, kIntersect_PathOp);
618}
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +0000619#endif
caryclark@google.com7eaa53d2013-10-02 14:49:34 +0000620
621static void skpsudoestenegocios_com186(skiatest::Reporter* reporter) {
622 SkPath path;
623 path.setFillType(SkPath::kEvenOdd_FillType);
624 path.moveTo(0, 495);
625 path.lineTo(1.23685242e-14f, 293);
626 path.lineTo(44, 293);
627 path.quadTo(45.6568527f, 293, 46.8288002f, 294.171204f);
628 path.quadTo(48, 295.34314f, 48, 297);
629 path.lineTo(48, 491);
630 path.quadTo(48, 492.65686f, 46.8288002f, 493.828796f);
631 path.quadTo(45.6568527f, 495, 44, 495);
632 path.lineTo(0, 495);
633 path.close();
634 path.moveTo(1, 294);
635 path.lineTo(44, 294);
636 path.cubicTo(45.6568565f, 294, 47, 295.34314f, 47, 297);
637 path.lineTo(47, 491);
638 path.cubicTo(47, 492.65686f, 45.6568565f, 494, 44, 494);
639 path.lineTo(1, 494);
640 path.lineTo(1, 294);
641 path.close();
642 SkPath pathB;
643 pathB.setFillType(SkPath::kWinding_FillType);
644 pathB.moveTo(48, 495);
645 pathB.lineTo(24, 471);
646 pathB.lineTo(24, 317);
647 pathB.lineTo(48, 293);
648 testPathOp(reporter, path, pathB, kIntersect_PathOp);
649}
650
651static void skpthesuburbanite_com213(skiatest::Reporter* reporter) {
652 SkPath path;
653 path.setFillType(SkPath::kEvenOdd_FillType);
654 path.moveTo(863.439026f, 692);
655 path.lineTo(863.283264f, 692);
656 path.lineTo(802, 708.420837f);
657 path.lineTo(802, 718.773621f);
658 path.lineTo(866, 701.624817f);
659 path.lineTo(866, 701.557922f);
660 path.lineTo(863.439026f, 692);
661 path.close();
662 SkPath pathB;
663 pathB.setFillType(SkPath::kWinding_FillType);
664 pathB.moveTo(783.256775f, 713.443054f);
665 pathB.lineTo(863.428589f, 691.96106f);
666 pathB.lineTo(866.016724f, 701.620361f);
667 pathB.lineTo(785.84491f, 723.102356f);
668 pathB.close();
669 testPathOp(reporter, path, pathB, kIntersect_PathOp);
670}
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +0000671
672static void skphostloco_com11(skiatest::Reporter* reporter) {
673 SkPath path;
674 path.setFillType(SkPath::kEvenOdd_FillType);
675 path.moveTo(6.66133815e-16f, 648);
676 path.lineTo(25.8522835f, 648);
677 path.quadTo(27.5087376f, 647.999634f, 28.6807098f, 646.82843f);
678 path.quadTo(29.8518829f, 645.656433f, 29.8522835f, 644);
679 path.lineTo(29.8522835f, 467);
680 path.quadTo(29.8518829f, 465.343536f, 28.6807098f, 464.17157f);
681 path.quadTo(27.5087376f, 463.000397f, 25.8522835f, 463);
682 path.lineTo(2.22044605e-16f, 463);
683 path.lineTo(6.66133815e-16f, 648);
684 path.close();
685 SkPath pathB;
686 pathB.setFillType(SkPath::kWinding_FillType);
687 pathB.moveTo(0, 463);
688 pathB.lineTo(30, 463);
689 pathB.lineTo(30, 648);
690 pathB.lineTo(0, 648);
691 pathB.close();
692 testPathOp(reporter, path, pathB, kIntersect_PathOp);
693}
694
695static void skpsergeychunkevich_com8(skiatest::Reporter* reporter) {
696 SkPath path;
697 path.setFillType(SkPath::kEvenOdd_FillType);
698 path.moveTo(0, 926);
699 path.lineTo(0, 0);
700 path.lineTo(1265, 0);
701 path.lineTo(1265, 926);
702 path.lineTo(0, 926);
703 path.close();
704 SkPath pathB;
705 pathB.setFillType(SkPath::kInverseWinding_FillType);
706 pathB.moveTo(37, 374);
707 pathB.lineTo(37, 535);
708 pathB.cubicTo(37, 536.65686f, 35.6568565f, 538, 34, 538);
709 pathB.lineTo(1.02866934e-14f, 538);
710 pathB.lineTo(6.12303177e-17f, 371);
711 pathB.lineTo(34, 371);
712 pathB.cubicTo(35.6568565f, 371, 37, 372.34314f, 37, 374);
713 pathB.close();
714 testPathOp(reporter, path, pathB, kIntersect_PathOp);
715}
716
717static void skptracksflow_com9(skiatest::Reporter* reporter) {
718 SkPath path;
719 path.setFillType(SkPath::kEvenOdd_FillType);
720 path.moveTo(16, 56);
721 path.lineTo(32, 56);
722 path.lineTo(32, 72);
723 path.lineTo(16, 72);
724 path.lineTo(16, 56);
725 path.close();
726 SkPath pathB;
727 pathB.setFillType(SkPath::kEvenOdd_FillType);
728 pathB.moveTo(31.65625f, 70.0555649f);
729 pathB.lineTo(31.65625f, 70.0554962f);
730 pathB.lineTo(26.9727192f, 65.3615341f);
731 pathB.cubicTo(27.6210003f, 64.4029694f, 28.0048752f, 63.2470932f, 28.0048752f, 62.0027809f);
732 pathB.cubicTo(28.0048752f, 58.6875305f, 25.3199062f, 56, 22.0046558f, 56);
733 pathB.cubicTo(18.6894073f, 56, 16.0031872f, 58.6875305f, 16.0031872f, 62.0027809f);
734 pathB.cubicTo(16.0031872f, 65.3180008f, 18.6913433f, 68.0055618f, 22.0066261f, 68.0055618f);
735 pathB.cubicTo(23.2509995f, 68.0055618f, 24.4072189f, 67.6187515f, 25.3657818f, 66.9704056f);
736 pathB.lineTo(30.0599365f, 71.65625f);
737 pathB.lineTo(30.0600014f, 71.65625f);
738 pathB.cubicTo(30.2668133f, 71.875f, 30.5524693f, 71.9992828f, 30.868f, 71.9992828f);
739 pathB.cubicTo(31.4994049f, 71.9992828f, 32.0014687f, 71.4909363f, 32.0014687f, 70.8595276f);
740 pathB.cubicTo(32.0015335f, 70.5439072f, 31.875f, 70.2623444f, 31.65625f, 70.0555649f);
741 pathB.close();
742 pathB.moveTo(18.0054054f, 62.0027809f);
743 pathB.cubicTo(18.0054054f, 59.7925949f, 19.7970943f, 58.0009079f, 22.0072823f, 58.0009079f);
744 pathB.cubicTo(24.2174377f, 58.0009079f, 26.0091248f, 59.7925949f, 26.0091248f, 62.0027809f);
745 pathB.cubicTo(26.0091248f, 64.2129364f, 24.2174377f, 66.0046234f, 22.0072803f, 66.0046234f);
746 pathB.cubicTo(19.7970943f, 66.0045929f, 18.0054054f, 64.2129059f, 18.0054054f, 62.0027809f);
747 pathB.close();
748 testPathOp(reporter, path, pathB, kIntersect_PathOp);
749}
750
751static void skpautobutler_dk29(skiatest::Reporter* reporter) {
752 SkPath path;
753 path.setFillType(SkPath::kEvenOdd_FillType);
754 path.moveTo(0, 926);
755 path.lineTo(0, 0);
756 path.lineTo(1265, 0);
757 path.lineTo(1265, 926);
758 path.lineTo(0, 926);
759 path.close();
760 SkPath pathB;
761 pathB.setFillType(SkPath::kWinding_FillType);
762 pathB.moveTo(21, 162);
763 pathB.lineTo(21, 301);
764 pathB.lineTo(8.57224448e-15f, 301);
765 pathB.lineTo(6.12303177e-17f, 162);
766 pathB.close();
767 testPathOp(reporter, path, pathB, kIntersect_PathOp);
768}
769
770static void skponlinecollege_org144(skiatest::Reporter* reporter) {
771 SkPath path;
772 path.setFillType(SkPath::kEvenOdd_FillType);
773 path.moveTo(179, 407);
774 path.cubicTo(177.34314f, 407, 176, 408.34314f, 176, 410);
775 path.lineTo(176, 436);
776 path.cubicTo(176, 437.65686f, 177.34314f, 439, 179, 439);
777 path.lineTo(337.002289f, 439);
778 path.cubicTo(338.105835f, 438.998779f, 339, 438.103821f, 339, 437);
779 path.lineTo(339, 409);
780 path.cubicTo(339, 407.896362f, 338.10611f, 407.001526f, 337.002838f, 407);
781 path.lineTo(179, 407);
782 path.close();
783 SkPath pathB;
784 pathB.setFillType(SkPath::kInverseWinding_FillType);
785 pathB.moveTo(179, 408);
786 pathB.lineTo(337, 408);
787 pathB.cubicTo(338.65686f, 408, 340, 408.895416f, 340, 410);
788 pathB.lineTo(340, 436);
789 pathB.cubicTo(340, 437.65686f, 338.65686f, 439, 337, 439);
790 pathB.lineTo(179, 439);
791 pathB.cubicTo(177.895432f, 439, 177, 437.65686f, 177, 436);
792 pathB.lineTo(177, 410);
793 pathB.cubicTo(177, 408.895416f, 177.895432f, 408, 179, 408);
794 pathB.close();
795 testPathOp(reporter, path, pathB, kIntersect_PathOp);
796}
797
798static void skpnational_com_au81(skiatest::Reporter* reporter) {
799 SkPath path;
800 path.setFillType(SkPath::kEvenOdd_FillType);
801 path.moveTo(807, 817);
802 path.quadTo(806.585876f, 817.000122f, 806.292908f, 817.292908f);
803 path.quadTo(806.000122f, 817.585876f, 806, 818);
804 path.lineTo(806, 881);
805 path.lineTo(1111, 881);
806 path.lineTo(1111, 818);
807 path.quadTo(1110.99988f, 817.585876f, 1110.70715f, 817.292908f);
808 path.quadTo(1110.41406f, 817.000122f, 1110, 817);
809 path.lineTo(807, 817);
810 path.close();
811 SkPath pathB;
812 pathB.setFillType(SkPath::kInverseWinding_FillType);
813 pathB.moveTo(807, 817);
814 pathB.lineTo(1110, 817);
815 pathB.cubicTo(1110.55225f, 817, 1111, 817.447693f, 1111, 818);
816 pathB.lineTo(1111, 880);
817 pathB.lineTo(806, 880);
818 pathB.lineTo(806, 818);
819 pathB.cubicTo(806, 817.447693f, 806.447693f, 817, 807, 817);
820 pathB.close();
821 testPathOp(reporter, path, pathB, kIntersect_PathOp);
822}
823
824static void skprentacheat_com30(skiatest::Reporter* reporter) {
825 SkPath path;
826 path.setFillType(SkPath::kEvenOdd_FillType);
827 path.moveTo(967, 263);
828 path.quadTo(966.585876f, 263.000092f, 966.292908f, 263.292908f);
829 path.quadTo(966.000122f, 263.585876f, 966, 264);
830 path.lineTo(966, 301);
831 path.lineTo(1214, 301);
832 path.lineTo(1214, 264);
833 path.quadTo(1213.99988f, 263.585876f, 1213.70715f, 263.292908f);
834 path.quadTo(1213.41406f, 263.000092f, 1213, 263);
835 path.lineTo(967, 263);
836 path.close();
837 SkPath pathB;
838 pathB.setFillType(SkPath::kInverseWinding_FillType);
839 pathB.moveTo(967, 263);
840 pathB.lineTo(1213, 263);
841 pathB.cubicTo(1213.55225f, 263, 1214, 263.447723f, 1214, 264);
842 pathB.lineTo(1214, 300);
843 pathB.lineTo(966, 300);
844 pathB.lineTo(966, 264);
845 pathB.cubicTo(966, 263.447723f, 966.447693f, 263, 967, 263);
846 pathB.close();
847 testPathOp(reporter, path, pathB, kIntersect_PathOp);
848}
849
850static void skpbreakmystyle_com10(skiatest::Reporter* reporter) {
851 SkPath path;
852 path.setFillType(SkPath::kEvenOdd_FillType);
853 path.moveTo(271.032867f, -5.32907052e-15f);
854 path.lineTo(56.9671326f, -5.16253706e-15f);
855 path.quadTo(52.7835083f, 3.69968891f, 48.7416f, 7.74160004f);
856 path.quadTo(1, 55.4831848f, 1, 123);
857 path.quadTo(1, 190.516815f, 48.7416f, 238.258392f);
858 path.quadTo(96.4831848f, 286, 164, 286);
859 path.quadTo(231.516815f, 286, 279.258392f, 238.258392f);
860 path.quadTo(327, 190.516815f, 327, 123);
861 path.quadTo(327, 55.4831848f, 279.258392f, 7.74160004f);
862 path.quadTo(275.216431f, 3.69964004f, 271.032867f, -5.32907052e-15f);
863 path.close();
864 SkPath pathB;
865 pathB.setFillType(SkPath::kWinding_FillType);
866 pathB.moveTo(327, 123);
867 pathB.quadTo(327, 190.516815f, 279.258392f, 238.258392f);
868 pathB.quadTo(231.516815f, 286, 164, 286);
869 pathB.quadTo(96.4831848f, 286, 48.7416f, 238.258392f);
870 pathB.quadTo(1, 190.516815f, 1, 123);
871 pathB.quadTo(1, 55.4831848f, 48.7416f, 7.74160004f);
872 pathB.quadTo(96.4831848f, -40, 164, -40);
873 pathB.quadTo(231.516815f, -40, 279.258392f, 7.74160004f);
874 pathB.quadTo(327, 55.4831848f, 327, 123);
875 pathB.close();
876 testPathOp(reporter, path, pathB, kIntersect_PathOp);
877}
878
879static void skpsd_graphic_net104(skiatest::Reporter* reporter) {
880 SkPath path;
881 path.setFillType(SkPath::kEvenOdd_FillType);
882 path.moveTo(475.421448f, 836.985962f);
883 path.lineTo(461.280975f, 841.990662f);
884 path.cubicTo(466.80899f, 857.609802f, 458.62854f, 874.752991f, 443.009399f, 880.281006f);
885 path.cubicTo(435.199829f, 883.044983f, 427.009247f, 882.381897f, 420.080048f, 879.075378f);
886 path.lineTo(413.620056f, 892.613037f);
887 path.quadTo(430.419983f, 900.629761f, 447.96701f, 894.43811f);
888 path.quadTo(448.00708f, 894.42395f, 448.014038f, 894.421509f);
889 path.quadTo(448.043976f, 894.410889f, 448.061066f, 894.404846f);
890 path.quadTo(465.596313f, 888.179932f, 473.613037f, 871.379944f);
891 path.quadTo(477.351227f, 863.546143f, 478, 855.549866f);
892 path.lineTo(478, 848.804321f);
893 path.quadTo(477.528076f, 842.93811f, 475.421448f, 836.985962f);
894 path.close();
895 SkPath pathB;
896 pathB.setFillType(SkPath::kWinding_FillType);
897 pathB.moveTo(405.592621f, 909.435547f);
898 pathB.lineTo(390.578583f, 867.014099f);
899 pathB.lineTo(433, 852.000061f);
900 pathB.lineTo(490.435486f, 879.40741f);
901 testPathOp(reporter, path, pathB, kIntersect_PathOp);
902}
903
904#if TRY_BROKEN_TESTS
905/* this cubic/quad pair
906 c = 430,280 430,278.895416 473.876068,278 528,278
907 q = 430,280 430.009796,277.101196 458.703552,275.050262
908 only intersect at the shared point (430,280)
909 they sort backwards because the tangent from pt[0] to control pt[1]
910 c' = (0.00000000000000000, -1.1045837402343750)
skia.committer@gmail.comf54ad6f2013-11-02 07:02:02 +0000911 q' = (0.0097961425781250000, -2.8988037109375000)
912 suggests that the quad is counterclockwise of the cubic, when the reverse is true
913 the angle code is fooled because the control pt[1] of both the quad and cubic
914 is far away from cubic cntl [2] and quad pt [2].
915 Maybe in angle setup, this instability can be detected to suppress sorting on the initial tangent
916 Or the error term can be passed to NearRay that is magnified by the distance from the next ctrl?
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +0000917 */
918static void skpnaoxrane_ru23(skiatest::Reporter* reporter) {
919 SkPath path;
920 path.setFillType(SkPath::kEvenOdd_FillType);
921 path.moveTo(458.703552f, 275.050262f);
922 path.quadTo(487.41687f, 273.000702f, 528, 273);
923 path.lineTo(529, 273);
924 path.quadTo(530.242371f, 273.000305f, 531.121338f, 273.878693f);
925 path.quadTo(531.999695f, 274.75766f, 532, 276);
926 path.lineTo(532, 378);
927 path.quadTo(531.990173f, 380.898804f, 503.296448f, 382.949738f);
928 path.quadTo(474.58313f, 384.999298f, 434, 385);
929 path.lineTo(433, 385);
930 path.quadTo(431.75766f, 384.999695f, 430.878693f, 384.121307f);
931 path.quadTo(430.000305f, 383.24234f, 430, 382);
932 path.lineTo(430, 280);
933 path.quadTo(430.009796f, 277.101196f, 458.703552f, 275.050262f);
934 path.close();
935 SkPath pathB;
936 pathB.setFillType(SkPath::kInverseWinding_FillType);
937 pathB.moveTo(528, 278);
938 pathB.lineTo(529, 278);
939 pathB.cubicTo(530.65686f, 278, 532, 278, 532, 278);
940 pathB.lineTo(532, 378);
941 pathB.cubicTo(532, 379.104584f, 488.123932f, 380, 434, 380);
942 pathB.lineTo(433, 380);
943 pathB.cubicTo(431.34314f, 380, 430, 380, 430, 380);
944 pathB.lineTo(430, 280);
945 pathB.cubicTo(430, 278.895416f, 473.876068f, 278, 528, 278);
946 pathB.close();
947 testPathOp(reporter, path, pathB, kIntersect_PathOp);
948}
949
950/* didn't investigate thoroughly, but looks to be missorting quad and cubic
951 {{468.507751,560.724426}, {467.275146,552.856262}, {465.84668,547.288391}}
952 {{463.779907,542.671143}, {464.829529,542.672974}, {466.946289,550.755676}, {468.507751,560.724426}}
953 decision maker is case 14 leftLessThanRight
954 */
955static void skptcmevents_org23(skiatest::Reporter* reporter) {
956 SkPath path;
957 path.setFillType(SkPath::kEvenOdd_FillType);
958 path.moveTo(465.503998f, 546);
959 path.lineTo(347, 546);
960 path.lineTo(347, 632);
961 path.lineTo(469.104248f, 632);
962 path.quadTo(470.79007f, 627.638672f, 471.833496f, 621.036255f);
963 path.quadTo(474.902588f, 601.562866f, 470.591064f, 574.024353f);
964 path.lineTo(468.507751f, 560.724426f);
965 path.quadTo(467.275146f, 552.856262f, 465.84668f, 547.288391f);
966 path.quadTo(465.670349f, 546.601501f, 465.503998f, 546);
967 path.close();
968 SkPath pathB;
969 pathB.setFillType(SkPath::kInverseWinding_FillType);
970 pathB.moveTo(363.052246f, 542.495361f);
971 pathB.lineTo(463.779907f, 542.671143f);
972 pathB.cubicTo(464.829529f, 542.672974f, 466.946289f, 550.755676f, 468.507751f, 560.724426f);
973 pathB.lineTo(470.591064f, 574.024353f);
974 pathB.cubicTo(476.26178f, 610.226624f, 471.498932f, 639.557922f, 459.953003f, 639.537781f);
975 pathB.lineTo(368.727936f, 639.378601f);
976 pathB.cubicTo(351.933868f, 639.349304f, 337.053741f, 631.244324f, 335.492249f, 621.275574f);
977 pathB.lineTo(325.968597f, 560.475708f);
978 pathB.cubicTo(324.407104f, 550.506958f, 341.01001f, 542.456909f, 363.052246f, 542.495361f);
979 pathB.close();
980 testPathOp(reporter, path, pathB, kIntersect_PathOp);
981}
982
983static void skpredbullskatearcade_es16(skiatest::Reporter* reporter) {
984 SkPath path;
985 path.setFillType(SkPath::kEvenOdd_FillType);
986 path.moveTo(936.765625f, 458.965302f);
987 path.cubicTo(937.028442f, 453.863251f, 933.145813f, 449.864502f, 928.093445f, 450.033905f);
988 path.lineTo(661.882263f, 458.958862f);
989 path.lineTo(661.875366f, 458.959106f);
990 path.cubicTo(656.828369f, 459.13205f, 652.525085f, 463.399719f, 652.258545f, 468.496124f);
991 path.lineTo(652.258179f, 468.503662f);
992 path.lineTo(649.021729f, 531.322754f);
993 path.cubicTo(648.75885f, 536.424805f, 652.641479f, 540.423523f, 657.693848f, 540.25415f);
994 path.lineTo(923.905029f, 531.329163f);
995 path.cubicTo(928.955017f, 531.159851f, 933.262268f, 526.890442f, 933.528809f, 521.791565f);
996 path.lineTo(933.529175f, 521.784363f);
997 path.lineTo(936.765625f, 458.965302f);
998 path.close();
999 SkPath pathB;
1000 pathB.setFillType(SkPath::kInverseWinding_FillType);
1001 pathB.moveTo(661.882263f, 458.958862f);
1002 pathB.lineTo(928.093445f, 450.033905f);
1003 pathB.cubicTo(929.103882f, 450, 929.709961f, 454.108612f, 929.447144f, 459.210663f);
1004 pathB.lineTo(926.210693f, 522.029724f);
1005 pathB.cubicTo(926.079224f, 524.58075f, 925.153442f, 526.676208f, 924.143066f, 526.710083f);
1006 pathB.lineTo(657.931885f, 535.635071f);
1007 pathB.cubicTo(652.879456f, 535.804443f, 648.890259f, 533.873779f, 649.021729f, 531.322754f);
1008 pathB.lineTo(652.258179f, 468.503662f);
1009 pathB.cubicTo(652.520996f, 463.401611f, 656.829834f, 459.128235f, 661.882263f, 458.958862f);
1010 pathB.close();
1011 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1012}
1013
1014static void skpfinanzasdigital_com9(skiatest::Reporter* reporter) {
1015 SkPath path;
1016 path.setFillType(SkPath::kEvenOdd_FillType);
1017 path.moveTo(156, 126);
1018 path.quadTo(154.343552f, 126.000397f, 153.17157f, 127.17157f);
1019 path.quadTo(152.000397f, 128.343552f, 152, 130);
1020 path.lineTo(152, 174);
1021 path.lineTo(1114, 174);
1022 path.lineTo(1114, 130);
1023 path.quadTo(1113.99963f, 128.343552f, 1112.82837f, 127.17157f);
1024 path.quadTo(1111.65649f, 126.000397f, 1110, 126);
1025 path.lineTo(156, 126);
1026 path.close();
1027 SkPath pathB;
1028 pathB.setFillType(SkPath::kInverseWinding_FillType);
1029 pathB.moveTo(156, 126);
1030 pathB.lineTo(1110, 126);
1031 pathB.cubicTo(1111.65686f, 126, 1113, 127.790863f, 1113, 130);
1032 pathB.lineTo(1113, 174);
1033 pathB.lineTo(153, 174);
1034 pathB.lineTo(153, 130);
1035 pathB.cubicTo(153, 127.790863f, 154.34314f, 126, 156, 126);
1036 pathB.close();
1037 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1038}
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00001039#endif
1040
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001041static void skppartainasdemo250_org56(skiatest::Reporter* reporter) {
1042 SkPath path;
1043 path.setFillType(SkPath::kEvenOdd_FillType);
1044 path.moveTo(182.000015f, 645);
1045 path.lineTo(182, 640);
1046 path.cubicTo(174.322327f, 640, 166.644669f, 637.071045f, 160.786804f, 631.213196f);
1047 path.cubicTo(149.071075f, 619.497437f, 149.071075f, 600.502563f, 160.786804f, 588.786804f);
1048 path.lineTo(157.251266f, 585.251221f);
1049 path.quadTo(147, 595.502502f, 147.000015f, 610);
1050 path.quadTo(147, 624.482605f, 157.230255f, 634.727722f);
1051 path.quadTo(157.251251f, 634.748779f, 157.251282f, 634.748779f);
1052 path.quadTo(157.282852f, 634.780334f, 157.272263f, 634.769775f);
1053 path.quadTo(167.517334f, 645, 182.000015f, 645);
1054 path.close();
1055 SkPath pathB;
1056 pathB.setFillType(SkPath::kWinding_FillType);
1057 pathB.moveTo(182, 659.497498f);
1058 pathB.lineTo(206.748749f, 634.748718f);
1059 pathB.lineTo(182.000015f, 610);
1060 pathB.lineTo(132.502533f, 610);
1061 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1062}
1063
1064static void skpmlk_com326(skiatest::Reporter* reporter) {
1065 SkPath path;
1066 path.setFillType(SkPath::kEvenOdd_FillType);
1067 path.moveTo(154, 670);
1068 path.cubicTo(151.238571f, 670, 149, 672.238586f, 149, 675);
1069 path.lineTo(149, 710.001465f);
1070 path.cubicTo(149.000809f, 712.209961f, 150.791367f, 714, 153, 714);
1071 path.lineTo(189, 714);
1072 path.cubicTo(191.209137f, 714, 193, 712.209167f, 193, 710);
1073 path.lineTo(193, 675);
1074 path.cubicTo(193, 672.238586f, 190.761429f, 670, 188, 670);
1075 path.lineTo(154, 670);
1076 path.close();
1077 SkPath pathB;
1078 pathB.setFillType(SkPath::kInverseWinding_FillType);
1079 pathB.moveTo(154, 671);
1080 pathB.lineTo(188, 671);
1081 pathB.cubicTo(190.761429f, 671, 193, 672.790833f, 193, 675);
1082 pathB.lineTo(193, 710);
1083 pathB.cubicTo(193, 712.761414f, 190.761429f, 715, 188, 715);
1084 pathB.lineTo(154, 715);
1085 pathB.cubicTo(151.238571f, 715, 149, 712.761414f, 149, 710);
1086 pathB.lineTo(149, 675);
1087 pathB.cubicTo(149, 672.790833f, 151.238571f, 671, 154, 671);
1088 pathB.close();
1089 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1090}
1091
1092static void skpcyclist_friends_gr52(skiatest::Reporter* reporter) {
1093 SkPath path;
1094 path.setFillType(SkPath::kEvenOdd_FillType);
1095 path.moveTo(50, 182);
1096 path.lineTo(1215, 182);
1097 path.lineTo(1215, 202);
1098 path.quadTo(1214.99951f, 204.070572f, 1213.53552f, 205.535538f);
1099 path.quadTo(1212.07056f, 206.999496f, 1210, 207);
1100 path.lineTo(55, 207);
1101 path.quadTo(52.9294319f, 206.999496f, 51.4644661f, 205.535538f);
1102 path.quadTo(50.0004997f, 204.070572f, 50, 202);
1103 path.lineTo(50, 182);
1104 path.close();
1105 SkPath pathB;
1106 pathB.setFillType(SkPath::kInverseWinding_FillType);
1107 pathB.moveTo(50, 183);
1108 pathB.lineTo(1215, 183);
1109 pathB.lineTo(1215, 202);
1110 pathB.cubicTo(1215, 204.761429f, 1212.76147f, 207, 1210, 207);
1111 pathB.lineTo(55, 207);
1112 pathB.cubicTo(52.238575f, 207, 50, 204.761429f, 50, 202);
1113 pathB.lineTo(50, 183);
1114 pathB.close();
1115 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1116}
1117
1118/* cubic ends just above opp line */
1119static void skpwww_fj_p_com_22(skiatest::Reporter* reporter) {
1120 SkPath path;
1121 path.setFillType(SkPath::kEvenOdd_FillType);
1122 path.moveTo(172, 201);
1123 path.lineTo(172, 202);
1124 path.lineTo(220, 202);
1125 path.cubicTo(221.65686f, 202, 223, 200.65686f, 223, 199);
1126 path.cubicTo(223, 200.104568f, 221.65686f, 201, 220, 201);
1127 path.lineTo(172, 201);
1128 path.close();
1129 SkPath pathB;
1130 pathB.setFillType(SkPath::kWinding_FillType);
1131 pathB.moveTo(161, 202);
1132 pathB.lineTo(161, 199);
1133 pathB.lineTo(223, 199.000015f);
1134 pathB.lineTo(223, 202);
1135 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1136}
1137
1138#define TRY_SEPT_BROKEN_TESTS 0
1139#if TRY_SEPT_BROKEN_TESTS
1140// pair of lines are not quite coincident, so sorting line/cubic fails (i think)
1141static void skpwww_lavoixdunord_fr_11(skiatest::Reporter* reporter) {
1142 SkPath path;
1143 path.setFillType(SkPath::kEvenOdd_FillType);
1144 path.moveTo(806, 57);
1145 path.cubicTo(806, 55.3431473f, 807.34314f, 54, 809, 54);
1146 path.lineTo(930, 54);
1147 path.cubicTo(931.65686f, 54, 933, 55.3431473f, 933, 57);
1148 path.lineTo(933, 91);
1149 path.cubicTo(933, 92.6568527f, 931.65686f, 94, 930, 94);
1150 path.lineTo(809, 94);
1151 path.cubicTo(807.34314f, 94, 806, 92.6568527f, 806, 91);
1152 path.lineTo(806, 57);
1153 path.close();
1154 path.moveTo(808, 58);
1155 path.cubicTo(808, 56.8954315f, 808.895447f, 56, 810, 56);
1156 path.lineTo(929, 56);
1157 path.cubicTo(930.104553f, 56, 931, 56.8954315f, 931, 58);
1158 path.lineTo(931, 90);
1159 path.cubicTo(931, 91.1045685f, 930.104553f, 92, 929, 92);
1160 path.lineTo(810, 92);
1161 path.cubicTo(808.895447f, 92, 808, 91.1045685f, 808, 90);
1162 path.lineTo(808, 58);
1163 path.close();
1164 SkPath pathB;
1165 pathB.setFillType(SkPath::kWinding_FillType);
1166 pathB.moveTo(806, 54);
1167 pathB.lineTo(808, 56);
1168 pathB.lineTo(935.02002f, 56.0200005f);
1169 pathB.lineTo(933, 54);
1170 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1171}
1172
1173// pair of curves have nearly the same initial tangent but are sorting by
1174// that alone sorts them incorrectly. Need to detect that tangents are nearly
1175// identical and not reliable by themselves
1176static void skppptv_com_62(skiatest::Reporter* reporter) {
1177 SkPath path;
1178 path.setFillType(SkPath::kEvenOdd_FillType);
1179 path.moveTo(173, 5342);
1180 path.quadTo(171.343536f, 5342.00049f, 170.17157f, 5343.17139f);
1181 path.quadTo(169.000397f, 5344.34375f, 169, 5346);
1182 path.lineTo(169, 5372);
1183 path.lineTo(234, 5372);
1184 path.lineTo(234, 5346);
1185 path.quadTo(233.999603f, 5344.34375f, 232.82843f, 5343.17139f);
1186 path.quadTo(231.656464f, 5342.00049f, 230, 5342);
1187 path.lineTo(173, 5342);
1188 path.close();
1189 SkPath pathB;
1190 pathB.setFillType(SkPath::kInverseWinding_FillType);
1191 pathB.moveTo(173, 5342);
1192 pathB.lineTo(230, 5342);
1193 pathB.cubicTo(231.65686f, 5342, 233, 5343.79102f, 233, 5346);
1194 pathB.lineTo(233, 5372);
1195 pathB.lineTo(169, 5372);
1196 pathB.lineTo(169, 5346);
1197 pathB.cubicTo(169, 5343.79102f, 170.790863f, 5342, 173, 5342);
1198 pathB.close();
1199 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1200}
1201
1202// nearly identical to lavoixdunord -- to not-quite-coincident lines
1203static void skpwww_booking_com_68(skiatest::Reporter* reporter) {
1204 SkPath path;
1205 path.setFillType(SkPath::kEvenOdd_FillType);
1206 path.moveTo(90, 187);
1207 path.cubicTo(90, 185.34314f, 91.3431473f, 184, 93, 184);
1208 path.lineTo(588, 184);
1209 path.cubicTo(589.65686f, 184, 591, 185.34314f, 591, 187);
1210 path.lineTo(591, 218);
1211 path.cubicTo(591, 219.65686f, 589.65686f, 221, 588, 221);
1212 path.lineTo(93, 221);
1213 path.cubicTo(91.3431473f, 221, 90, 219.65686f, 90, 218);
1214 path.lineTo(90, 187);
1215 path.close();
1216 path.moveTo(92, 188);
1217 path.cubicTo(92, 186.895432f, 92.8954315f, 186, 94, 186);
1218 path.lineTo(587, 186);
1219 path.cubicTo(588.104553f, 186, 589, 186.895432f, 589, 188);
1220 path.lineTo(589, 217);
1221 path.cubicTo(589, 218.104568f, 588.104553f, 219, 587, 219);
1222 path.lineTo(94, 219);
1223 path.cubicTo(92.8954315f, 219, 92, 218.104568f, 92, 217);
1224 path.lineTo(92, 188);
1225 path.close();
1226 SkPath pathB;
1227 pathB.setFillType(SkPath::kWinding_FillType);
1228 pathB.moveTo(90, 184);
1229 pathB.lineTo(92, 186);
1230 pathB.lineTo(593.02002f, 186.020004f);
1231 pathB.lineTo(591, 184);
1232 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1233}
1234
1235// visually looks like lavoixdunord and www_booking_com
1236static void skpwww_despegar_com_mx_272(skiatest::Reporter* reporter) {
1237 SkPath path;
1238 path.setFillType(SkPath::kEvenOdd_FillType);
1239 path.moveTo(635, 1788);
1240 path.cubicTo(635, 1786.34314f, 636.34314f, 1785, 638, 1785);
1241 path.lineTo(832, 1785);
1242 path.cubicTo(833.65686f, 1785, 835, 1786.34314f, 835, 1788);
1243 path.lineTo(835, 1812);
1244 path.cubicTo(835, 1813.65686f, 833.65686f, 1815, 832, 1815);
1245 path.lineTo(638, 1815);
1246 path.cubicTo(636.34314f, 1815, 635, 1813.65686f, 635, 1812);
1247 path.lineTo(635, 1788);
1248 path.close();
1249 path.moveTo(637, 1789);
1250 path.cubicTo(637, 1787.89539f, 637.895447f, 1787, 639, 1787);
1251 path.lineTo(831, 1787);
1252 path.cubicTo(832.104553f, 1787, 833, 1787.89539f, 833, 1789);
1253 path.lineTo(833, 1811);
1254 path.cubicTo(833, 1812.10461f, 832.104553f, 1813, 831, 1813);
1255 path.lineTo(639, 1813);
1256 path.cubicTo(637.895447f, 1813, 637, 1812.10461f, 637, 1811);
1257 path.lineTo(637, 1789);
1258 path.close();
1259 SkPath pathB;
1260 pathB.setFillType(SkPath::kWinding_FillType);
1261 pathB.moveTo(835, 1785);
1262 pathB.lineTo(833, 1787);
1263 pathB.lineTo(832.97998f, 1817.02002f);
1264 pathB.lineTo(835, 1815);
1265 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1266}
1267#endif
1268
1269static void skpwww_joomla_org_23(skiatest::Reporter* reporter) {
1270 SkPath path;
1271 path.setFillType(SkPath::kEvenOdd_FillType);
1272 path.moveTo(320, 347);
1273 path.cubicTo(320, 344.238586f, 322.238586f, 342, 325, 342);
1274 path.lineTo(416, 342);
1275 path.cubicTo(418.761414f, 342, 421, 344.238586f, 421, 347);
1276 path.cubicTo(421, 344.790863f, 418.761414f, 343, 416, 343);
1277 path.lineTo(325, 343);
1278 path.cubicTo(322.238586f, 343, 320, 344.790863f, 320, 347);
1279 path.close();
1280 path.moveTo(320, 378);
1281 path.cubicTo(320, 380.761414f, 322.238586f, 383, 325, 383);
1282 path.lineTo(416, 383);
1283 path.cubicTo(418.761414f, 383, 421, 380.761414f, 421, 378);
1284 path.cubicTo(421, 380.209137f, 418.761414f, 382, 416, 382);
1285 path.lineTo(325, 382);
1286 path.cubicTo(322.238586f, 382, 320, 380.209137f, 320, 378);
1287 path.close();
1288 SkPath pathB;
1289 pathB.setFillType(SkPath::kWinding_FillType);
1290 pathB.moveTo(320, 383);
1291 pathB.lineTo(320, 378);
1292 pathB.lineTo(421, 378.000031f);
1293 pathB.lineTo(421, 383);
1294 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1295}
1296
1297static void skpwww_macrumors_com_131(skiatest::Reporter* reporter) {
1298 SkPath path;
1299 path.setFillType(SkPath::kEvenOdd_FillType);
1300 path.moveTo(136, 14089);
1301 path.lineTo(136, 14056);
1302 path.lineTo(778, 14056);
1303 path.lineTo(778, 14089);
1304 path.quadTo(777.999573f, 14090.6562f, 776.82843f, 14091.8281f);
1305 path.quadTo(775.656433f, 14093, 774, 14093);
1306 path.lineTo(140, 14093);
1307 path.quadTo(138.343552f, 14093, 137.17157f, 14091.8281f);
1308 path.quadTo(136.000397f, 14090.6562f, 136, 14089);
1309 path.close();
1310 SkPath pathB;
1311 pathB.setFillType(SkPath::kInverseWinding_FillType);
1312 pathB.moveTo(136, 14057);
1313 pathB.lineTo(778, 14057);
1314 pathB.lineTo(778, 14089);
1315 pathB.cubicTo(778, 14091.209f, 776.209167f, 14093, 774, 14093);
1316 pathB.lineTo(140, 14093);
1317 pathB.cubicTo(137.790863f, 14093, 136, 14091.209f, 136, 14089);
1318 pathB.lineTo(136, 14057);
1319 pathB.close();
1320 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1321}
1322
1323static void skpwww_leadpages_net_84(skiatest::Reporter* reporter) {
1324 SkPath path;
1325 path.setFillType(SkPath::kEvenOdd_FillType);
1326 path.moveTo(377.1716f, 5910.17139f);
1327 path.cubicTo(376.447723f, 5910.89551f, 376, 5911.89551f, 376, 5913);
1328 path.lineTo(376, 5972);
1329 path.cubicTo(376, 5974.20898f, 377.790863f, 5976, 380, 5976);
1330 path.cubicTo(378.34314f, 5976, 377, 5974.20898f, 377, 5972);
1331 path.lineTo(377, 5913);
1332 path.cubicTo(377, 5912.17139f, 377.335785f, 5911.42188f, 377.878693f, 5910.87891f);
1333 path.lineTo(377.1716f, 5910.17139f);
1334 path.close();
1335 SkPath pathB;
1336 pathB.setFillType(SkPath::kWinding_FillType);
1337 pathB.moveTo(376, 5909);
1338 pathB.lineTo(378.481873f, 5909);
1339 pathB.lineTo(379.999878f, 5976);
1340 pathB.lineTo(376, 5976);
1341 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1342}
1343
1344static void skpwww_briian_com_34(skiatest::Reporter* reporter) {
1345 SkPath path;
1346 path.setFillType(SkPath::kEvenOdd_FillType);
1347 path.moveTo(843, 216);
1348 path.cubicTo(843, 213.238571f, 845.238586f, 211, 848, 211);
1349 path.lineTo(1191, 211);
1350 path.cubicTo(1193.76147f, 211, 1196, 213.238571f, 1196, 216);
1351 path.lineTo(1196, 779);
1352 path.cubicTo(1196, 781.761414f, 1193.76147f, 784, 1191, 784);
1353 path.lineTo(848, 784);
1354 path.cubicTo(845.238586f, 784, 843, 781.761414f, 843, 779);
1355 path.lineTo(843, 216);
1356 path.close();
1357 path.moveTo(844, 217);
1358 path.cubicTo(844, 214.238571f, 846.238586f, 212, 849, 212);
1359 path.lineTo(1190, 212);
1360 path.cubicTo(1192.76147f, 212, 1195, 214.238571f, 1195, 217);
1361 path.lineTo(1195, 778);
1362 path.cubicTo(1195, 779.65686f, 1192.76147f, 781, 1190, 781);
1363 path.lineTo(849, 781);
1364 path.cubicTo(846.238586f, 781, 844, 779.65686f, 844, 778);
1365 path.lineTo(844, 217);
1366 path.close();
1367 SkPath pathB;
1368 pathB.setFillType(SkPath::kWinding_FillType);
1369 pathB.moveTo(843, 784);
1370 pathB.lineTo(843, 779);
1371 pathB.lineTo(1196, 779.000061f);
1372 pathB.lineTo(1196, 784);
1373 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1374}
1375
skia.committer@gmail.comf54ad6f2013-11-02 07:02:02 +00001376
1377static void skpwww_sciality_com_100(skiatest::Reporter* reporter) {
1378 SkPath path;
1379 path.setFillType(SkPath::kEvenOdd_FillType);
1380 path.moveTo(162, 468);
1381 path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472);
1382 path.lineTo(158, 528);
1383 path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532);
1384 path.lineTo(275, 532);
1385 path.cubicTo(277.209137f, 532, 279, 530.209106f, 279, 528);
1386 path.lineTo(279, 472);
1387 path.cubicTo(279, 469.790863f, 277.209137f, 468, 275, 468);
1388 path.lineTo(162, 468);
1389 path.close();
1390 SkPath pathB;
1391 pathB.setFillType(SkPath::kWinding_FillType);
1392 pathB.moveTo(275, 468);
1393 pathB.cubicTo(276.65686f, 468, 278, 469.34314f, 278, 471);
1394 pathB.lineTo(278, 529);
1395 pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532);
1396 pathB.lineTo(161, 532);
1397 pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529);
1398 pathB.lineTo(158, 471);
1399 pathB.cubicTo(158, 469.34314f, 159.34314f, 468, 161, 468);
1400 pathB.lineTo(275, 468);
1401 pathB.close();
1402 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1403}
1404
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001405#if TRY_SEPT_BROKEN_TESTS
skia.committer@gmail.comf54ad6f2013-11-02 07:02:02 +00001406static void skpwww_sciality_com_101(skiatest::Reporter* reporter) {
1407 SkPath path;
1408 path.setFillType(SkPath::kEvenOdd_FillType);
1409 path.moveTo(162, 468);
1410 path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472);
1411 path.lineTo(158, 528);
1412 path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532);
1413 path.lineTo(275.009186f, 532);
1414 path.cubicTo(276.661774f, 531.994995f, 278, 530.653748f, 278, 529);
1415 path.lineTo(278, 471);
1416 path.cubicTo(278, 469.346375f, 276.662079f, 468.005249f, 275.009705f, 468);
1417 path.lineTo(162, 468);
1418 path.close();
1419 SkPath pathB;
1420 pathB.setFillType(SkPath::kInverseWinding_FillType);
1421 pathB.moveTo(161, 469);
1422 pathB.lineTo(275, 469);
1423 pathB.cubicTo(276.65686f, 469, 278, 469.895416f, 278, 471);
1424 pathB.lineTo(278, 529);
1425 pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532);
1426 pathB.lineTo(161, 532);
1427 pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529);
1428 pathB.lineTo(158, 471);
1429 pathB.cubicTo(158, 469.895416f, 159.34314f, 469, 161, 469);
1430 pathB.close();
1431 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1432}
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001433#endif
1434
skia.committer@gmail.comf54ad6f2013-11-02 07:02:02 +00001435static void skpwww_meb_gov_tr_5(skiatest::Reporter* reporter) {
1436 SkPath path;
1437 path.setFillType(SkPath::kEvenOdd_FillType);
1438 path.moveTo(137.34314f, 145.34314f);
1439 path.quadTo(139.687088f, 143.000793f, 143, 143);
1440 path.lineTo(242, 143);
1441 path.quadTo(245.312912f, 143.000793f, 247.65686f, 145.34314f);
1442 path.quadTo(249.999207f, 147.687088f, 250, 151);
1443 path.lineTo(250, 177);
1444 path.lineTo(135, 177);
1445 path.lineTo(135, 151);
1446 path.quadTo(135.000793f, 147.687088f, 137.34314f, 145.34314f);
1447 path.close();
1448 SkPath pathB;
1449 pathB.setFillType(SkPath::kWinding_FillType);
1450 pathB.moveTo(135, 143);
1451 pathB.lineTo(250, 143);
1452 pathB.lineTo(250, 177);
1453 pathB.lineTo(135, 177);
1454 pathB.close();
1455 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1456}
1457
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001458#if TRY_SEPT_BROKEN_TESTS
skia.committer@gmail.comf54ad6f2013-11-02 07:02:02 +00001459static void skpwww_meb_gov_tr_6(skiatest::Reporter* reporter) {
1460 SkPath path;
1461 path.setFillType(SkPath::kEvenOdd_FillType);
1462 path.moveTo(143, 143);
1463 path.quadTo(139.687088f, 143.000793f, 137.34314f, 145.34314f);
1464 path.quadTo(135.000793f, 147.687088f, 135, 151);
1465 path.lineTo(135, 177);
1466 path.lineTo(250, 177);
1467 path.lineTo(250, 151);
1468 path.quadTo(249.999207f, 147.687088f, 247.65686f, 145.34314f);
1469 path.quadTo(245.312912f, 143.000793f, 242, 143);
1470 path.lineTo(143, 143);
1471 path.close();
1472 SkPath pathB;
1473 pathB.setFillType(SkPath::kInverseWinding_FillType);
1474 pathB.moveTo(143, 143);
1475 pathB.lineTo(242, 143);
1476 pathB.cubicTo(245.865997f, 143, 249, 146.581726f, 249, 151);
1477 pathB.lineTo(249, 177);
1478 pathB.lineTo(135, 177);
1479 pathB.lineTo(135, 151);
1480 pathB.cubicTo(135, 146.581726f, 138.581726f, 143, 143, 143);
1481 pathB.close();
1482 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1483}
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001484#endif
1485
skia.committer@gmail.comf54ad6f2013-11-02 07:02:02 +00001486static void skpgithub_io_25(skiatest::Reporter* reporter) {
1487 SkPath path;
1488 path.setFillType(SkPath::kEvenOdd_FillType);
1489 path.moveTo(1001.87866f, 14.8786793f);
1490 path.quadTo(1002.75745f, 14.0001001f, 1004, 14);
1491 path.lineTo(1105, 14);
1492 path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f);
1493 path.quadTo(1107.99988f, 15.7574596f, 1108, 17);
1494 path.lineTo(1108, 41);
1495 path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f);
1496 path.quadTo(1106.24255f, 43.9999008f, 1105, 44);
1497 path.lineTo(1004, 44);
1498 path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f);
1499 path.quadTo(1001.00012f, 42.2425423f, 1001, 41);
1500 path.lineTo(1001, 17);
1501 path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f);
1502 path.close();
1503 SkPath pathB;
1504 pathB.setFillType(SkPath::kInverseWinding_FillType);
1505 pathB.moveTo(1005, 16);
1506 pathB.lineTo(1104, 16);
1507 pathB.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18);
1508 pathB.lineTo(1106, 40);
1509 pathB.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42);
1510 pathB.lineTo(1005, 42);
1511 pathB.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40);
1512 pathB.lineTo(1003, 18);
1513 pathB.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16);
1514 pathB.close();
1515 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1516}
1517
1518static void skpgithub_io_26(skiatest::Reporter* reporter) {
1519 SkPath path;
1520 path.setFillType(SkPath::kEvenOdd_FillType);
1521 path.moveTo(1001.87866f, 14.8786793f);
1522 path.quadTo(1002.75745f, 14.0001001f, 1004, 14);
1523 path.lineTo(1105, 14);
1524 path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f);
1525 path.quadTo(1107.99988f, 15.7574596f, 1108, 17);
1526 path.lineTo(1108, 41);
1527 path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f);
1528 path.quadTo(1106.24255f, 43.9999008f, 1105, 44);
1529 path.lineTo(1004, 44);
1530 path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f);
1531 path.quadTo(1001.00012f, 42.2425423f, 1001, 41);
1532 path.lineTo(1001, 17);
1533 path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f);
1534 path.close();
1535 path.moveTo(1003, 18);
1536 path.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16);
1537 path.lineTo(1104, 16);
1538 path.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18);
1539 path.lineTo(1106, 40);
1540 path.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42);
1541 path.lineTo(1005, 42);
1542 path.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40);
1543 path.lineTo(1003, 18);
1544 path.close();
1545 SkPath pathB;
1546 pathB.setFillType(SkPath::kWinding_FillType);
1547 pathB.moveTo(1108, 14);
1548 pathB.lineTo(1106, 16);
1549 pathB.lineTo(1105.97998f, 46.0200005f);
1550 pathB.lineTo(1108, 44);
1551 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1552}
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001553
skia.committer@gmail.comed000842013-11-09 07:02:23 +00001554static void skpskpicture14(skiatest::Reporter* reporter) {
1555 SkPath path;
1556 path.setFillType(SkPath::kEvenOdd_FillType);
1557 path.moveTo(0, 994);
1558 path.lineTo(0, 0);
1559 path.lineTo(512, 0);
1560 path.lineTo(512, 994);
1561 path.lineTo(0, 994);
1562 path.close();
1563 SkPath pathB;
1564 pathB.setFillType(SkPath::kWinding_FillType);
1565 pathB.moveTo(-317, 168);
1566 pathB.quadTo(-317, 166.757385f, -316.121338f, 165.878662f);
1567 pathB.quadTo(-315.242645f, 165, -314, 165);
1568 pathB.lineTo(320, 165);
1569 pathB.quadTo(321.242615f, 165, 322.121338f, 165.878662f);
1570 pathB.quadTo(323, 166.757385f, 323, 168);
1571 pathB.lineTo(323, 193);
1572 pathB.lineTo(-317, 193);
1573 pathB.close();
1574 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1575}
1576
caryclark@google.comc4a4f9d2013-11-08 18:11:08 +00001577#if TRY_SEPT_BROKEN_TESTS
skia.committer@gmail.comed000842013-11-09 07:02:23 +00001578static void skpskpicture15(skiatest::Reporter* reporter) {
1579 SkPath path;
1580 path.setFillType(SkPath::kEvenOdd_FillType);
1581 path.moveTo(0, 193);
1582 path.lineTo(323, 193);
1583 path.lineTo(323, 168);
1584 path.quadTo(323, 166.757385f, 322.121338f, 165.878662f);
1585 path.quadTo(321.242615f, 165, 320, 165);
1586 path.lineTo(0, 165);
1587 path.lineTo(0, 193);
1588 path.close();
1589 SkPath pathB;
1590 pathB.setFillType(SkPath::kInverseWinding_FillType);
1591 pathB.moveTo(-314, 165);
1592 pathB.lineTo(320, 165);
1593 pathB.cubicTo(321.65686f, 165, 323, 166.34314f, 323, 168);
1594 pathB.lineTo(323, 192);
1595 pathB.lineTo(-317, 192);
1596 pathB.lineTo(-317, 168);
1597 pathB.cubicTo(-317, 166.34314f, -315.65686f, 165, -314, 165);
1598 pathB.close();
1599 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1600}
caryclark@google.comc4a4f9d2013-11-08 18:11:08 +00001601#endif
caryclark@google.com15107262013-11-08 18:00:01 +00001602
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00001603static void (*firstTest)(skiatest::Reporter* ) = 0;
1604
1605static struct TestDesc tests[] = {
caryclark@google.com15107262013-11-08 18:00:01 +00001606 TEST(skpskpicture14),
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001607#if TRY_SEPT_BROKEN_TESTS
caryclark@google.com15107262013-11-08 18:00:01 +00001608 TEST(skpskpicture15),
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001609 TEST(skpwww_meb_gov_tr_6),
1610 TEST(skpwww_sciality_com_101),
1611 TEST(skpwww_booking_com_68), // similar to lavoixdunord
1612 TEST(skpwww_despegar_com_mx_272), // similar to lavoixdunord
1613 TEST(skpwww_lavoixdunord_fr_11), // not quite coincident, sorting line/cubic fails
1614 TEST(skppptv_com_62), // cubic have nearly identical tangents, sort incorrectly
1615#endif
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00001616#if TRY_BROKEN_TESTS
1617 TEST(skppchappy_com_au102),
1618 TEST(skpsciality_com161),
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00001619 TEST(skpi_gino_com16),
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001620 TEST(skpnaoxrane_ru23), // see test for failure evaluation
1621 TEST(skptcmevents_org23), // see test for (partial) failure evaluation
1622 TEST(skpredbullskatearcade_es16), // cubic have nearly identical tangents, sort incorrectly
1623 TEST(skpfinanzasdigital_com9), // cubic/quad tangents too close to sort
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00001624#endif
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +00001625 TEST(skpgithub_io_26),
1626 TEST(skpgithub_io_25),
1627 TEST(skpwww_meb_gov_tr_5),
1628 TEST(skpwww_sciality_com_100),
1629 TEST(skpwww_joomla_org_23),
1630 TEST(skpwww_macrumors_com_131),
1631 TEST(skpwww_briian_com_34),
1632 TEST(skpwww_leadpages_net_84),
1633 TEST(skpwww_fj_p_com_22),
1634 TEST(skppartainasdemo250_org56),
1635 TEST(skpsd_graphic_net104),
1636 TEST(skpbreakmystyle_com10),
1637 TEST(skpnational_com_au81),
1638 TEST(skprentacheat_com30),
1639 TEST(skptracksflow_com9),
1640 TEST(skpautobutler_dk29),
1641 TEST(skponlinecollege_org144),
1642 TEST(skphostloco_com11),
1643 TEST(skpsergeychunkevich_com8),
1644 TEST(skpmlk_com326),
1645 TEST(skpcyclist_friends_gr52),
1646 TEST(skpfrauen_magazin_com83),
1647 TEST(skpthesuburbanite_com213),
1648 TEST(skpsudoestenegocios_com186),
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00001649 TEST(skpmtrk_uz27),
1650 TEST(skpilkoora_com37),
1651 TEST(skpmm4everfriends_com43),
1652 TEST(skpflite_com41),
1653 TEST(skpcheeseandburger_com225),
1654 TEST(skpeverytechpro_blogspot_com100),
1655};
1656
1657static const size_t testCount = SK_ARRAY_COUNT(tests);
1658
1659static bool runReverse = false;
1660static void (*stopTest)(skiatest::Reporter* ) = 0;
1661
tfarina@chromium.org78e7b4e2014-01-02 21:45:03 +00001662DEF_TEST(PathOpsSkp, reporter) {
caryclark@google.com7eaa53d2013-10-02 14:49:34 +00001663#if DEBUG_SHOW_TEST_NAME
1664 strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
1665#endif
1666 RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse);
1667}