• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "EdgeWalker_Test.h"
2 #include "Intersection_Tests.h"
3 #include "ShapeOps.h"
4 
5 bool gShowOriginal = true;
6 
7 struct curve {
8     SkPath::Verb verb;
9     SkPoint pts[4];
10 };
11 
12 struct curve test1[] = {
13 {SkPath::kQuad_Verb, {{366.608826f, 151.196014f}, {378.803101f, 136.674606f}, {398.164948f, 136.674606f}}},
14 {SkPath::kLine_Verb, {{354.009216f, 208.816208f}, {393.291473f, 102.232819f}}},
15 {SkPath::kQuad_Verb, {{359.978058f, 136.581512f}, {378.315979f, 136.581512f}, {388.322723f, 149.613556f}}},
16 {SkPath::kQuad_Verb, {{364.390686f, 157.898193f}, {375.281769f, 136.674606f}, {396.039917f, 136.674606f}}},
17 {SkPath::kLine_Verb, {{396.039917f, 136.674606f}, {350, 120}}},
18 {SkPath::kDone_Verb}
19 };
20 
21 struct curve test2[] = {
22 {SkPath::kQuad_Verb, {{366.608826f, 151.196014f}, {378.803101f, 136.674606f}, {398.164948f, 136.674606f}}},
23 {SkPath::kQuad_Verb, {{359.978058f, 136.581512f}, {378.315979f, 136.581512f}, {388.322723f, 149.613556f}}},
24 {SkPath::kQuad_Verb, {{364.390686f, 157.898193f}, {375.281769f, 136.674606f}, {396.039917f, 136.674606f}}},
25 {SkPath::kDone_Verb}
26 };
27 
28 struct curve* testSet[] = {
29     test2,
30     test1
31 };
32 
33 size_t testSet_count = sizeof(testSet) / sizeof(testSet[0]);
34 
construct()35 static void construct() {
36     for (size_t idx = 0; idx < testSet_count; ++idx) {
37         const curve* test = testSet[idx];
38         SkPath path;
39         bool pathComplete = false;
40         bool first = true;
41         do {
42             if (first) {
43                 path.moveTo(test->pts[0].fX, test->pts[0].fY);
44                 first = false;
45             } else if (test->verb != SkPath::kDone_Verb) {
46                 path.lineTo(test->pts[0].fX, test->pts[0].fY);
47             }
48             switch (test->verb) {
49                 case SkPath::kDone_Verb:
50                     pathComplete = true;
51                     break;
52                 case SkPath::kLine_Verb:
53                     path.lineTo(test->pts[1].fX, test->pts[1].fY);
54                     break;
55                 case SkPath::kQuad_Verb:
56                     path.quadTo(test->pts[1].fX, test->pts[1].fY, test->pts[2].fX, test->pts[2].fY);
57                     break;
58                 case SkPath::kCubic_Verb:
59                     path.cubicTo(test->pts[1].fX, test->pts[1].fY, test->pts[2].fX, test->pts[2].fY, test->pts[3].fX, test->pts[3].fY);
60                     break;
61                 default:
62                     SkASSERT(0);
63             }
64             test++;
65         } while (!pathComplete);
66         path.close();
67         if (gShowOriginal) {
68             showPath(path, NULL);
69             SkDebugf("simplified:\n");
70         }
71         testSimplifyx(path);
72     }
73 }
74 
75 static void (*tests[])() = {
76     construct,
77 };
78 
79 static const size_t testCount = sizeof(tests) / sizeof(tests[0]);
80 
81 static void (*firstTest)() = 0;
82 static bool skipAll = false;
83 
MiniSimplify_Test()84 void MiniSimplify_Test() {
85     if (skipAll) {
86         return;
87     }
88     size_t index = 0;
89     if (firstTest) {
90         while (index < testCount && tests[index] != firstTest) {
91             ++index;
92         }
93     }
94     bool firstTestComplete = false;
95     for ( ; index < testCount; ++index) {
96         (*tests[index])();
97         firstTestComplete = true;
98     }
99 }
100