OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 #include "PathOpsCubicIntersectionTestData.h" | 7 #include "PathOpsCubicIntersectionTestData.h" |
8 #include "PathOpsQuadIntersectionTestData.h" | 8 #include "PathOpsQuadIntersectionTestData.h" |
9 #include "PathOpsTestCommon.h" | 9 #include "PathOpsTestCommon.h" |
10 #include "SkGeometry.h" | 10 #include "SkGeometry.h" |
11 #include "SkIntersections.h" | 11 #include "SkIntersections.h" |
12 #include "SkPathOpsRect.h" | 12 #include "SkPathOpsRect.h" |
13 #include "SkReduceOrder.h" | 13 #include "SkReduceOrder.h" |
14 #include "Test.h" | 14 #include "Test.h" |
| 15 #include "TestClassDef.h" |
15 | 16 |
16 static void test(skiatest::Reporter* reporter, const SkDCubic* cubics, const cha
r* name, | 17 static void test(skiatest::Reporter* reporter, const SkDCubic* cubics, const cha
r* name, |
17 int firstTest, size_t testCount) { | 18 int firstTest, size_t testCount) { |
18 for (size_t index = firstTest; index < testCount; ++index) { | 19 for (size_t index = firstTest; index < testCount; ++index) { |
19 const SkDCubic& cubic = cubics[index]; | 20 const SkDCubic& cubic = cubics[index]; |
20 SkASSERT(ValidCubic(cubic)); | 21 SkASSERT(ValidCubic(cubic)); |
21 double precision = cubic.calcPrecision(); | 22 double precision = cubic.calcPrecision(); |
22 SkTArray<SkDQuad, true> quads; | 23 SkTArray<SkDQuad, true> quads; |
23 CubicToQuads(cubic, precision, quads); | 24 CubicToQuads(cubic, precision, quads); |
24 if (quads.count() != 1 && quads.count() != 2) { | 25 if (quads.count() != 1 && quads.count() != 2) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 int last = quads.count() - 1; | 87 int last = quads.count() - 1; |
87 if (!AlmostEqualUlps(cubic[3].fX, quads[last][2].fX) | 88 if (!AlmostEqualUlps(cubic[3].fX, quads[last][2].fX) |
88 || !AlmostEqualUlps(cubic[3].fY, quads[last][2].fY)) { | 89 || !AlmostEqualUlps(cubic[3].fY, quads[last][2].fY)) { |
89 SkDebugf("[%d][%d] unmatched end\n", static_cast<int>(index), id
x2); | 90 SkDebugf("[%d][%d] unmatched end\n", static_cast<int>(index), id
x2); |
90 REPORTER_ASSERT(reporter, 0); | 91 REPORTER_ASSERT(reporter, 0); |
91 } | 92 } |
92 } | 93 } |
93 } | 94 } |
94 } | 95 } |
95 | 96 |
96 static void CubicToQuads_Test(skiatest::Reporter* reporter) { | 97 DEF_TEST(CubicToQuads, reporter) { |
97 enum { | 98 enum { |
98 RunAll, | 99 RunAll, |
99 RunPointDegenerates, | 100 RunPointDegenerates, |
100 RunNotPointDegenerates, | 101 RunNotPointDegenerates, |
101 RunLines, | 102 RunLines, |
102 RunNotLines, | 103 RunNotLines, |
103 RunModEpsilonLines, | 104 RunModEpsilonLines, |
104 RunLessEpsilonLines, | 105 RunLessEpsilonLines, |
105 RunNegEpsilonLines, | 106 RunNegEpsilonLines, |
106 RunQuadraticLines, | 107 RunQuadraticLines, |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 {static_cast<float>(cubic[3].fX), static_cast<float>(cubic[3].fY)}}; | 181 {static_cast<float>(cubic[3].fX), static_cast<float>(cubic[3].fY)}}; |
181 SkScalar skinflect[2]; | 182 SkScalar skinflect[2]; |
182 int skin = SkFindCubicInflections(skcubic, skinflect); | 183 int skin = SkFindCubicInflections(skcubic, skinflect); |
183 if (false) SkDebugf("%s %d %1.9g\n", __FUNCTION__, skin, skinflect[0]); | 184 if (false) SkDebugf("%s %d %1.9g\n", __FUNCTION__, skin, skinflect[0]); |
184 SkTArray<SkDQuad, true> quads; | 185 SkTArray<SkDQuad, true> quads; |
185 double precision = cubic.calcPrecision(); | 186 double precision = cubic.calcPrecision(); |
186 CubicToQuads(cubic, precision, quads); | 187 CubicToQuads(cubic, precision, quads); |
187 if (false) SkDebugf("%s quads=%d\n", __FUNCTION__, quads.count()); | 188 if (false) SkDebugf("%s quads=%d\n", __FUNCTION__, quads.count()); |
188 } | 189 } |
189 | 190 |
190 static void CubicsToQuadratics_OneOffTests(skiatest::Reporter* reporter) { | 191 DEF_TEST(CubicsToQuadratics_OneOff_Loop, reporter) { |
191 for (size_t x = 0; x < localsCount; ++x) { | 192 for (size_t x = 0; x < localsCount; ++x) { |
192 oneOff(reporter, x); | 193 oneOff(reporter, x); |
193 } | 194 } |
194 } | 195 } |
195 | 196 |
196 static void CubicsToQuadratics_OneOffTest(skiatest::Reporter* reporter) { | 197 DEF_TEST(CubicsToQuadratics_OneOff_Single, reporter) { |
197 oneOff(reporter, 0); | 198 oneOff(reporter, 0); |
198 } | 199 } |
199 | |
200 static void PathOpsCubicToQuadsTest(skiatest::Reporter* reporter) { | |
201 CubicToQuads_Test(reporter); | |
202 CubicsToQuadratics_OneOffTest(reporter); | |
203 CubicsToQuadratics_OneOffTests(reporter); | |
204 } | |
205 | |
206 #include "TestClassDef.h" | |
207 DEFINE_TESTCLASS_SHORT(PathOpsCubicToQuadsTest) | |
OLD | NEW |