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

Side by Side Diff: tests/PathOpsLineIntersectionTest.cpp

Issue 1029993002: Revert of pathops version two (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests/PathOpsFuzz763Test.cpp ('k') | tests/PathOpsOpCubicThreadedTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 #include "PathOpsTestCommon.h" 7 #include "PathOpsTestCommon.h"
8 #include "SkIntersections.h" 8 #include "SkIntersections.h"
9 #include "SkPathOpsLine.h" 9 #include "SkPathOpsLine.h"
10 #include "Test.h" 10 #include "Test.h"
11 11
12 // FIXME: add tests for intersecting, non-intersecting, degenerate, coincident 12 // FIXME: add tests for intersecting, non-intersecting, degenerate, coincident
13 static const SkDLine tests[][2] = { 13 static const SkDLine tests[][2] = {
14 {{{{0.00010360032320022583, 1.0172703415155411}, {0.00014114845544099808, 1.0200 891587883234}}},
15 {{{0.00010259449481964111, 1.017270140349865}, {0.00018215179443359375, 1.02289 0567779541}}}},
16
17 #if 0 14 #if 0
18 // these do intersect at a pair of points, but not close enough for check re sults liking 15 // these do intersect at a pair of points, but not close enough for check re sults liking
19 {{{{365.848175,5081.15186}, {368,5103}}}, {{{367.967712,5102.61084}, {368.27 8717,5105.71045}}}}, 16 {{{{365.848175,5081.15186}, {368,5103}}}, {{{367.967712,5102.61084}, {368.27 8717,5105.71045}}}},
20 #endif 17 #endif
21 {{{{30,20}, {30,50}}}, {{{24,30}, {36,30}}}}, 18 {{{{30,20}, {30,50}}}, {{{24,30}, {36,30}}}},
22 {{{{323,193}, {-317,193}}}, {{{0,994}, {0,0}}}}, 19 {{{{323,193}, {-317,193}}}, {{{0,994}, {0,0}}}},
23 {{{{90,230}, {160,60}}}, {{{60,120}, {260,120}}}}, 20 {{{{90,230}, {160,60}}}, {{{60,120}, {260,120}}}},
24 {{{{90,230}, {160,60}}}, {{{181.176468,120}, {135.294128,120}}}}, 21 {{{{90,230}, {160,60}}}, {{{181.176468,120}, {135.294128,120}}}},
25 {{{{181.1764678955078125f, 120}, {186.3661956787109375f, 134.7042236328125f} }}, 22 {{{{181.1764678955078125f, 120}, {186.3661956787109375f, 134.7042236328125f} }},
26 {{{175.8309783935546875f, 141.5211334228515625f}, {187.8782806396484375f, 1 33.7258148193359375f}}}}, 23 {{{175.8309783935546875f, 141.5211334228515625f}, {187.8782806396484375f, 1 33.7258148193359375f}}}},
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 {{{{186.3661956787109375f, 134.7042236328125f}, {187.8782806396484375f, 133. 7258148193359375f}}}, 75 {{{{186.3661956787109375f, 134.7042236328125f}, {187.8782806396484375f, 133. 7258148193359375f}}},
79 {{{175.8309783935546875f, 141.5211334228515625f}, {187.8782806396484375f, 1 33.7258148193359375f}}}}, 76 {{{175.8309783935546875f, 141.5211334228515625f}, {187.8782806396484375f, 1 33.7258148193359375f}}}},
80 77
81 {{{{235.681549, 531.000000}, {280.318420, 321.000000}}}, 78 {{{{235.681549, 531.000000}, {280.318420, 321.000000}}},
82 {{{286.695129, 291.000000}, {229.304855, 561.000000}}}}, 79 {{{286.695129, 291.000000}, {229.304855, 561.000000}}}},
83 }; 80 };
84 81
85 static const size_t coincidentTests_count = SK_ARRAY_COUNT(coincidentTests); 82 static const size_t coincidentTests_count = SK_ARRAY_COUNT(coincidentTests);
86 83
87 static void check_results(skiatest::Reporter* reporter, const SkDLine& line1, co nst SkDLine& line2, 84 static void check_results(skiatest::Reporter* reporter, const SkDLine& line1, co nst SkDLine& line2,
88 const SkIntersections& ts, bool nearAllowed) { 85 const SkIntersections& ts) {
89 for (int i = 0; i < ts.used(); ++i) { 86 for (int i = 0; i < ts.used(); ++i) {
90 SkDPoint result1 = line1.ptAtT(ts[0][i]); 87 SkDPoint result1 = line1.ptAtT(ts[0][i]);
91 SkDPoint result2 = line2.ptAtT(ts[1][i]); 88 SkDPoint result2 = line2.ptAtT(ts[1][i]);
92 if (nearAllowed && result1.roughlyEqual(result2)) {
93 continue;
94 }
95 if (!result1.approximatelyEqual(result2) && !ts.nearlySame(i)) { 89 if (!result1.approximatelyEqual(result2) && !ts.nearlySame(i)) {
96 REPORTER_ASSERT(reporter, ts.used() != 1); 90 REPORTER_ASSERT(reporter, ts.used() != 1);
97 result2 = line2.ptAtT(ts[1][i ^ 1]); 91 result2 = line2.ptAtT(ts[1][i ^ 1]);
98 if (!result1.approximatelyEqual(result2)) { 92 if (!result1.approximatelyEqual(result2)) {
99 SkDebugf("."); 93 SkDebugf(".");
100 } 94 }
101 REPORTER_ASSERT(reporter, result1.approximatelyEqual(result2)); 95 REPORTER_ASSERT(reporter, result1.approximatelyEqual(result2));
102 REPORTER_ASSERT(reporter, result1.approximatelyEqual(ts.pt(i).asSkPo int())); 96 REPORTER_ASSERT(reporter, result1.approximatelyEqual(ts.pt(i).asSkPo int()));
103 } 97 }
104 } 98 }
105 } 99 }
106 100
107 static void testOne(skiatest::Reporter* reporter, const SkDLine& line1, const Sk DLine& line2, 101 static void testOne(skiatest::Reporter* reporter, const SkDLine& line1, const Sk DLine& line2) {
108 bool nearAllowed) {
109 SkASSERT(ValidLine(line1)); 102 SkASSERT(ValidLine(line1));
110 SkASSERT(ValidLine(line2)); 103 SkASSERT(ValidLine(line2));
111 SkIntersections i; 104 SkIntersections i;
112 i.allowNear(nearAllowed);
113 int pts = i.intersect(line1, line2); 105 int pts = i.intersect(line1, line2);
114 REPORTER_ASSERT(reporter, pts); 106 REPORTER_ASSERT(reporter, pts);
115 REPORTER_ASSERT(reporter, pts == i.used()); 107 REPORTER_ASSERT(reporter, pts == i.used());
116 check_results(reporter, line1, line2, i, nearAllowed); 108 check_results(reporter, line1, line2, i);
117 if (line1[0] == line1[1] || line2[0] == line2[1]) { 109 if (line1[0] == line1[1] || line2[0] == line2[1]) {
118 return; 110 return;
119 } 111 }
120 if (line1[0].fY == line1[1].fY) { 112 if (line1[0].fY == line1[1].fY) {
121 double left = SkTMin(line1[0].fX, line1[1].fX); 113 double left = SkTMin(line1[0].fX, line1[1].fX);
122 double right = SkTMax(line1[0].fX, line1[1].fX); 114 double right = SkTMax(line1[0].fX, line1[1].fX);
123 SkIntersections ts; 115 SkIntersections ts;
124 ts.horizontal(line2, left, right, line1[0].fY, line1[0].fX != left); 116 ts.horizontal(line2, left, right, line1[0].fY, line1[0].fX != left);
125 check_results(reporter, line2, line1, ts, nearAllowed); 117 check_results(reporter, line2, line1, ts);
126 } 118 }
127 if (line2[0].fY == line2[1].fY) { 119 if (line2[0].fY == line2[1].fY) {
128 double left = SkTMin(line2[0].fX, line2[1].fX); 120 double left = SkTMin(line2[0].fX, line2[1].fX);
129 double right = SkTMax(line2[0].fX, line2[1].fX); 121 double right = SkTMax(line2[0].fX, line2[1].fX);
130 SkIntersections ts; 122 SkIntersections ts;
131 ts.horizontal(line1, left, right, line2[0].fY, line2[0].fX != left); 123 ts.horizontal(line1, left, right, line2[0].fY, line2[0].fX != left);
132 check_results(reporter, line1, line2, ts, nearAllowed); 124 check_results(reporter, line1, line2, ts);
133 } 125 }
134 if (line1[0].fX == line1[1].fX) { 126 if (line1[0].fX == line1[1].fX) {
135 double top = SkTMin(line1[0].fY, line1[1].fY); 127 double top = SkTMin(line1[0].fY, line1[1].fY);
136 double bottom = SkTMax(line1[0].fY, line1[1].fY); 128 double bottom = SkTMax(line1[0].fY, line1[1].fY);
137 SkIntersections ts; 129 SkIntersections ts;
138 ts.vertical(line2, top, bottom, line1[0].fX, line1[0].fY != top); 130 ts.vertical(line2, top, bottom, line1[0].fX, line1[0].fY != top);
139 check_results(reporter, line2, line1, ts, nearAllowed); 131 check_results(reporter, line2, line1, ts);
140 } 132 }
141 if (line2[0].fX == line2[1].fX) { 133 if (line2[0].fX == line2[1].fX) {
142 double top = SkTMin(line2[0].fY, line2[1].fY); 134 double top = SkTMin(line2[0].fY, line2[1].fY);
143 double bottom = SkTMax(line2[0].fY, line2[1].fY); 135 double bottom = SkTMax(line2[0].fY, line2[1].fY);
144 SkIntersections ts; 136 SkIntersections ts;
145 ts.vertical(line1, top, bottom, line2[0].fX, line2[0].fY != top); 137 ts.vertical(line1, top, bottom, line2[0].fX, line2[0].fY != top);
146 check_results(reporter, line1, line2, ts, nearAllowed); 138 check_results(reporter, line1, line2, ts);
147 } 139 }
148 reporter->bumpTestCount(); 140 reporter->bumpTestCount();
149 } 141 }
150 142
151 static void testOneCoincident(skiatest::Reporter* reporter, const SkDLine& line1 , 143 static void testOneCoincident(skiatest::Reporter* reporter, const SkDLine& line1 ,
152 const SkDLine& line2) { 144 const SkDLine& line2) {
153 SkASSERT(ValidLine(line1)); 145 SkASSERT(ValidLine(line1));
154 SkASSERT(ValidLine(line2)); 146 SkASSERT(ValidLine(line2));
155 SkIntersections ts; 147 SkIntersections ts;
156 int pts = ts.intersect(line1, line2); 148 int pts = ts.intersect(line1, line2);
157 REPORTER_ASSERT(reporter, pts == 2); 149 REPORTER_ASSERT(reporter, pts == 2);
158 REPORTER_ASSERT(reporter, pts == ts.used()); 150 REPORTER_ASSERT(reporter, pts == ts.used());
159 check_results(reporter, line1, line2, ts, false); 151 check_results(reporter, line1, line2, ts);
160 if (line1[0] == line1[1] || line2[0] == line2[1]) { 152 if (line1[0] == line1[1] || line2[0] == line2[1]) {
161 return; 153 return;
162 } 154 }
163 if (line1[0].fY == line1[1].fY) { 155 if (line1[0].fY == line1[1].fY) {
164 double left = SkTMin(line1[0].fX, line1[1].fX); 156 double left = SkTMin(line1[0].fX, line1[1].fX);
165 double right = SkTMax(line1[0].fX, line1[1].fX); 157 double right = SkTMax(line1[0].fX, line1[1].fX);
166 SkIntersections ts; 158 SkIntersections ts;
167 ts.horizontal(line2, left, right, line1[0].fY, line1[0].fX != left); 159 ts.horizontal(line2, left, right, line1[0].fY, line1[0].fX != left);
168 REPORTER_ASSERT(reporter, pts == 2); 160 REPORTER_ASSERT(reporter, pts == 2);
169 REPORTER_ASSERT(reporter, pts == ts.used()); 161 REPORTER_ASSERT(reporter, pts == ts.used());
170 check_results(reporter, line2, line1, ts, false); 162 check_results(reporter, line2, line1, ts);
171 } 163 }
172 if (line2[0].fY == line2[1].fY) { 164 if (line2[0].fY == line2[1].fY) {
173 double left = SkTMin(line2[0].fX, line2[1].fX); 165 double left = SkTMin(line2[0].fX, line2[1].fX);
174 double right = SkTMax(line2[0].fX, line2[1].fX); 166 double right = SkTMax(line2[0].fX, line2[1].fX);
175 SkIntersections ts; 167 SkIntersections ts;
176 ts.horizontal(line1, left, right, line2[0].fY, line2[0].fX != left); 168 ts.horizontal(line1, left, right, line2[0].fY, line2[0].fX != left);
177 REPORTER_ASSERT(reporter, pts == 2); 169 REPORTER_ASSERT(reporter, pts == 2);
178 REPORTER_ASSERT(reporter, pts == ts.used()); 170 REPORTER_ASSERT(reporter, pts == ts.used());
179 check_results(reporter, line1, line2, ts, false); 171 check_results(reporter, line1, line2, ts);
180 } 172 }
181 if (line1[0].fX == line1[1].fX) { 173 if (line1[0].fX == line1[1].fX) {
182 double top = SkTMin(line1[0].fY, line1[1].fY); 174 double top = SkTMin(line1[0].fY, line1[1].fY);
183 double bottom = SkTMax(line1[0].fY, line1[1].fY); 175 double bottom = SkTMax(line1[0].fY, line1[1].fY);
184 SkIntersections ts; 176 SkIntersections ts;
185 ts.vertical(line2, top, bottom, line1[0].fX, line1[0].fY != top); 177 ts.vertical(line2, top, bottom, line1[0].fX, line1[0].fY != top);
186 REPORTER_ASSERT(reporter, pts == 2); 178 REPORTER_ASSERT(reporter, pts == 2);
187 REPORTER_ASSERT(reporter, pts == ts.used()); 179 REPORTER_ASSERT(reporter, pts == ts.used());
188 check_results(reporter, line2, line1, ts, false); 180 check_results(reporter, line2, line1, ts);
189 } 181 }
190 if (line2[0].fX == line2[1].fX) { 182 if (line2[0].fX == line2[1].fX) {
191 double top = SkTMin(line2[0].fY, line2[1].fY); 183 double top = SkTMin(line2[0].fY, line2[1].fY);
192 double bottom = SkTMax(line2[0].fY, line2[1].fY); 184 double bottom = SkTMax(line2[0].fY, line2[1].fY);
193 SkIntersections ts; 185 SkIntersections ts;
194 ts.vertical(line1, top, bottom, line2[0].fX, line2[0].fY != top); 186 ts.vertical(line1, top, bottom, line2[0].fX, line2[0].fY != top);
195 REPORTER_ASSERT(reporter, pts == 2); 187 REPORTER_ASSERT(reporter, pts == 2);
196 REPORTER_ASSERT(reporter, pts == ts.used()); 188 REPORTER_ASSERT(reporter, pts == ts.used());
197 check_results(reporter, line1, line2, ts, false); 189 check_results(reporter, line1, line2, ts);
198 } 190 }
199 reporter->bumpTestCount(); 191 reporter->bumpTestCount();
200 } 192 }
201 193
202 DEF_TEST(PathOpsLineIntersection, reporter) { 194 DEF_TEST(PathOpsLineIntersection, reporter) {
203 size_t index; 195 size_t index;
204 for (index = 0; index < coincidentTests_count; ++index) { 196 for (index = 0; index < coincidentTests_count; ++index) {
205 const SkDLine& line1 = coincidentTests[index][0]; 197 const SkDLine& line1 = coincidentTests[index][0];
206 const SkDLine& line2 = coincidentTests[index][1]; 198 const SkDLine& line2 = coincidentTests[index][1];
207 testOneCoincident(reporter, line1, line2); 199 testOneCoincident(reporter, line1, line2);
208 } 200 }
209 for (index = 0; index < tests_count; ++index) { 201 for (index = 0; index < tests_count; ++index) {
210 const SkDLine& line1 = tests[index][0]; 202 const SkDLine& line1 = tests[index][0];
211 const SkDLine& line2 = tests[index][1]; 203 const SkDLine& line2 = tests[index][1];
212 testOne(reporter, line1, line2, true); 204 testOne(reporter, line1, line2);
213 } 205 }
214 for (index = 0; index < noIntersect_count; ++index) { 206 for (index = 0; index < noIntersect_count; ++index) {
215 const SkDLine& line1 = noIntersect[index][0]; 207 const SkDLine& line1 = noIntersect[index][0];
216 const SkDLine& line2 = noIntersect[index][1]; 208 const SkDLine& line2 = noIntersect[index][1];
217 SkIntersections ts; 209 SkIntersections ts;
218 int pts = ts.intersect(line1, line2); 210 int pts = ts.intersect(line1, line2);
219 REPORTER_ASSERT(reporter, !pts); 211 REPORTER_ASSERT(reporter, !pts);
220 REPORTER_ASSERT(reporter, pts == ts.used()); 212 REPORTER_ASSERT(reporter, pts == ts.used());
221 reporter->bumpTestCount(); 213 reporter->bumpTestCount();
222 } 214 }
223 } 215 }
224 216
225 DEF_TEST(PathOpsLineIntersectionOneOff, reporter) { 217 DEF_TEST(PathOpsLineIntersectionOneOff, reporter) {
226 int index = 0; 218 int index = 0;
227 SkASSERT(index < (int) tests_count); 219 SkASSERT(index < (int) tests_count);
228 testOne(reporter, tests[index][0], tests[index][1], true); 220 testOne(reporter, tests[index][0], tests[index][1]);
229 } 221 testOne(reporter, tests[1][0], tests[1][1]);
230
231 DEF_TEST(PathOpsLineIntersectionExactOneOff, reporter) {
232 int index = 0;
233 SkASSERT(index < (int) tests_count);
234 testOne(reporter, tests[index][0], tests[index][1], false);
235 } 222 }
236 223
237 DEF_TEST(PathOpsLineIntersectionOneCoincident, reporter) { 224 DEF_TEST(PathOpsLineIntersectionOneCoincident, reporter) {
238 int index = 0; 225 int index = 0;
239 SkASSERT(index < (int) coincidentTests_count); 226 SkASSERT(index < (int) coincidentTests_count);
240 const SkDLine& line1 = coincidentTests[index][0]; 227 const SkDLine& line1 = coincidentTests[index][0];
241 const SkDLine& line2 = coincidentTests[index][1]; 228 const SkDLine& line2 = coincidentTests[index][1];
242 testOneCoincident(reporter, line1, line2); 229 testOneCoincident(reporter, line1, line2);
243 } 230 }
OLDNEW
« no previous file with comments | « tests/PathOpsFuzz763Test.cpp ('k') | tests/PathOpsOpCubicThreadedTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698