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

Side by Side Diff: tests/PathOpsSimplifyFailTest.cpp

Issue 21359002: path ops work in progress (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: remove space Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « tests/PathOpsQuadLineIntersectionTest.cpp ('k') | tests/PathOpsSimplifyTest.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 2013 Google Inc. 2 * Copyright 2013 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 "SkPathOps.h" 7 #include "SkPathOps.h"
8 #include "SkPath.h" 8 #include "SkPath.h"
9 #include "SkPoint.h" 9 #include "SkPoint.h"
10 #include "Test.h" 10 #include "Test.h"
(...skipping 19 matching lines...) Expand all
30 { SK_ScalarMax, 0 }, 30 { SK_ScalarMax, 0 },
31 { 0, SK_ScalarMax }, 31 { 0, SK_ScalarMax },
32 { SK_ScalarMax, SK_ScalarMax }, 32 { SK_ScalarMax, SK_ScalarMax },
33 { SK_ScalarMin, 0 }, 33 { SK_ScalarMin, 0 },
34 { 0, SK_ScalarMin }, 34 { 0, SK_ScalarMin },
35 { SK_ScalarMin, SK_ScalarMin }, 35 { SK_ScalarMin, SK_ScalarMin },
36 }; 36 };
37 37
38 const size_t finitePtsCount = sizeof(finitePts) / sizeof(finitePts[0]); 38 const size_t finitePtsCount = sizeof(finitePts) / sizeof(finitePts[0]);
39 39
40 static void failOne(skiatest::Reporter* reporter, int index) {
41 SkPath path;
42 int i = (int) (index % nonFinitePtsCount);
43 int f = (int) (index % finitePtsCount);
44 int g = (int) ((f + 1) % finitePtsCount);
45 switch (index % 13) {
46 case 0: path.lineTo(nonFinitePts[i]); break;
47 case 1: path.quadTo(nonFinitePts[i], nonFinitePts[i]); break;
48 case 2: path.quadTo(nonFinitePts[i], finitePts[f]); break;
49 case 3: path.quadTo(finitePts[f], nonFinitePts[i]); break;
50 case 4: path.cubicTo(nonFinitePts[i], finitePts[f], finitePts[f]); break ;
51 case 5: path.cubicTo(finitePts[f], nonFinitePts[i], finitePts[f]); break ;
52 case 6: path.cubicTo(finitePts[f], finitePts[f], nonFinitePts[i]); break ;
53 case 7: path.cubicTo(nonFinitePts[i], nonFinitePts[i], finitePts[f]); br eak;
54 case 8: path.cubicTo(nonFinitePts[i], finitePts[f], nonFinitePts[i]); br eak;
55 case 9: path.cubicTo(finitePts[f], nonFinitePts[i], nonFinitePts[i]); br eak;
56 case 10: path.cubicTo(nonFinitePts[i], nonFinitePts[i], nonFinitePts[i]) ; break;
57 case 11: path.cubicTo(nonFinitePts[i], finitePts[f], finitePts[g]); brea k;
58 case 12: path.moveTo(nonFinitePts[i]); break;
59 }
60 SkPath result;
61 result.setFillType(SkPath::kWinding_FillType);
62 bool success = Simplify(path, &result);
63 REPORTER_ASSERT(reporter, !success);
64 REPORTER_ASSERT(reporter, result.isEmpty());
65 REPORTER_ASSERT(reporter, result.getFillType() == SkPath::kWinding_FillType) ;
66 reporter->bumpTestCount();
67 }
68
69 static void dontFailOne(skiatest::Reporter* reporter, int index) {
70 SkPath path;
71 int f = (int) (index % finitePtsCount);
72 int g = (int) ((f + 1) % finitePtsCount);
73 switch (index % 11) {
74 case 0: path.lineTo(finitePts[f]); break;
75 case 1: path.quadTo(finitePts[f], finitePts[f]); break;
76 case 2: path.quadTo(finitePts[f], finitePts[g]); break;
77 case 3: path.quadTo(finitePts[g], finitePts[f]); break;
78 case 4: path.cubicTo(finitePts[f], finitePts[f], finitePts[f]); break;
79 case 5: path.cubicTo(finitePts[f], finitePts[f], finitePts[g]); break;
80 case 6: path.cubicTo(finitePts[f], finitePts[g], finitePts[f]); break;
81 case 7: path.cubicTo(finitePts[f], finitePts[g], finitePts[g]); break;
82 case 8: path.cubicTo(finitePts[g], finitePts[f], finitePts[f]); break;
83 case 9: path.cubicTo(finitePts[g], finitePts[f], finitePts[g]); break;
84 case 10: path.moveTo(finitePts[f]); break;
85 }
86 SkPath result;
87 result.setFillType(SkPath::kWinding_FillType);
88 bool success = Simplify(path, &result);
89 REPORTER_ASSERT(reporter, success);
90 REPORTER_ASSERT(reporter, result.getFillType() != SkPath::kWinding_FillType) ;
91 reporter->bumpTestCount();
92 }
93
40 static void PathOpsSimplifyFailTest(skiatest::Reporter* reporter) { 94 static void PathOpsSimplifyFailTest(skiatest::Reporter* reporter) {
41 for (int index = 0; index < (int) (13 * nonFinitePtsCount * finitePtsCount); ++index) { 95 for (int index = 0; index < (int) (13 * nonFinitePtsCount * finitePtsCount); ++index) {
42 SkPath path; 96 failOne(reporter, index);
43 int i = (int) (index % nonFinitePtsCount);
44 int f = (int) (index % finitePtsCount);
45 int g = (int) ((f + 1) % finitePtsCount);
46 switch (index % 13) {
47 case 0: path.lineTo(nonFinitePts[i]); break;
48 case 1: path.quadTo(nonFinitePts[i], nonFinitePts[i]); break;
49 case 2: path.quadTo(nonFinitePts[i], finitePts[f]); break;
50 case 3: path.quadTo(finitePts[f], nonFinitePts[i]); break;
51 case 4: path.cubicTo(nonFinitePts[i], finitePts[f], finitePts[f]); b reak;
52 case 5: path.cubicTo(finitePts[f], nonFinitePts[i], finitePts[f]); b reak;
53 case 6: path.cubicTo(finitePts[f], finitePts[f], nonFinitePts[i]); b reak;
54 case 7: path.cubicTo(nonFinitePts[i], nonFinitePts[i], finitePts[f]) ; break;
55 case 8: path.cubicTo(nonFinitePts[i], finitePts[f], nonFinitePts[i]) ; break;
56 case 9: path.cubicTo(finitePts[f], nonFinitePts[i], nonFinitePts[i]) ; break;
57 case 10: path.cubicTo(nonFinitePts[i], nonFinitePts[i], nonFinitePts [i]); break;
58 case 11: path.cubicTo(nonFinitePts[i], finitePts[f], finitePts[g]); break;
59 case 12: path.moveTo(nonFinitePts[i]); break;
60 }
61 SkPath result;
62 result.setFillType(SkPath::kWinding_FillType);
63 bool success = Simplify(path, &result);
64 REPORTER_ASSERT(reporter, !success);
65 REPORTER_ASSERT(reporter, result.isEmpty());
66 REPORTER_ASSERT(reporter, result.getFillType() == SkPath::kWinding_FillT ype);
67 reporter->bumpTestCount();
68 }
69 if (sizeof(reporter) == 4) {
70 return;
71 } 97 }
72 for (int index = 0; index < (int) (11 * finitePtsCount); ++index) { 98 for (int index = 0; index < (int) (11 * finitePtsCount); ++index) {
73 SkPath path; 99 dontFailOne(reporter, index);
74 int f = (int) (index % finitePtsCount);
75 int g = (int) ((f + 1) % finitePtsCount);
76 switch (index % 11) {
77 case 0: path.lineTo(finitePts[f]); break;
78 case 1: path.quadTo(finitePts[f], finitePts[f]); break;
79 case 2: path.quadTo(finitePts[f], finitePts[g]); break;
80 case 3: path.quadTo(finitePts[g], finitePts[f]); break;
81 case 4: path.cubicTo(finitePts[f], finitePts[f], finitePts[f]); brea k;
82 case 5: path.cubicTo(finitePts[f], finitePts[f], finitePts[g]); brea k;
83 case 6: path.cubicTo(finitePts[f], finitePts[g], finitePts[f]); brea k;
84 case 7: path.cubicTo(finitePts[f], finitePts[g], finitePts[g]); brea k;
85 case 8: path.cubicTo(finitePts[g], finitePts[f], finitePts[f]); brea k;
86 case 9: path.cubicTo(finitePts[g], finitePts[f], finitePts[g]); brea k;
87 case 10: path.moveTo(finitePts[f]); break;
88 }
89 SkPath result;
90 result.setFillType(SkPath::kWinding_FillType);
91 bool success = Simplify(path, &result);
92 REPORTER_ASSERT(reporter, success);
93 REPORTER_ASSERT(reporter, result.getFillType() != SkPath::kWinding_FillT ype);
94 reporter->bumpTestCount();
95 } 100 }
96 } 101 }
97 102
103 static void PathOpsSimplifyFailOneTest(skiatest::Reporter* reporter) {
104 int index = 0;
105 failOne(reporter, index);
106 }
107
108 static void PathOpsSimplifyDontFailOneTest(skiatest::Reporter* reporter) {
109 int index = 6;
110 dontFailOne(reporter, index);
111 }
112
98 #include "TestClassDef.h" 113 #include "TestClassDef.h"
99 DEFINE_TESTCLASS_SHORT(PathOpsSimplifyFailTest) 114 DEFINE_TESTCLASS_SHORT(PathOpsSimplifyFailTest)
115
116 DEFINE_TESTCLASS_SHORT(PathOpsSimplifyFailOneTest)
117
118 DEFINE_TESTCLASS_SHORT(PathOpsSimplifyDontFailOneTest)
OLDNEW
« no previous file with comments | « tests/PathOpsQuadLineIntersectionTest.cpp ('k') | tests/PathOpsSimplifyTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698