Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
PathOpsBuilderConicTest.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2014 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
10#include "include/core/SkPath.h"
12#include "include/core/SkRect.h"
18#include "src/base/SkRandom.h"
20#include "tests/Test.h"
22
23#define DEBUG_SIMPLIFY_FAILS 0
24
33
34static void testOvalSet(const OvalSet& set, const SkPath& oval, SkOpBuilder* builder,
35 SkRegion* region, SkPath* result) {
36 for (int x = 0; x < set.fColumns; ++x) {
37 for (int y = 0; y < set.fRows; ++y) {
38 for (SkScalar r = 0; r < 360; r += 360.f / set.fRotations) {
39 SkPath rotated;
40 SkMatrix matrix;
41 matrix.reset();
42 matrix.postRotate(r, 0, 0);
43 matrix.postTranslate(x * set.fXSpacing, y * set.fYSpacing);
44 oval.transform(matrix, &rotated);
45 if (builder) {
46 builder->add(rotated, kUnion_SkPathOp);
47 } else if (!region) {
48 Op(*result, rotated, kUnion_SkPathOp, result);
49 } else {
50 SkRegion rgnB, openClip;
51 openClip.setRect({-16000, -16000, 16000, 16000});
52 rgnB.setPath(rotated, openClip);
53 region->op(rgnB, SkRegion::kUnion_Op);
54 }
55 }
56 }
57 }
58 if (builder) {
59 builder->resolve(result);
60 } else if (region) {
61 region->getBoundaryPath(result);
62 }
63}
64
65static void testOne(skiatest::Reporter* reporter, const OvalSet& set) {
66 SkPath oval, regionResult, builderResult, opResult;
67 oval.setFillType(SkPathFillType::kWinding);
68 oval.addOval(set.fBounds);
69 SkOpBuilder builder;
70 SkRegion region;
71 testOvalSet(set, oval, nullptr, &region, &regionResult);
72 testOvalSet(set, oval, &builder, nullptr, &builderResult);
73 testOvalSet(set, oval, nullptr, nullptr, &opResult);
75 comparePaths(reporter, __FUNCTION__ , regionResult, builderResult, bitmap);
76 comparePaths(reporter, __FUNCTION__ , regionResult, opResult, bitmap);
77}
78
80 int fCol;
81 int fRow;
82 int fRot;
83 int fTrial;
84} oneOffs[] = {
85 { 2, 2, 9, 73 },
86 { 1, 2, 7, 93 }
87};
88
89static void setupOne(skiatest::Reporter* reporter, int col, int row, int rot, int trial) {
90 const int scale = 10;
91 SkRandom r;
92 r.setSeed(col * 100000000 + row * 10000000 + rot * 1000000 + trial);
93 SkScalar xOffset = r.nextRangeScalar(1, 40) * scale;
94 SkScalar yOffset = r.nextRangeScalar(1, 100) * scale;
95 OvalSet set = {{0, 0, 0, 0}, col, row, rot, xOffset, yOffset};
96 set.fBounds.setXYWH(5, 5,
97 r.nextRangeScalar(5, 50) * scale, r.nextRangeScalar(50, 90) * scale);
98 testOne(reporter, set);
99}
100
101static DEFINE_int(processOffset, 0,
102 "Offset the test by this value. This permits multiple processes "
103 "to exercise the same test in parallel with different test values.");
104static DEFINE_int(processCount, 1,
105 "Test iteration count. This permits multiple processes "
106 "to exercise the same test in parallel with different test values.");
107static DEFINE_int(trialRuns, 100, "Run this many tests (defaults to 100).");
108
109DEF_TEST(SixtyOvals, reporter) {
110 bool skipOneOffs = false;
111 int trialRuns = FLAGS_trialRuns / FLAGS_processCount;
112 for (int col = 1; col <= 2; ++col) {
113 for (int row = 1; row <= 3; ++row) {
114 for (int rot = 2; rot <= 9; ++rot) {
115 for (int trial = FLAGS_processOffset * trialRuns; --trialRuns >= 0; ++trial) {
116 if (skipOneOffs) {
117 for (const OvalSetOneOff& oneOff : oneOffs) {
118 if (col == oneOff.fCol && row == oneOff.fRow && rot == oneOff.fRot
119 && trial == oneOff.fTrial) {
120 goto skipTest;
121 }
122 }
123 }
124 setupOne(reporter, col, row, rot, trial);
125 skipTest:
126 ;
127 }
128 }
129 }
130 }
131}
132
133DEF_TEST(SixtyOvalsOneOff, reporter) {
134 for (const OvalSetOneOff& oneOff : oneOffs) {
135 setupOne(reporter, oneOff.fCol, oneOff.fRow, oneOff.fRot, oneOff.fTrial);
136 }
137}
138
139#if DEBUG_SIMPLIFY_FAILS
140static bool simplify_fails(skiatest::Reporter* reporter, const SkPath& path) {
141 SkPath simplifiedPath;
142 bool failed = !Simplify(path, &simplifiedPath);
143 if (!failed) {
145 failed = !!comparePaths(reporter, __FUNCTION__, path, simplifiedPath, bitmap);
146 }
147 return failed;
148}
149
150static SkPath subset_simplify_fail(skiatest::Reporter* reporter, const SkPath& path) {
151 SubsetContours subsetContours(path);
152 bool failed = simplify_fails(reporter, path);
153 SkASSERT(failed);
154 SkPath lastFailed = path;
155 SkPath minimal;
156 while (subsetContours.subset(failed, &minimal)) {
157 failed = simplify_fails(reporter, minimal);
158 SkDebugf(" %s\n", failed ? "failed" : "");
159 if (failed) {
160 lastFailed = minimal;
161 }
162 }
163 failed = simplify_fails(reporter, lastFailed);
164 SkASSERT(failed);
165 SubsetVerbs subsetVerbs(lastFailed);
166 while (subsetVerbs.subset(failed, &minimal)) {
167 failed = simplify_fails(reporter, minimal);
168 SkDebugf(" %s\n", failed ? "failed" : "");
169 if (failed) {
170 lastFailed = minimal;
171 }
172 }
173 return lastFailed;
174}
175#endif
176
177DEF_TEST(SixtyOvals_2_2_9_73, reporter) {
178 SkPath path;
179 path.moveTo(SkBits2Float(0x434d53ca), SkBits2Float(0x43ad6ab0)); // 205.327f, 346.833f
180path.conicTo(SkBits2Float(0x434d53ca), SkBits2Float(0x40a00000), SkBits2Float(0x42d253ca), SkBits2Float(0x40a00000), SkBits2Float(0x3f3504f3)); // 205.327f, 5, 105.164f, 5, 0.707107f
181path.conicTo(SkBits2Float(0x40a00000), SkBits2Float(0x40a00000), SkBits2Float(0x40a00000), SkBits2Float(0x43ad6ab0), SkBits2Float(0x3f3504f3)); // 5, 5, 5, 346.833f, 0.707107f
182path.conicTo(SkBits2Float(0x40a00000), SkBits2Float(0x442c2ab0), SkBits2Float(0x42d253ca), SkBits2Float(0x442c2ab0), SkBits2Float(0x3f3504f3)); // 5, 688.667f, 105.164f, 688.667f, 0.707107f
183path.conicTo(SkBits2Float(0x434d53ca), SkBits2Float(0x442c2ab0), SkBits2Float(0x434d53ca), SkBits2Float(0x43ad6ab0), SkBits2Float(0x3f3504f3)); // 205.327f, 688.667f, 205.327f, 346.833f, 0.707107f
184path.close();
185path.moveTo(SkBits2Float(0xc2834d04), SkBits2Float(0x43c6d5fb)); // -65.6504f, 397.672f
186path.conicTo(SkBits2Float(0x431a136e), SkBits2Float(0x4307cfe3), SkBits2Float(0x429ab133), SkBits2Float(0x428edb31), SkBits2Float(0x3f3504f3)); // 154.076f, 135.812f, 77.3461f, 71.4281f, 0.707107f
187path.conicTo(SkBits2Float(0x3f1dc4d0), SkBits2Float(0x40e169c2), SkBits2Float(0xc35b1c2c), SkBits2Float(0x438673b0), SkBits2Float(0x3f3504f3)); // 0.616284f, 7.04416f, -219.11f, 268.904f, 0.707107f
188path.conicTo(SkBits2Float(0xc3db6b0e), SkBits2Float(0x4404b0dc), SkBits2Float(0xc3b50da4), SkBits2Float(0x4414c96f), SkBits2Float(0x3f3504f3)); // -438.836f, 530.763f, -362.107f, 595.147f, 0.707107f
189path.conicTo(SkBits2Float(0xc38eb03a), SkBits2Float(0x4424e202), SkBits2Float(0xc2834d04), SkBits2Float(0x43c6d5fb), SkBits2Float(0x3f3504f3)); // -285.377f, 659.531f, -65.6504f, 397.672f, 0.707107f
190path.close();
191path.moveTo(SkBits2Float(0xc398f46d), SkBits2Float(0x438337ac)); // -305.91f, 262.435f
192path.conicTo(SkBits2Float(0x41f5d870), SkBits2Float(0x434b137f), SkBits2Float(0x41556629), SkBits2Float(0x42d0de52), SkBits2Float(0x3f3504f3)); // 30.7307f, 203.076f, 13.3374f, 104.434f, 0.707107f
193path.conicTo(SkBits2Float(0xc081c918), SkBits2Float(0x40b95a5c), SkBits2Float(0xc3aa5918), SkBits2Float(0x42824d58), SkBits2Float(0x3f3504f3)); // -4.0558f, 5.79228f, -340.696f, 65.1511f, 0.707107f
194path.conicTo(SkBits2Float(0xc4295587), SkBits2Float(0x42f9050a), SkBits2Float(0xc424fc5c), SkBits2Float(0x435f26db), SkBits2Float(0x3f3504f3)); // -677.336f, 124.51f, -659.943f, 223.152f, 0.707107f
195path.conicTo(SkBits2Float(0xc420a331), SkBits2Float(0x43a0e598), SkBits2Float(0xc398f46d), SkBits2Float(0x438337ac), SkBits2Float(0x3f3504f3)); // -642.55f, 321.794f, -305.91f, 262.435f, 0.707107f
196path.close();
197path.moveTo(SkBits2Float(0xc3c983e0), SkBits2Float(0x408cdc40)); // -403.03f, 4.40189f
198path.conicTo(SkBits2Float(0xc2d5fcd2), SkBits2Float(0x432f5193), SkBits2Float(0xc263a5d9), SkBits2Float(0x42b12617), SkBits2Float(0x3f3504f3)); // -106.994f, 175.319f, -56.912f, 88.5744f, 0.707107f
199path.conicTo(SkBits2Float(0xc0da9066), SkBits2Float(0x3fea4196), SkBits2Float(0xc3976eed), SkBits2Float(0xc329162e), SkBits2Float(0x3f3504f3)); // -6.83013f, 1.83013f, -302.867f, -169.087f, 0.707107f
200path.conicTo(SkBits2Float(0xc415b9cc), SkBits2Float(0xc3aa006f), SkBits2Float(0xc4223f09), SkBits2Float(0xc37d4256), SkBits2Float(0x3f3504f3)); // -598.903f, -340.003f, -648.985f, -253.259f, 0.707107f
201path.conicTo(SkBits2Float(0xc42ec446), SkBits2Float(0xc32683cf), SkBits2Float(0xc3c983e0), SkBits2Float(0x408cdc40), SkBits2Float(0x3f3504f3)); // -699.067f, -166.515f, -403.03f, 4.40189f, 0.707107f
202path.close();
203path.moveTo(SkBits2Float(0xc39bc8c8), SkBits2Float(0xc37fb0d7)); // -311.569f, -255.691f
204path.conicTo(SkBits2Float(0xc342a797), SkBits2Float(0x42830e25), SkBits2Float(0xc2c9102e), SkBits2Float(0x41fa2834), SkBits2Float(0x3f3504f3)); // -194.655f, 65.5276f, -100.532f, 31.2696f, 0.707107f
205path.conicTo(SkBits2Float(0xc0cd12f5), SkBits2Float(0xc03f4152), SkBits2Float(0xc2f6a523), SkBits2Float(0xc3a21a77), SkBits2Float(0x3f3504f3)); // -6.40856f, -2.98836f, -123.323f, -324.207f, 0.707107f
206path.conicTo(SkBits2Float(0xc3703c8a), SkBits2Float(0xc4215b37), SkBits2Float(0xc3a72e05), SkBits2Float(0xc418cab4), SkBits2Float(0x3f3504f3)); // -240.236f, -645.425f, -334.36f, -611.167f, 0.707107f
207path.conicTo(SkBits2Float(0xc3d63dc5), SkBits2Float(0xc4103a31), SkBits2Float(0xc39bc8c8), SkBits2Float(0xc37fb0d7), SkBits2Float(0x3f3504f3)); // -428.483f, -576.909f, -311.569f, -255.691f, 0.707107f
208path.close();
209path.moveTo(SkBits2Float(0xc294a419), SkBits2Float(0xc3c6124c)); // -74.3205f, -396.143f
210path.conicTo(SkBits2Float(0xc33f3c05), SkBits2Float(0xc295d95d), SkBits2Float(0xc2c2390a), SkBits2Float(0xc222aa8c), SkBits2Float(0x3f3504f3)); // -191.234f, -74.9245f, -97.1114f, -40.6665f, 0.707107f
211path.conicTo(SkBits2Float(0xc03f4154), SkBits2Float(0xc0cd12f4), SkBits2Float(0x42e3d9e6), SkBits2Float(0xc3a3d041), SkBits2Float(0x3f3504f3)); // -2.98836f, -6.40856f, 113.926f, -327.627f, 0.707107f
212path.conicTo(SkBits2Float(0x4366d6ec), SkBits2Float(0xc422361b), SkBits2Float(0x4308b76c), SkBits2Float(0xc42ac69e), SkBits2Float(0x3f3504f3)); // 230.84f, -648.845f, 136.716f, -683.103f, 0.707107f
213path.conicTo(SkBits2Float(0x422a5fb0), SkBits2Float(0xc4335721), SkBits2Float(0xc294a419), SkBits2Float(0xc3c6124c), SkBits2Float(0x3f3504f3)); // 42.5934f, -717.361f, -74.3205f, -396.143f, 0.707107f
214path.close();
215path.moveTo(SkBits2Float(0x4345b3f8), SkBits2Float(0xc3af9e21)); // 197.703f, -351.235f
216path.conicTo(SkBits2Float(0xc2c4aac2), SkBits2Float(0xc3345194), SkBits2Float(0xc24101bb), SkBits2Float(0xc2bb2617), SkBits2Float(0x3f3504f3)); // -98.3335f, -180.319f, -48.2517f, -93.5744f, 0.707107f
217path.conicTo(SkBits2Float(0x3fea41a0), SkBits2Float(0xc0da9066), SkBits2Float(0x4394eeee), SkBits2Float(0xc331bf31), SkBits2Float(0x3f3504f3)); // 1.83013f, -6.83013f, 297.867f, -177.747f, 0.707107f
218path.conicTo(SkBits2Float(0x441479cd), SkBits2Float(0xc3ae54f0), SkBits2Float(0x4407f490), SkBits2Float(0xc3d9b434), SkBits2Float(0x3f3504f3)); // 593.903f, -348.664f, 543.821f, -435.408f, 0.707107f
219path.conicTo(SkBits2Float(0x43f6dea8), SkBits2Float(0xc40289bc), SkBits2Float(0x4345b3f8), SkBits2Float(0xc3af9e21), SkBits2Float(0x3f3504f3)); // 493.74f, -522.152f, 197.703f, -351.235f, 0.707107f
220path.close();
221path.moveTo(SkBits2Float(0x43bc9c08), SkBits2Float(0xc30dfb1e)); // 377.219f, -141.981f
222path.conicTo(SkBits2Float(0x422250a2), SkBits2Float(0xc34956f5), SkBits2Float(0x41b97bee), SkBits2Float(0xc2cd653e), SkBits2Float(0x3f3504f3)); // 40.5787f, -201.34f, 23.1855f, -102.698f, 0.707107f
223path.conicTo(SkBits2Float(0x40b95a5b), SkBits2Float(0xc081c919), SkBits2Float(0x43ab375e), SkBits2Float(0x425d363a), SkBits2Float(0x3f3504f3)); // 5.79228f, -4.0558f, 342.433f, 55.303f, 0.707107f
224path.conicTo(SkBits2Float(0x4429c4a9), SkBits2Float(0x42e552cb), SkBits2Float(0x442e1dd4), SkBits2Float(0x4180287c), SkBits2Float(0x3f3504f3)); // 679.073f, 114.662f, 696.466f, 16.0198f, 0.707107f
225path.conicTo(SkBits2Float(0x443276ff), SkBits2Float(0xc2a53e8d), SkBits2Float(0x43bc9c08), SkBits2Float(0xc30dfb1e), SkBits2Float(0x3f3504f3)); // 713.859f, -82.6222f, 377.219f, -141.981f, 0.707107f
226path.close();
227path.moveTo(SkBits2Float(0x43be1d75), SkBits2Float(0x4305b53c)); // 380.23f, 133.708f
228path.conicTo(SkBits2Float(0x432080f6), SkBits2Float(0xc30026d3), SkBits2Float(0x42a78c44), SkBits2Float(0xc27f121c), SkBits2Float(0x3f3504f3)); // 160.504f, -128.152f, 83.774f, -63.7677f, 0.707107f
229path.conicTo(SkBits2Float(0x40e169c3), SkBits2Float(0x3f1dc4b8), SkBits2Float(0x4362c542), SkBits2Float(0x43833cea), SkBits2Float(0x3f3504f3)); // 7.04416f, 0.616283f, 226.771f, 262.476f, 0.707107f
230path.conicTo(SkBits2Float(0x43df3f9c), SkBits2Float(0x44031579), SkBits2Float(0x4402ce83), SkBits2Float(0x43e5f9cc), SkBits2Float(0x3f3504f3)); // 446.497f, 524.336f, 523.227f, 459.952f, 0.707107f
231path.conicTo(SkBits2Float(0x4415fd38), SkBits2Float(0x43c5c8a6), SkBits2Float(0x43be1d75), SkBits2Float(0x4305b53c), SkBits2Float(0x3f3504f3)); // 599.957f, 395.568f, 380.23f, 133.708f, 0.707107f
232path.close();
233path.moveTo(SkBits2Float(0x434d53ca), SkBits2Float(0x44487cfb)); // 205.327f, 801.953f
234path.conicTo(SkBits2Float(0x434d53ca), SkBits2Float(0x43e60f46), SkBits2Float(0x42d253ca), SkBits2Float(0x43e60f46), SkBits2Float(0x3f3504f3)); // 205.327f, 460.119f, 105.164f, 460.119f, 0.707107f
235path.conicTo(SkBits2Float(0x40a00000), SkBits2Float(0x43e60f46), SkBits2Float(0x40a00000), SkBits2Float(0x44487cfb), SkBits2Float(0x3f3504f3)); // 5, 460.119f, 5, 801.953f, 0.707107f
236path.conicTo(SkBits2Float(0x40a00000), SkBits2Float(0x448ef92a), SkBits2Float(0x42d253ca), SkBits2Float(0x448ef92a), SkBits2Float(0x3f3504f3)); // 5, 1143.79f, 105.164f, 1143.79f, 0.707107f
237path.conicTo(SkBits2Float(0x434d53ca), SkBits2Float(0x448ef92a), SkBits2Float(0x434d53ca), SkBits2Float(0x44487cfb), SkBits2Float(0x3f3504f3)); // 205.327f, 1143.79f, 205.327f, 801.953f, 0.707107f
238path.close();
239path.moveTo(SkBits2Float(0xc2834d04), SkBits2Float(0x445532a0)); // -65.6504f, 852.791f
240path.conicTo(SkBits2Float(0x431a136e), SkBits2Float(0x4413bb9c), SkBits2Float(0x429ab133), SkBits2Float(0x4403a309), SkBits2Float(0x3f3504f3)); // 154.076f, 590.931f, 77.3461f, 526.547f, 0.707107f
241path.conicTo(SkBits2Float(0x3f1dc4d0), SkBits2Float(0x43e714ed), SkBits2Float(0xc35b1c2c), SkBits2Float(0x4435017b), SkBits2Float(0x3f3504f3)); // 0.616284f, 462.163f, -219.11f, 724.023f, 0.707107f
242path.conicTo(SkBits2Float(0xc3db6b0e), SkBits2Float(0x4476787f), SkBits2Float(0xc3b50da4), SkBits2Float(0x44834889), SkBits2Float(0x3f3504f3)); // -438.836f, 985.883f, -362.107f, 1050.27f, 0.707107f
243path.conicTo(SkBits2Float(0xc38eb03a), SkBits2Float(0x448b54d2), SkBits2Float(0xc2834d04), SkBits2Float(0x445532a0), SkBits2Float(0x3f3504f3)); // -285.377f, 1114.65f, -65.6504f, 852.791f, 0.707107f
244path.close();
245path.moveTo(SkBits2Float(0xc398f46d), SkBits2Float(0x44336379)); // -305.91f, 717.554f
246path.conicTo(SkBits2Float(0x41f5d870), SkBits2Float(0x44248c83), SkBits2Float(0x41556629), SkBits2Float(0x440be36d), SkBits2Float(0x3f3504f3)); // 30.7307f, 658.195f, 13.3374f, 559.554f, 0.707107f
247path.conicTo(SkBits2Float(0xc081c918), SkBits2Float(0x43e674af), SkBits2Float(0xc3aa5918), SkBits2Float(0x4402114e), SkBits2Float(0x3f3504f3)); // -4.0558f, 460.912f, -340.696f, 520.27f, 0.707107f
248path.conicTo(SkBits2Float(0xc4295587), SkBits2Float(0x4410e844), SkBits2Float(0xc424fc5c), SkBits2Float(0x4429915a), SkBits2Float(0x3f3504f3)); // -677.336f, 579.629f, -659.943f, 678.271f, 0.707107f
249path.conicTo(SkBits2Float(0xc420a331), SkBits2Float(0x44423a6f), SkBits2Float(0xc398f46d), SkBits2Float(0x44336379), SkBits2Float(0x3f3504f3)); // -642.55f, 776.913f, -305.91f, 717.554f, 0.707107f
250path.close();
251path.moveTo(SkBits2Float(0xc3c983e0), SkBits2Float(0x43e5c2b7)); // -403.03f, 459.521f
252path.conicTo(SkBits2Float(0xc2d5fcd2), SkBits2Float(0x441d9c08), SkBits2Float(0xc263a5d9), SkBits2Float(0x4407ec66), SkBits2Float(0x3f3504f3)); // -106.994f, 630.438f, -56.912f, 543.694f, 0.707107f
253path.conicTo(SkBits2Float(0xc0da9066), SkBits2Float(0x43e47988), SkBits2Float(0xc3976eed), SkBits2Float(0x438f042f), SkBits2Float(0x3f3504f3)); // -6.83013f, 456.949f, -302.867f, 286.033f, 0.707107f
254path.conicTo(SkBits2Float(0xc415b9cc), SkBits2Float(0x42e63b5c), SkBits2Float(0xc4223f09), SkBits2Float(0x4349dc36), SkBits2Float(0x3f3504f3)); // -598.903f, 115.116f, -648.985f, 201.86f, 0.707107f
255path.conicTo(SkBits2Float(0xc42ec446), SkBits2Float(0x43904d5e), SkBits2Float(0xc3c983e0), SkBits2Float(0x43e5c2b7), SkBits2Float(0x3f3504f3)); // -699.067f, 288.604f, -403.03f, 459.521f, 0.707107f
256path.close();
257path.moveTo(SkBits2Float(0xc39bc8c8), SkBits2Float(0x43476db5)); // -311.569f, 199.429f
258path.conicTo(SkBits2Float(0xc342a797), SkBits2Float(0x44022968), SkBits2Float(0xc2c9102e), SkBits2Float(0x43f331c9), SkBits2Float(0x3f3504f3)); // -194.655f, 520.647f, -100.532f, 486.389f, 0.707107f
259path.conicTo(SkBits2Float(0xc0cd12f5), SkBits2Float(0x43e210c3), SkBits2Float(0xc2f6a523), SkBits2Float(0x4302e99e), SkBits2Float(0x3f3504f3)); // -6.40856f, 452.131f, -123.323f, 130.913f, 0.707107f
260path.conicTo(SkBits2Float(0xc3703c8a), SkBits2Float(0xc33e4e50), SkBits2Float(0xc3a72e05), SkBits2Float(0xc31c0c44), SkBits2Float(0x3f3504f3)); // -240.236f, -190.306f, -334.36f, -156.048f, 0.707107f
261path.conicTo(SkBits2Float(0xc3d63dc5), SkBits2Float(0xc2f39470), SkBits2Float(0xc39bc8c8), SkBits2Float(0x43476db5), SkBits2Float(0x3f3504f3)); // -428.483f, -121.79f, -311.569f, 199.429f, 0.707107f
262path.close();
263path.moveTo(SkBits2Float(0xc294a419), SkBits2Float(0x426be7d0)); // -74.3205f, 58.9764f
264path.conicTo(SkBits2Float(0xc33f3c05), SkBits2Float(0x43be18ef), SkBits2Float(0xc2c2390a), SkBits2Float(0x43cf39f4), SkBits2Float(0x3f3504f3)); // -191.234f, 380.195f, -97.1114f, 414.453f, 0.707107f
265path.conicTo(SkBits2Float(0xc03f4154), SkBits2Float(0x43e05afa), SkBits2Float(0x42e3d9e6), SkBits2Float(0x42fefc14), SkBits2Float(0x3f3504f3)); // -2.98836f, 448.711f, 113.926f, 127.492f, 0.707107f
266path.conicTo(SkBits2Float(0x4366d6ec), SkBits2Float(0xc341b9e0), SkBits2Float(0x4308b76c), SkBits2Float(0xc363fbec), SkBits2Float(0x3f3504f3)); // 230.84f, -193.726f, 136.716f, -227.984f, 0.707107f
267path.conicTo(SkBits2Float(0x422a5fb0), SkBits2Float(0xc3831efc), SkBits2Float(0xc294a419), SkBits2Float(0x426be7d0), SkBits2Float(0x3f3504f3)); // 42.5934f, -262.242f, -74.3205f, 58.9764f, 0.707107f
268path.close();
269path.moveTo(SkBits2Float(0x4345b3f8), SkBits2Float(0x42cfc494)); // 197.703f, 103.884f
270path.conicTo(SkBits2Float(0xc2c4aac2), SkBits2Float(0x4389667c), SkBits2Float(0xc24101bb), SkBits2Float(0x43b4c5c0), SkBits2Float(0x3f3504f3)); // -98.3335f, 274.801f, -48.2517f, 361.545f, 0.707107f
271path.conicTo(SkBits2Float(0x3fea41a0), SkBits2Float(0x43e02504), SkBits2Float(0x4394eeee), SkBits2Float(0x438aafae), SkBits2Float(0x3f3504f3)); // 1.83013f, 448.289f, 297.867f, 277.372f, 0.707107f
272path.conicTo(SkBits2Float(0x441479cd), SkBits2Float(0x42d4e958), SkBits2Float(0x4407f490), SkBits2Float(0x419db120), SkBits2Float(0x3f3504f3)); // 593.903f, 106.456f, 543.821f, 19.7115f, 0.707107f
273path.conicTo(SkBits2Float(0x43f6dea8), SkBits2Float(0xc28610c8), SkBits2Float(0x4345b3f8), SkBits2Float(0x42cfc494), SkBits2Float(0x3f3504f3)); // 493.74f, -67.0328f, 197.703f, 103.884f, 0.707107f
274path.close();
275path.moveTo(SkBits2Float(0x43bc9c08), SkBits2Float(0x439c91b7)); // 377.219f, 313.138f
276path.conicTo(SkBits2Float(0x422250a2), SkBits2Float(0x437dc797), SkBits2Float(0x41b97bee), SkBits2Float(0x43b035f6), SkBits2Float(0x3f3504f3)); // 40.5787f, 253.78f, 23.1855f, 352.422f, 0.707107f
277path.conicTo(SkBits2Float(0x40b95a5b), SkBits2Float(0x43e18822), SkBits2Float(0x43ab375e), SkBits2Float(0x43ff360d), SkBits2Float(0x3f3504f3)); // 5.79228f, 451.064f, 342.433f, 510.422f, 0.707107f
278path.conicTo(SkBits2Float(0x4429c4a9), SkBits2Float(0x440e71fc), SkBits2Float(0x442e1dd4), SkBits2Float(0x43eb91ce), SkBits2Float(0x3f3504f3)); // 679.073f, 569.781f, 696.466f, 471.139f, 0.707107f
279path.conicTo(SkBits2Float(0x443276ff), SkBits2Float(0x43ba3fa3), SkBits2Float(0x43bc9c08), SkBits2Float(0x439c91b7), SkBits2Float(0x3f3504f3)); // 713.859f, 372.497f, 377.219f, 313.138f, 0.707107f
280path.close();
281path.moveTo(SkBits2Float(0x43be1d75), SkBits2Float(0x441334f2)); // 380.23f, 588.827f
282path.conicTo(SkBits2Float(0x432080f6), SkBits2Float(0x43a37bdc), SkBits2Float(0x42a78c44), SkBits2Float(0x43c3ad02), SkBits2Float(0x3f3504f3)); // 160.504f, 326.968f, 83.774f, 391.352f, 0.707107f
283path.conicTo(SkBits2Float(0x40e169c3), SkBits2Float(0x43e3de28), SkBits2Float(0x4362c542), SkBits2Float(0x44336618), SkBits2Float(0x3f3504f3)); // 7.04416f, 455.736f, 226.771f, 717.595f, 0.707107f
284path.conicTo(SkBits2Float(0x43df3f9c), SkBits2Float(0x4474dd1c), SkBits2Float(0x4402ce83), SkBits2Float(0x4464c489), SkBits2Float(0x3f3504f3)); // 446.497f, 979.455f, 523.227f, 915.071f, 0.707107f
285path.conicTo(SkBits2Float(0x4415fd38), SkBits2Float(0x4454abf6), SkBits2Float(0x43be1d75), SkBits2Float(0x441334f2), SkBits2Float(0x3f3504f3)); // 599.957f, 850.687f, 380.23f, 588.827f, 0.707107f
286path.close();
287path.moveTo(SkBits2Float(0x43bb9978), SkBits2Float(0x43ad6ab0)); // 375.199f, 346.833f
288path.conicTo(SkBits2Float(0x43bb9978), SkBits2Float(0x40a00000), SkBits2Float(0x43898486), SkBits2Float(0x40a00000), SkBits2Float(0x3f3504f3)); // 375.199f, 5, 275.035f, 5, 0.707107f
289path.conicTo(SkBits2Float(0x432edf26), SkBits2Float(0x40a00000), SkBits2Float(0x432edf26), SkBits2Float(0x43ad6ab0), SkBits2Float(0x3f3504f3)); // 174.872f, 5, 174.872f, 346.833f, 0.707107f
290path.conicTo(SkBits2Float(0x432edf26), SkBits2Float(0x442c2ab0), SkBits2Float(0x43898486), SkBits2Float(0x442c2ab0), SkBits2Float(0x3f3504f3)); // 174.872f, 688.667f, 275.035f, 688.667f, 0.707107f
291path.conicTo(SkBits2Float(0x43bb9978), SkBits2Float(0x442c2ab0), SkBits2Float(0x43bb9978), SkBits2Float(0x43ad6ab0), SkBits2Float(0x3f3504f3)); // 375.199f, 688.667f, 375.199f, 346.833f, 0.707107f
292path.close();
293path.moveTo(SkBits2Float(0x42d07148), SkBits2Float(0x43c6d5fb)); // 104.221f, 397.672f
294path.conicTo(SkBits2Float(0x43a1f94a), SkBits2Float(0x4307cfe3), SkBits2Float(0x437737c0), SkBits2Float(0x428edb31), SkBits2Float(0x3f3504f3)); // 323.948f, 135.812f, 247.218f, 71.4281f, 0.707107f
295path.conicTo(SkBits2Float(0x432a7ceb), SkBits2Float(0x40e169c2), SkBits2Float(0xc244f418), SkBits2Float(0x438673b0), SkBits2Float(0x3f3504f3)); // 170.488f, 7.04416f, -49.2384f, 268.904f, 0.707107f
296path.conicTo(SkBits2Float(0xc3867b7b), SkBits2Float(0x4404b0dc), SkBits2Float(0xc3403c22), SkBits2Float(0x4414c96f), SkBits2Float(0x3f3504f3)); // -268.965f, 530.763f, -192.235f, 595.147f, 0.707107f
297path.conicTo(SkBits2Float(0xc2e7029c), SkBits2Float(0x4424e202), SkBits2Float(0x42d07148), SkBits2Float(0x43c6d5fb), SkBits2Float(0x3f3504f3)); // -115.505f, 659.531f, 104.221f, 397.672f, 0.707107f
298path.close();
299path.moveTo(SkBits2Float(0xc30809b4), SkBits2Float(0x438337ac)); // -136.038f, 262.435f
300path.conicTo(SkBits2Float(0x43489a34), SkBits2Float(0x434b137f), SkBits2Float(0x43373589), SkBits2Float(0x42d0de52), SkBits2Float(0x3f3504f3)); // 200.602f, 203.076f, 183.209f, 104.434f, 0.707107f
301path.conicTo(SkBits2Float(0x4325d0dd), SkBits2Float(0x40b95a5c), SkBits2Float(0xc32ad30a), SkBits2Float(0x42824d58), SkBits2Float(0x3f3504f3)); // 165.816f, 5.79228f, -170.824f, 65.1511f, 0.707107f
302path.conicTo(SkBits2Float(0xc3fdbb7b), SkBits2Float(0x42f9050a), SkBits2Float(0xc3f50925), SkBits2Float(0x435f26db), SkBits2Float(0x3f3504f3)); // -507.465f, 124.51f, -490.071f, 223.152f, 0.707107f
303path.conicTo(SkBits2Float(0xc3ec56cf), SkBits2Float(0x43a0e598), SkBits2Float(0xc30809b4), SkBits2Float(0x438337ac), SkBits2Float(0x3f3504f3)); // -472.678f, 321.794f, -136.038f, 262.435f, 0.707107f
304path.close();
305path.moveTo(SkBits2Float(0xc369289a), SkBits2Float(0x408cdc40)); // -233.159f, 4.40189f
306path.conicTo(SkBits2Float(0x427b82f4), SkBits2Float(0x432f5193), SkBits2Float(0x42e1eb60), SkBits2Float(0x42b12617), SkBits2Float(0x3f3504f3)); // 62.8779f, 175.319f, 112.96f, 88.5744f, 0.707107f
307path.conicTo(SkBits2Float(0x43230aa3), SkBits2Float(0x3fea4196), SkBits2Float(0xc304feb4), SkBits2Float(0xc329162e), SkBits2Float(0x3f3504f3)); // 163.042f, 1.83013f, -132.995f, -169.087f, 0.707107f
308path.conicTo(SkBits2Float(0xc3d68405), SkBits2Float(0xc3aa006f), SkBits2Float(0xc3ef8e7f), SkBits2Float(0xc37d4256), SkBits2Float(0x3f3504f3)); // -429.031f, -340.003f, -479.113f, -253.259f, 0.707107f
309path.conicTo(SkBits2Float(0xc4044c7c), SkBits2Float(0xc32683cf), SkBits2Float(0xc369289a), SkBits2Float(0x408cdc40), SkBits2Float(0x3f3504f3)); // -529.195f, -166.515f, -233.159f, 4.40189f, 0.707107f
310path.close();
311path.moveTo(SkBits2Float(0xc30db26a), SkBits2Float(0xc37fb0d7)); // -141.697f, -255.691f
312path.conicTo(SkBits2Float(0xc1c64388), SkBits2Float(0x42830e25), SkBits2Float(0x428aae1e), SkBits2Float(0x41fa2834), SkBits2Float(0x3f3504f3)); // -24.783f, 65.5276f, 69.3401f, 31.2696f, 0.707107f
313path.conicTo(SkBits2Float(0x4323768e), SkBits2Float(0xc03f4152), SkBits2Float(0x423a3252), SkBits2Float(0xc3a21a77), SkBits2Float(0x3f3504f3)); // 163.463f, -2.98836f, 46.5491f, -324.207f, 0.707107f
314path.conicTo(SkBits2Float(0xc28cbac8), SkBits2Float(0xc4215b37), SkBits2Float(0xc3247ce4), SkBits2Float(0xc418cab4), SkBits2Float(0x3f3504f3)); // -70.3648f, -645.425f, -164.488f, -611.167f, 0.707107f
315path.conicTo(SkBits2Float(0xc3814e32), SkBits2Float(0xc4103a31), SkBits2Float(0xc30db26a), SkBits2Float(0xc37fb0d7), SkBits2Float(0x3f3504f3)); // -258.611f, -576.909f, -141.697f, -255.691f, 0.707107f
316path.close();
317path.moveTo(SkBits2Float(0x42bf1a33), SkBits2Float(0xc3c6124c)); // 95.5512f, -396.143f
318path.conicTo(SkBits2Float(0xc1aae6f8), SkBits2Float(0xc295d95d), SkBits2Float(0x42918542), SkBits2Float(0xc222aa8c), SkBits2Float(0x3f3504f3)); // -21.3628f, -74.9245f, 72.7603f, -40.6665f, 0.707107f
319path.conicTo(SkBits2Float(0x4326e221), SkBits2Float(0xc0cd12f4), SkBits2Float(0x438de60c), SkBits2Float(0xc3a3d041), SkBits2Float(0x3f3504f3)); // 166.883f, -6.40856f, 283.797f, -327.627f, 0.707107f
320path.conicTo(SkBits2Float(0x43c85b09), SkBits2Float(0xc422361b), SkBits2Float(0x43994b49), SkBits2Float(0xc42ac69e), SkBits2Float(0x3f3504f3)); // 400.711f, -648.845f, 306.588f, -683.103f, 0.707107f
321path.conicTo(SkBits2Float(0x43547712), SkBits2Float(0xc4335721), SkBits2Float(0x42bf1a33), SkBits2Float(0xc3c6124c), SkBits2Float(0x3f3504f3)); // 212.465f, -717.361f, 95.5512f, -396.143f, 0.707107f
322path.close();
323path.moveTo(SkBits2Float(0x43b7c98f), SkBits2Float(0xc3af9e21)); // 367.575f, -351.235f
324path.conicTo(SkBits2Float(0x428f138a), SkBits2Float(0xc3345194), SkBits2Float(0x42f33d6e), SkBits2Float(0xc2bb2617), SkBits2Float(0x3f3504f3)); // 71.5382f, -180.319f, 121.62f, -93.5744f, 0.707107f
325path.conicTo(SkBits2Float(0x432bb3a9), SkBits2Float(0xc0da9066), SkBits2Float(0x43e9de81), SkBits2Float(0xc331bf31), SkBits2Float(0x3f3504f3)); // 171.702f, -6.83013f, 467.738f, -177.747f, 0.707107f
326path.conicTo(SkBits2Float(0x443ef196), SkBits2Float(0xc3ae54f0), SkBits2Float(0x44326c5a), SkBits2Float(0xc3d9b434), SkBits2Float(0x3f3504f3)); // 763.775f, -348.664f, 713.693f, -435.408f, 0.707107f
327path.conicTo(SkBits2Float(0x4425e71e), SkBits2Float(0xc40289bc), SkBits2Float(0x43b7c98f), SkBits2Float(0xc3af9e21), SkBits2Float(0x3f3504f3)); // 663.611f, -522.152f, 367.575f, -351.235f, 0.707107f
328path.close();
329path.moveTo(SkBits2Float(0x4408c5ce), SkBits2Float(0xc30dfb1e)); // 547.091f, -141.981f
330path.conicTo(SkBits2Float(0x4352734e), SkBits2Float(0xc34956f5), SkBits2Float(0x43410ea4), SkBits2Float(0xc2cd653e), SkBits2Float(0x3f3504f3)); // 210.45f, -201.34f, 193.057f, -102.698f, 0.707107f
331path.conicTo(SkBits2Float(0x432fa9f9), SkBits2Float(0xc081c919), SkBits2Float(0x44001378), SkBits2Float(0x425d363a), SkBits2Float(0x3f3504f3)); // 175.664f, -4.0558f, 512.304f, 55.303f, 0.707107f
332path.conicTo(SkBits2Float(0x44543c72), SkBits2Float(0x42e552cb), SkBits2Float(0x4458959e), SkBits2Float(0x4180287c), SkBits2Float(0x3f3504f3)); // 848.944f, 114.662f, 866.338f, 16.0198f, 0.707107f
333path.conicTo(SkBits2Float(0x445ceec8), SkBits2Float(0xc2a53e8d), SkBits2Float(0x4408c5ce), SkBits2Float(0xc30dfb1e), SkBits2Float(0x3f3504f3)); // 883.731f, -82.6222f, 547.091f, -141.981f, 0.707107f
334path.close();
335path.moveTo(SkBits2Float(0x44098684), SkBits2Float(0x4305b53c)); // 550.102f, 133.708f
336path.conicTo(SkBits2Float(0x43a5300e), SkBits2Float(0xc30026d3), SkBits2Float(0x437da548), SkBits2Float(0xc27f121c), SkBits2Float(0x3f3504f3)); // 330.375f, -128.152f, 253.646f, -63.7677f, 0.707107f
337path.conicTo(SkBits2Float(0x4330ea74), SkBits2Float(0x3f1dc4b8), SkBits2Float(0x43c65234), SkBits2Float(0x43833cea), SkBits2Float(0x3f3504f3)); // 176.916f, 0.616283f, 396.642f, 262.476f, 0.707107f
338path.conicTo(SkBits2Float(0x441a1798), SkBits2Float(0x44031579), SkBits2Float(0x442d464c), SkBits2Float(0x43e5f9cc), SkBits2Float(0x3f3504f3)); // 616.369f, 524.336f, 693.098f, 459.952f, 0.707107f
339path.conicTo(SkBits2Float(0x44407502), SkBits2Float(0x43c5c8a6), SkBits2Float(0x44098684), SkBits2Float(0x4305b53c), SkBits2Float(0x3f3504f3)); // 769.828f, 395.568f, 550.102f, 133.708f, 0.707107f
340path.close();
341path.moveTo(SkBits2Float(0x43bb9978), SkBits2Float(0x44487cfb)); // 375.199f, 801.953f
342path.conicTo(SkBits2Float(0x43bb9978), SkBits2Float(0x43e60f46), SkBits2Float(0x43898486), SkBits2Float(0x43e60f46), SkBits2Float(0x3f3504f3)); // 375.199f, 460.119f, 275.035f, 460.119f, 0.707107f
343path.conicTo(SkBits2Float(0x432edf26), SkBits2Float(0x43e60f46), SkBits2Float(0x432edf26), SkBits2Float(0x44487cfb), SkBits2Float(0x3f3504f3)); // 174.872f, 460.119f, 174.872f, 801.953f, 0.707107f
344path.conicTo(SkBits2Float(0x432edf26), SkBits2Float(0x448ef92a), SkBits2Float(0x43898486), SkBits2Float(0x448ef92a), SkBits2Float(0x3f3504f3)); // 174.872f, 1143.79f, 275.035f, 1143.79f, 0.707107f
345path.conicTo(SkBits2Float(0x43bb9978), SkBits2Float(0x448ef92a), SkBits2Float(0x43bb9978), SkBits2Float(0x44487cfb), SkBits2Float(0x3f3504f3)); // 375.199f, 1143.79f, 375.199f, 801.953f, 0.707107f
346path.close();
347path.moveTo(SkBits2Float(0x42d07148), SkBits2Float(0x445532a0)); // 104.221f, 852.791f
348path.conicTo(SkBits2Float(0x43a1f94a), SkBits2Float(0x4413bb9c), SkBits2Float(0x437737c0), SkBits2Float(0x4403a309), SkBits2Float(0x3f3504f3)); // 323.948f, 590.931f, 247.218f, 526.547f, 0.707107f
349path.conicTo(SkBits2Float(0x432a7ceb), SkBits2Float(0x43e714ed), SkBits2Float(0xc244f418), SkBits2Float(0x4435017b), SkBits2Float(0x3f3504f3)); // 170.488f, 462.163f, -49.2384f, 724.023f, 0.707107f
350path.conicTo(SkBits2Float(0xc3867b7b), SkBits2Float(0x4476787f), SkBits2Float(0xc3403c22), SkBits2Float(0x44834889), SkBits2Float(0x3f3504f3)); // -268.965f, 985.883f, -192.235f, 1050.27f, 0.707107f
351path.conicTo(SkBits2Float(0xc2e7029c), SkBits2Float(0x448b54d2), SkBits2Float(0x42d07148), SkBits2Float(0x445532a0), SkBits2Float(0x3f3504f3)); // -115.505f, 1114.65f, 104.221f, 852.791f, 0.707107f
352path.close();
353path.moveTo(SkBits2Float(0xc30809b4), SkBits2Float(0x44336379)); // -136.038f, 717.554f
354path.conicTo(SkBits2Float(0x43489a34), SkBits2Float(0x44248c83), SkBits2Float(0x43373589), SkBits2Float(0x440be36d), SkBits2Float(0x3f3504f3)); // 200.602f, 658.195f, 183.209f, 559.554f, 0.707107f
355path.conicTo(SkBits2Float(0x4325d0dd), SkBits2Float(0x43e674af), SkBits2Float(0xc32ad30a), SkBits2Float(0x4402114e), SkBits2Float(0x3f3504f3)); // 165.816f, 460.912f, -170.824f, 520.27f, 0.707107f
356path.conicTo(SkBits2Float(0xc3fdbb7b), SkBits2Float(0x4410e844), SkBits2Float(0xc3f50925), SkBits2Float(0x4429915a), SkBits2Float(0x3f3504f3)); // -507.465f, 579.629f, -490.071f, 678.271f, 0.707107f
357path.conicTo(SkBits2Float(0xc3ec56cf), SkBits2Float(0x44423a6f), SkBits2Float(0xc30809b4), SkBits2Float(0x44336379), SkBits2Float(0x3f3504f3)); // -472.678f, 776.913f, -136.038f, 717.554f, 0.707107f
358path.close();
359path.moveTo(SkBits2Float(0xc369289a), SkBits2Float(0x43e5c2b7)); // -233.159f, 459.521f
360path.conicTo(SkBits2Float(0x427b82f4), SkBits2Float(0x441d9c08), SkBits2Float(0x42e1eb60), SkBits2Float(0x4407ec66), SkBits2Float(0x3f3504f3)); // 62.8779f, 630.438f, 112.96f, 543.694f, 0.707107f
361path.conicTo(SkBits2Float(0x43230aa3), SkBits2Float(0x43e47988), SkBits2Float(0xc304feb4), SkBits2Float(0x438f042f), SkBits2Float(0x3f3504f3)); // 163.042f, 456.949f, -132.995f, 286.033f, 0.707107f
362path.conicTo(SkBits2Float(0xc3d68405), SkBits2Float(0x42e63b5c), SkBits2Float(0xc3ef8e7f), SkBits2Float(0x4349dc36), SkBits2Float(0x3f3504f3)); // -429.031f, 115.116f, -479.113f, 201.86f, 0.707107f
363path.conicTo(SkBits2Float(0xc4044c7c), SkBits2Float(0x43904d5e), SkBits2Float(0xc369289a), SkBits2Float(0x43e5c2b7), SkBits2Float(0x3f3504f3)); // -529.195f, 288.604f, -233.159f, 459.521f, 0.707107f
364path.close();
365path.moveTo(SkBits2Float(0xc30db26a), SkBits2Float(0x43476db5)); // -141.697f, 199.429f
366path.conicTo(SkBits2Float(0xc1c64388), SkBits2Float(0x44022968), SkBits2Float(0x428aae1e), SkBits2Float(0x43f331c9), SkBits2Float(0x3f3504f3)); // -24.783f, 520.647f, 69.3401f, 486.389f, 0.707107f
367path.conicTo(SkBits2Float(0x4323768e), SkBits2Float(0x43e210c3), SkBits2Float(0x423a3252), SkBits2Float(0x4302e99e), SkBits2Float(0x3f3504f3)); // 163.463f, 452.131f, 46.5491f, 130.913f, 0.707107f
368path.conicTo(SkBits2Float(0xc28cbac8), SkBits2Float(0xc33e4e50), SkBits2Float(0xc3247ce4), SkBits2Float(0xc31c0c44), SkBits2Float(0x3f3504f3)); // -70.3648f, -190.306f, -164.488f, -156.048f, 0.707107f
369path.conicTo(SkBits2Float(0xc3814e32), SkBits2Float(0xc2f39470), SkBits2Float(0xc30db26a), SkBits2Float(0x43476db5), SkBits2Float(0x3f3504f3)); // -258.611f, -121.79f, -141.697f, 199.429f, 0.707107f
370path.close();
371path.moveTo(SkBits2Float(0x42bf1a33), SkBits2Float(0x426be7d0)); // 95.5512f, 58.9764f
372path.conicTo(SkBits2Float(0xc1aae6f8), SkBits2Float(0x43be18ef), SkBits2Float(0x42918542), SkBits2Float(0x43cf39f4), SkBits2Float(0x3f3504f3)); // -21.3628f, 380.195f, 72.7603f, 414.453f, 0.707107f
373path.conicTo(SkBits2Float(0x4326e221), SkBits2Float(0x43e05afa), SkBits2Float(0x438de60c), SkBits2Float(0x42fefc14), SkBits2Float(0x3f3504f3)); // 166.883f, 448.711f, 283.797f, 127.492f, 0.707107f
374path.conicTo(SkBits2Float(0x43c85b09), SkBits2Float(0xc341b9e0), SkBits2Float(0x43994b49), SkBits2Float(0xc363fbec), SkBits2Float(0x3f3504f3)); // 400.711f, -193.726f, 306.588f, -227.984f, 0.707107f
375path.conicTo(SkBits2Float(0x43547712), SkBits2Float(0xc3831efc), SkBits2Float(0x42bf1a33), SkBits2Float(0x426be7d0), SkBits2Float(0x3f3504f3)); // 212.465f, -262.242f, 95.5512f, 58.9764f, 0.707107f
376path.close();
377path.moveTo(SkBits2Float(0x43b7c98f), SkBits2Float(0x42cfc494)); // 367.575f, 103.884f
378path.conicTo(SkBits2Float(0x428f138a), SkBits2Float(0x4389667c), SkBits2Float(0x42f33d6e), SkBits2Float(0x43b4c5c0), SkBits2Float(0x3f3504f3)); // 71.5382f, 274.801f, 121.62f, 361.545f, 0.707107f
379path.conicTo(SkBits2Float(0x432bb3a9), SkBits2Float(0x43e02504), SkBits2Float(0x43e9de81), SkBits2Float(0x438aafae), SkBits2Float(0x3f3504f3)); // 171.702f, 448.289f, 467.738f, 277.372f, 0.707107f
380path.conicTo(SkBits2Float(0x443ef196), SkBits2Float(0x42d4e958), SkBits2Float(0x44326c5a), SkBits2Float(0x419db120), SkBits2Float(0x3f3504f3)); // 763.775f, 106.456f, 713.693f, 19.7115f, 0.707107f
381path.conicTo(SkBits2Float(0x4425e71e), SkBits2Float(0xc28610c8), SkBits2Float(0x43b7c98f), SkBits2Float(0x42cfc494), SkBits2Float(0x3f3504f3)); // 663.611f, -67.0328f, 367.575f, 103.884f, 0.707107f
382path.close();
383path.moveTo(SkBits2Float(0x4408c5ce), SkBits2Float(0x439c91b7)); // 547.091f, 313.138f
384path.conicTo(SkBits2Float(0x4352734e), SkBits2Float(0x437dc797), SkBits2Float(0x43410ea4), SkBits2Float(0x43b035f6), SkBits2Float(0x3f3504f3)); // 210.45f, 253.78f, 193.057f, 352.422f, 0.707107f
385path.conicTo(SkBits2Float(0x432fa9f9), SkBits2Float(0x43e18822), SkBits2Float(0x44001378), SkBits2Float(0x43ff360d), SkBits2Float(0x3f3504f3)); // 175.664f, 451.064f, 512.304f, 510.422f, 0.707107f
386path.conicTo(SkBits2Float(0x44543c72), SkBits2Float(0x440e71fc), SkBits2Float(0x4458959e), SkBits2Float(0x43eb91ce), SkBits2Float(0x3f3504f3)); // 848.944f, 569.781f, 866.338f, 471.139f, 0.707107f
387path.conicTo(SkBits2Float(0x445ceec8), SkBits2Float(0x43ba3fa3), SkBits2Float(0x4408c5ce), SkBits2Float(0x439c91b7), SkBits2Float(0x3f3504f3)); // 883.731f, 372.497f, 547.091f, 313.138f, 0.707107f
388path.close();
389path.moveTo(SkBits2Float(0x44098684), SkBits2Float(0x441334f2)); // 550.102f, 588.827f
390path.conicTo(SkBits2Float(0x43a5300e), SkBits2Float(0x43a37bdc), SkBits2Float(0x437da548), SkBits2Float(0x43c3ad02), SkBits2Float(0x3f3504f3)); // 330.375f, 326.968f, 253.646f, 391.352f, 0.707107f
391path.conicTo(SkBits2Float(0x4330ea74), SkBits2Float(0x43e3de28), SkBits2Float(0x43c65234), SkBits2Float(0x44336618), SkBits2Float(0x3f3504f3)); // 176.916f, 455.736f, 396.642f, 717.595f, 0.707107f
392path.conicTo(SkBits2Float(0x441a1798), SkBits2Float(0x4474dd1c), SkBits2Float(0x442d464c), SkBits2Float(0x4464c489), SkBits2Float(0x3f3504f3)); // 616.369f, 979.455f, 693.098f, 915.071f, 0.707107f
393path.conicTo(SkBits2Float(0x44407502), SkBits2Float(0x4454abf6), SkBits2Float(0x44098684), SkBits2Float(0x441334f2), SkBits2Float(0x3f3504f3)); // 769.828f, 850.687f, 550.102f, 588.827f, 0.707107f
394path.close();
395SkPath lastFailed = path;
396#if DEBUG_SIMPLIFY_FAILS
397 for (;;) {
398 SkPath failed = subset_simplify_fail(reporter, lastFailed);
399 if (failed == lastFailed) {
400 break;
401 }
402 lastFailed = failed;
403 }
404#endif
405 testSimplify(reporter, lastFailed, __FUNCTION__);
406}
407
408DEF_TEST(SixtyOvals_2_2_9_73_reduced, reporter) {
409 SkPath path;
410path.moveTo(377.219f, -141.981f);
411path.conicTo(40.5787f, -201.34f, 23.1855f, -102.698f, 0.707107f);
412path.lineTo(377.219f, -141.981f);
413path.close();
414path.moveTo(306.588f, -227.984f);
415path.conicTo(212.465f, -262.242f, 95.5512f, 58.9764f, 0.707107f);
416path.lineTo(306.588f, -227.984f);
417path.close();
418testSimplify(reporter, path, __FUNCTION__);
419}
420
421DEF_TEST(SixtyOvalsA, reporter) {
422SkPath path;
423path.setFillType(SkPathFillType::kEvenOdd);
424path.moveTo(11.1722f, -8.10398f);
425path.conicTo(22.9143f, -10.3787f, 23.7764f, -7.72542f, 1.00863f);
426path.conicTo(24.6671f, -4.98406f, 13.8147f, 0.0166066f, 0.973016f);
427path.conicTo(24.6378f, 5.07425f, 23.7764f, 7.72542f, 1.00888f);
428path.conicTo(22.8777f, 10.4915f, 11.1648f, 8.13034f, 0.960143f);
429path.conicTo(16.9503f, 18.5866f, 14.6946f, 20.2254f, 1.00881f);
430path.conicTo(12.4417f, 21.8623f, 4.29722f, 13.1468f, 1.0092f);
431path.conicTo(2.92708f, 25, 0, 25, 0.955692f);
432path.conicTo(-2.79361f, 25, -4.258f, 13.1048f, 1.00818f);
433path.conicTo(-4.27813f, 13.1264f, -4.29822f, 13.1479f, 1.03158f);
434path.conicTo(-12.44f, 21.8635f, -14.6946f, 20.2254f, 1.00811f);
435path.conicTo(-16.9933f, 18.5554f, -11.1722f, 8.10398f, 0.989875f);
436path.conicTo(-22.9143f, 10.3787f, -23.7764f, 7.72542f, 1.00863f);
437path.conicTo(-24.6671f, 4.98406f, -13.8147f, -0.0166066f, 0.973016f);
438path.conicTo(-24.6378f, -5.07425f, -23.7764f, -7.72542f, 1.00888f);
439path.conicTo(-22.8777f, -10.4915f, -11.1648f, -8.13034f, 0.960143f);
440path.conicTo(-16.9503f, -18.5866f, -14.6946f, -20.2254f, 1.00881f);
441path.conicTo(-12.4417f, -21.8623f, -4.29722f, -13.1468f, 1.0092f);
442path.conicTo(-2.92708f, -25, 0, -25, 0.955692f);
443path.conicTo(2.79361f, -25, 4.258f, -13.1048f, 1.00818f);
444path.conicTo(4.27813f, -13.1264f, 4.29822f, -13.1479f, 1.03158f);
445path.conicTo(12.44f, -21.8635f, 14.6946f, -20.2254f, 1.00811f);
446path.conicTo(16.9933f, -18.5554f, 11.1722f, -8.10398f, 0.989875f);
447path.close();
448SkPath one(path);
449path.reset();
450path.setFillType(SkPathFillType::kWinding);
451path.moveTo(-1.54509f, -4.75528f);
452path.conicTo(22.2313f, -12.4807f, 23.7764f, -7.72543f, 0.707107f);
453path.conicTo(25.3215f, -2.97014f, 1.54509f, 4.75528f, 0.707107f);
454path.conicTo(-22.2313f, 12.4807f, -23.7764f, 7.72543f, 0.707107f);
455path.conicTo(-25.3215f, 2.97014f, -1.54509f, -4.75528f, 0.707107f);
456path.close();
457SkPath two(path);
459Op(one, two, kUnion_SkPathOp, &result);
460}
461
462DEF_TEST(SixtyOvalsAX, reporter) {
463SkPath path;
464path.setFillType(SkPathFillType::kEvenOdd);
465path.moveTo(SkBits2Float(0x4132c174), SkBits2Float(0xc101a9e5)); // 11.1722f, -8.10398f
466path.conicTo(SkBits2Float(0x41b7508a), SkBits2Float(0xc1260efe), SkBits2Float(0x41be3618), SkBits2Float(0xc0f736ad), SkBits2Float(0x3f811abd)); // 22.9143f, -10.3787f, 23.7764f, -7.72542f, 1.00863f
467path.conicTo(SkBits2Float(0x41c5564b), SkBits2Float(0xc09f7d6d), SkBits2Float(0x415d0934), SkBits2Float(0x3c880a93), SkBits2Float(0x3f79179a)); // 24.6671f, -4.98406f, 13.8147f, 0.0166066f, 0.973016f
468path.conicTo(SkBits2Float(0x41c51a48), SkBits2Float(0x40a2603c), SkBits2Float(0x41be3618), SkBits2Float(0x40f736ac), SkBits2Float(0x3f8122f3)); // 24.6378f, 5.07425f, 23.7764f, 7.72542f, 1.00888f
469path.conicTo(SkBits2Float(0x41b7056f), SkBits2Float(0x4127dd49), SkBits2Float(0x4132a328), SkBits2Float(0x410215e1), SkBits2Float(0x3f75cbec)); // 22.8777f, 10.4915f, 11.1648f, 8.13034f, 0.960143f
470path.conicTo(SkBits2Float(0x41879a3b), SkBits2Float(0x4194b151), SkBits2Float(0x416b1d34), SkBits2Float(0x41a1cdac), SkBits2Float(0x3f8120d4)); // 16.9503f, 18.5866f, 14.6946f, 20.2254f, 1.00881f
471path.conicTo(SkBits2Float(0x41471107), SkBits2Float(0x41aee601), SkBits2Float(0x408982d1), SkBits2Float(0x41525939), SkBits2Float(0x3f812d7f)); // 12.4417f, 21.8623f, 4.29722f, 13.1468f, 1.0092f
472path.conicTo(SkBits2Float(0x403b5543), SkBits2Float(0x41c80000), SkBits2Float(0x00000000), SkBits2Float(0x41c80000), SkBits2Float(0x3f74a837)); // 2.92708f, 25, 0, 25, 0.955692f
473path.conicTo(SkBits2Float(0xc032ca93), SkBits2Float(0x41c80000), SkBits2Float(0xc088418e), SkBits2Float(0x4151ad32), SkBits2Float(0x3f810c2d)); // -2.79361f, 25, -4.258f, 13.1048f, 1.00818f
474path.conicTo(SkBits2Float(0xc088e66c), SkBits2Float(0x4152058a), SkBits2Float(0xc0898afc), SkBits2Float(0x41525d9e), SkBits2Float(0x3f840adb)); // -4.27813f, 13.1264f, -4.29822f, 13.1479f, 1.03158f
475path.conicTo(SkBits2Float(0xc1470a56), SkBits2Float(0x41aee870), SkBits2Float(0xc16b1d36), SkBits2Float(0x41a1cdac), SkBits2Float(0x3f81099f)); // -12.44f, 21.8635f, -14.6946f, 20.2254f, 1.00811f
476path.conicTo(SkBits2Float(0xc187f23a), SkBits2Float(0x41947162), SkBits2Float(0xc132c174), SkBits2Float(0x4101a9e5), SkBits2Float(0x3f7d6873)); // -16.9933f, 18.5554f, -11.1722f, 8.10398f, 0.989875f
477path.conicTo(SkBits2Float(0xc1b7508a), SkBits2Float(0x41260efe), SkBits2Float(0xc1be3618), SkBits2Float(0x40f736ad), SkBits2Float(0x3f811abd)); // -22.9143f, 10.3787f, -23.7764f, 7.72542f, 1.00863f
478path.conicTo(SkBits2Float(0xc1c5564b), SkBits2Float(0x409f7d6d), SkBits2Float(0xc15d0934), SkBits2Float(0xbc880a93), SkBits2Float(0x3f79179a)); // -24.6671f, 4.98406f, -13.8147f, -0.0166066f, 0.973016f
479path.conicTo(SkBits2Float(0xc1c51a48), SkBits2Float(0xc0a2603c), SkBits2Float(0xc1be3618), SkBits2Float(0xc0f736ac), SkBits2Float(0x3f8122f3)); // -24.6378f, -5.07425f, -23.7764f, -7.72542f, 1.00888f
480path.conicTo(SkBits2Float(0xc1b7056f), SkBits2Float(0xc127dd49), SkBits2Float(0xc132a328), SkBits2Float(0xc10215e1), SkBits2Float(0x3f75cbec)); // -22.8777f, -10.4915f, -11.1648f, -8.13034f, 0.960143f
481path.conicTo(SkBits2Float(0xc1879a3b), SkBits2Float(0xc194b151), SkBits2Float(0xc16b1d34), SkBits2Float(0xc1a1cdac), SkBits2Float(0x3f8120d4)); // -16.9503f, -18.5866f, -14.6946f, -20.2254f, 1.00881f
482path.conicTo(SkBits2Float(0xc1471107), SkBits2Float(0xc1aee601), SkBits2Float(0xc08982d1), SkBits2Float(0xc1525939), SkBits2Float(0x3f812d7f)); // -12.4417f, -21.8623f, -4.29722f, -13.1468f, 1.0092f
483path.conicTo(SkBits2Float(0xc03b5543), SkBits2Float(0xc1c80000), SkBits2Float(0x00000000), SkBits2Float(0xc1c80000), SkBits2Float(0x3f74a837)); // -2.92708f, -25, 0, -25, 0.955692f
484path.conicTo(SkBits2Float(0x4032ca93), SkBits2Float(0xc1c80000), SkBits2Float(0x4088418e), SkBits2Float(0xc151ad32), SkBits2Float(0x3f810c2d)); // 2.79361f, -25, 4.258f, -13.1048f, 1.00818f
485path.conicTo(SkBits2Float(0x4088e66c), SkBits2Float(0xc152058a), SkBits2Float(0x40898afc), SkBits2Float(0xc1525d9e), SkBits2Float(0x3f840adb)); // 4.27813f, -13.1264f, 4.29822f, -13.1479f, 1.03158f
486path.conicTo(SkBits2Float(0x41470a56), SkBits2Float(0xc1aee870), SkBits2Float(0x416b1d36), SkBits2Float(0xc1a1cdac), SkBits2Float(0x3f81099f)); // 12.44f, -21.8635f, 14.6946f, -20.2254f, 1.00811f
487path.conicTo(SkBits2Float(0x4187f23a), SkBits2Float(0xc1947162), SkBits2Float(0x4132c174), SkBits2Float(0xc101a9e5), SkBits2Float(0x3f7d6873)); // 16.9933f, -18.5554f, 11.1722f, -8.10398f, 0.989875f
488path.close();
489path.close();
490SkPath one(path);
491path.reset();
492path.setFillType(SkPathFillType::kWinding);
493path.moveTo(SkBits2Float(0xbfc5c55c), SkBits2Float(0xc0982b46)); // -1.54509f, -4.75528f
494path.conicTo(SkBits2Float(0x41b1d9c2), SkBits2Float(0xc147b0fc), SkBits2Float(0x41be3618), SkBits2Float(0xc0f736b3), SkBits2Float(0x3f3504f3)); // 22.2313f, -12.4807f, 23.7764f, -7.72543f, 0.707107f
495path.conicTo(SkBits2Float(0x41ca926e), SkBits2Float(0xc03e16da), SkBits2Float(0x3fc5c55c), SkBits2Float(0x40982b46), SkBits2Float(0x3f3504f3)); // 25.3215f, -2.97014f, 1.54509f, 4.75528f, 0.707107f
496path.conicTo(SkBits2Float(0xc1b1d9c2), SkBits2Float(0x4147b0fc), SkBits2Float(0xc1be3618), SkBits2Float(0x40f736b3), SkBits2Float(0x3f3504f3)); // -22.2313f, 12.4807f, -23.7764f, 7.72543f, 0.707107f
497path.conicTo(SkBits2Float(0xc1ca926e), SkBits2Float(0x403e16da), SkBits2Float(0xbfc5c55c), SkBits2Float(0xc0982b46), SkBits2Float(0x3f3504f3)); // -25.3215f, 2.97014f, -1.54509f, -4.75528f, 0.707107f
498path.close();
499SkPath two(path);
501Op(one, two, kUnion_SkPathOp, &result);
502}
503
504const char ovalsAsQuads[] = "M 146.4187316894531 136.5"
505" Q 146.4187316894531 139.8508911132812 146.4066772460938 143.19775390625"
506" Q 146.3946533203125 146.5446166992188 146.3705749511719 149.8793640136719"
507" Q 146.3465270996094 153.214111328125 146.3104858398438 156.5287170410156"
508" Q 146.2744750976562 159.8433227539062 146.2265930175781 163.1298217773438"
509" Q 146.1786804199219 166.4163208007812 146.1190490722656 169.6668090820312"
510" Q 146.0593872070312 172.9172973632812 145.9881286621094 176.1238708496094"
511" Q 145.9168701171875 179.3304443359375 145.8341674804688 182.4854736328125"
512" Q 145.75146484375 185.6404418945312 145.6575317382812 188.7362670898438"
513" Q 145.5635681152344 191.8320922851562 145.4586181640625 194.8612365722656"
514" Q 145.3536682128906 197.8904113769531 145.2379455566406 200.8456420898438"
515" Q 145.1222229003906 203.8008422851562 144.9960021972656 206.6750183105469"
516" Q 144.8698120117188 209.5491638183594 144.7334289550781 212.3353271484375"
517" Q 144.5970458984375 215.1214599609375 144.4508056640625 217.8129272460938"
518" Q 144.3045654296875 220.50439453125 144.1488342285156 223.0946655273438"
519" Q 143.9931030273438 225.6849365234375 143.8282470703125 228.1677856445312"
520" Q 143.6633911132812 230.650634765625 143.4898071289062 233.0200805664062"
521" Q 143.3162231445312 235.3894958496094 143.1343078613281 237.6398315429688"
522" Q 142.9524230957031 239.89013671875 142.7626647949219 242.0159301757812"
523" Q 142.5729064941406 244.1417236328125 142.375732421875 246.1378173828125"
524" Q 142.1785583496094 248.1339111328125 141.9744262695312 249.99560546875"
525" Q 141.7703247070312 251.8572387695312 141.5597534179688 253.5799255371094"
526" Q 141.3492126464844 255.3026428222656 141.1326904296875 256.8822326660156"
527" Q 140.9161987304688 258.4617919921875 140.6942749023438 259.8945007324219"
528" Q 140.4723510742188 261.3271789550781 140.2455749511719 262.6095275878906"
529" Q 140.0187683105469 263.8918762207031 139.7876281738281 265.020751953125"
530" Q 139.5564880371094 266.1496276855469 139.3215637207031 267.1223449707031"
531" Q 139.086669921875 268.0950622558594 138.8485412597656 268.9092712402344"
532" Q 138.6104125976562 269.7234497070312 138.36962890625 270.3771667480469"
533" Q 138.1288757324219 271.0308837890625 137.8860473632812 271.5225830078125"
534" Q 137.6432189941406 272.0142822265625 137.3988952636719 272.3427124023438"
535" Q 137.1546020507812 272.6711730957031 136.9093933105469 272.8355712890625"
536" Q 136.6642150878906 272.9999694824219 136.4187316894531 273"
537" Q 136.1732482910156 272.9999694824219 135.9280700683594 272.8355712890625"
538" Q 135.682861328125 272.6711730957031 135.4385681152344 272.3427124023438"
539" Q 135.1942443847656 272.0142822265625 134.951416015625 271.5225830078125"
540" Q 134.7085876464844 271.0308837890625 134.4678344726562 270.3771667480469"
541" Q 134.22705078125 269.7234497070312 133.9889221191406 268.9092407226562"
542" Q 133.7507934570312 268.0950622558594 133.5158996582031 267.122314453125"
543" Q 133.2809753417969 266.1495971679688 133.0498352050781 265.020751953125"
544" Q 132.8186950683594 263.8918762207031 132.5918884277344 262.6095275878906"
545" Q 132.3651123046875 261.3271789550781 132.1431884765625 259.8945007324219"
546" Q 131.9212646484375 258.4617919921875 131.7047729492188 256.8822326660156"
547" Q 131.4882507324219 255.3026428222656 131.2777099609375 253.5799560546875"
548" Q 131.067138671875 251.8572387695312 130.863037109375 249.99560546875"
549" Q 130.6589050292969 248.1339111328125 130.4617309570312 246.1378173828125"
550" Q 130.2645568847656 244.1417236328125 130.0747985839844 242.0159301757812"
551" Q 129.8850402832031 239.89013671875 129.7031555175781 237.6398315429688"
552" Q 129.521240234375 235.3894958496094 129.34765625 233.0200805664062"
553" Q 129.174072265625 230.650634765625 129.0092163085938 228.1677856445312"
554" Q 128.8443603515625 225.6849365234375 128.6886291503906 223.0946655273438"
555" Q 128.5328979492188 220.50439453125 128.3866577148438 217.8129272460938"
556" Q 128.2404174804688 215.1214599609375 128.1040344238281 212.3353271484375"
557" Q 127.9676513671875 209.5491333007812 127.8414306640625 206.6749877929688"
558" Q 127.7152404785156 203.8008422851562 127.5995178222656 200.8456420898438"
559" Q 127.4837951660156 197.8904113769531 127.3788452148438 194.8612365722656"
560" Q 127.2738647460938 191.8320922851562 127.179931640625 188.7362670898438"
561" Q 127.0859985351562 185.6404418945312 127.0032958984375 182.4854431152344"
562" Q 126.9205932617188 179.3304443359375 126.8493347167969 176.1238708496094"
563" Q 126.778076171875 172.9172973632812 126.7184143066406 169.6668090820312"
564" Q 126.6587829589844 166.4163208007812 126.6108703613281 163.1298217773438"
565" Q 126.56298828125 159.8433227539062 126.5269775390625 156.5287170410156"
566" Q 126.4909362792969 153.214111328125 126.4668884277344 149.8793640136719"
567" Q 126.4428100585938 146.5446166992188 126.4307861328125 143.19775390625"
568" Q 126.4187316894531 139.8508911132812 126.4187316894531 136.5"
569" Q 126.4187316894531 133.1491088867188 126.4307861328125 129.8022613525391"
570" Q 126.4428100585938 126.4554138183594 126.4668884277344 123.1206665039062"
571" Q 126.4909362792969 119.7859039306641 126.5269775390625 116.4712829589844"
572" Q 126.56298828125 113.1566619873047 126.6108703613281 109.8701629638672"
573" Q 126.6587829589844 106.5836639404297 126.7184143066406 103.3331909179688"
574" Q 126.778076171875 100.0827331542969 126.8493347167969 96.87612915039062"
575" Q 126.9205932617188 93.66952514648438 127.0032958984375 90.5145263671875"
576" Q 127.0859985351562 87.35951232910156 127.179931640625 84.26370239257812"
577" Q 127.2738647460938 81.16787719726562 127.3788452148438 78.13871765136719"
578" Q 127.4837951660156 75.10955810546875 127.5995178222656 72.15434265136719"
579" Q 127.7152404785156 69.19912719726562 127.8414306640625 66.32498168945312"
580" Q 127.9676513671875 63.45082092285156 128.1040344238281 60.66465759277344"
581" Q 128.2404174804688 57.87849426269531 128.3866577148438 55.18704223632812"
582" Q 128.5328979492188 52.49559020996094 128.6886291503906 49.90530395507812"
583" Q 128.8443603515625 47.31504821777344 129.0092163085938 44.83219909667969"
584" Q 129.174072265625 42.349365234375 129.34765625 39.97991943359375"
585" Q 129.521240234375 37.61048889160156 129.7031555175781 35.36016845703125"
586" Q 129.8850402832031 33.10984802246094 130.0747985839844 30.98406982421875"
587" Q 130.2645568847656 28.85829162597656 130.4617309570312 26.86216735839844"
588" Q 130.6589050292969 24.86604309082031 130.863037109375 23.00439453125"
589" Q 131.067138671875 21.14274597167969 131.2777099609375 19.4200439453125"
590" Q 131.4882507324219 17.69734191894531 131.7047729492188 16.11775207519531"
591" Q 131.9212646484375 14.53814697265625 132.1431884765625 13.10545349121094"
592" Q 132.3651123046875 11.67277526855469 132.5918884277344 10.39044189453125"
593" Q 132.8186950683594 9.108108520507812 133.0498352050781 7.979232788085938"
594" Q 133.2809753417969 6.850357055664062 133.5158996582031 5.877639770507812"
595" Q 133.7507934570312 4.904937744140625 133.9889221191406 4.090728759765625"
596" Q 134.22705078125 3.276535034179688 134.4678344726562 2.622810363769531"
597" Q 134.7085876464844 1.969085693359375 134.951416015625 1.477409362792969"
598" Q 135.1942443847656 0.9857254028320312 135.4385681152344 0.65728759765625"
599" Q 135.682861328125 0.3288421630859375 135.9280700683594 0.1644210815429688"
600" Q 136.1732482910156 0 136.4187316894531 0"
601" Q 136.6642150878906 0 136.9093933105469 0.1644210815429688"
602" Q 137.1546020507812 0.3288421630859375 137.3988952636719 0.65728759765625"
603" Q 137.6432189941406 0.9857254028320312 137.8860473632812 1.477409362792969"
604" Q 138.1288757324219 1.969085693359375 138.36962890625 2.622810363769531"
605" Q 138.6104125976562 3.276535034179688 138.8485412597656 4.090728759765625"
606" Q 139.086669921875 4.904937744140625 139.3215637207031 5.877639770507812"
607" Q 139.5564880371094 6.850357055664062 139.7876281738281 7.979232788085938"
608" Q 140.0187683105469 9.108108520507812 140.2455749511719 10.39044189453125"
609" Q 140.4723510742188 11.67277526855469 140.6942749023438 13.10545349121094"
610" Q 140.9161987304688 14.53814697265625 141.1326904296875 16.11775207519531"
611" Q 141.3492126464844 17.69734191894531 141.5597534179688 19.4200439453125"
612" Q 141.7703247070312 21.14274597167969 141.9744262695312 23.00439453125"
613" Q 142.1785583496094 24.86604309082031 142.375732421875 26.86216735839844"
614" Q 142.5729064941406 28.85829162597656 142.7626647949219 30.98406982421875"
615" Q 142.9524230957031 33.10984802246094 143.1343078613281 35.36016845703125"
616" Q 143.3162231445312 37.61048889160156 143.4898071289062 39.97991943359375"
617" Q 143.6633911132812 42.349365234375 143.8282470703125 44.83219909667969"
618" Q 143.9931030273438 47.31504821777344 144.1488342285156 49.90531921386719"
619" Q 144.3045654296875 52.49559020996094 144.4508056640625 55.18704223632812"
620" Q 144.5970458984375 57.87849426269531 144.7334289550781 60.66465759277344"
621" Q 144.8698120117188 63.45082092285156 144.9960021972656 66.32498168945312"
622" Q 145.1222229003906 69.19912719726562 145.2379455566406 72.15434265136719"
623" Q 145.3536682128906 75.10955810546875 145.4586181640625 78.13871765136719"
624" Q 145.5635681152344 81.16787719726562 145.6575317382812 84.26370239257812"
625" Q 145.75146484375 87.35951232910156 145.8341674804688 90.5145263671875"
626" Q 145.9168701171875 93.66952514648438 145.9881286621094 96.87614440917969"
627" Q 146.0593872070312 100.0827331542969 146.1190490722656 103.3332061767578"
628" Q 146.1786804199219 106.5836639404297 146.2265930175781 109.8701629638672"
629" Q 146.2744750976562 113.1566619873047 146.3104858398438 116.4712829589844"
630" Q 146.3465270996094 119.785888671875 146.3705749511719 123.1206665039062"
631" Q 146.3946533203125 126.4554138183594 146.4066772460938 129.8022613525391"
632" Q 146.4187316894531 133.1491088867188 146.4187316894531 136.5 Z";
633
634DEF_TEST(PathOpsOvalsAsQuads, reporter) {
635 if ((false)) { // don't execute this for now
636 SkPath path;
638 Simplify(path, &path);
639 }
640}
641
642DEF_TEST(PathOps64OvalsAsQuads, reporter) {
643 if ((false)) { // don't execute this for now
644 SkPath path, result;
645 SkOpBuilder builder;
647 OvalSet set = {{0, 0, 0, 0}, 2, 3, 9, 100, 100};
648 testOvalSet(set, path, &builder, nullptr, &result);
649 }
650}
#define DEFINE_int(name, defaultValue, helpString)
reporter
static void testOne(skiatest::Reporter *reporter, const OvalSet &set)
struct OvalSetOneOff oneOffs[]
static void testOvalSet(const OvalSet &set, const SkPath &oval, SkOpBuilder *builder, SkRegion *region, SkPath *result)
static void setupOne(skiatest::Reporter *reporter, int col, int row, int rot, int trial)
const char ovalsAsQuads[]
static void(* skipTest)(skiatest::Reporter *, const char *filename)
static void oneOff(skiatest::Reporter *reporter, const ConicPts &conic1, const ConicPts &conic2, bool coin)
bool testSimplify(SkPath &path, bool useXor, SkPath &out, PathOpsThreadState &state, const char *pathStr)
int comparePaths(skiatest::Reporter *reporter, const char *filename, const SkPath &one, const SkPath &two, SkBitmap &bitmap)
#define SkASSERT(cond)
Definition SkAssert.h:116
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
static float SkBits2Float(uint32_t bits)
Definition SkFloatBits.h:48
@ kUnion_SkPathOp
union (inclusive-or) the two paths
Definition SkPathOps.h:25
bool SK_API Simplify(const SkPath &path, SkPath *result)
#define DEF_TEST(name, reporter)
Definition Test.h:312
static bool FromSVGString(const char str[], SkPath *)
SkScalar nextRangeScalar(SkScalar min, SkScalar max)
Definition SkRandom.h:106
void setSeed(uint32_t seed)
Definition SkRandom.h:128
bool getBoundaryPath(SkPath *path) const
@ kUnion_Op
target unioned with operand
Definition SkRegion.h:369
bool op(const SkIRect &rect, Op op)
Definition SkRegion.h:384
bool setRect(const SkIRect &rect)
Definition SkRegion.cpp:192
bool setPath(const SkPath &path, const SkRegion &clip)
float SkScalar
Definition extension.cpp:12
GAsyncResult * result
double y
double x
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switches.h:57
const Scalar scale