1#include "EdgeWalker_Test.h" 2#include "Intersection_Tests.h" 3#include "ShapeOps.h" 4 5bool gShowOriginal = true; 6 7struct curve { 8 SkPath::Verb verb; 9 SkPoint pts[4]; 10}; 11 12struct 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 21struct 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 28struct curve* testSet[] = { 29 test2, 30 test1 31}; 32 33size_t testSet_count = sizeof(testSet) / sizeof(testSet[0]); 34 35static 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 75static void (*tests[])() = { 76 construct, 77}; 78 79static const size_t testCount = sizeof(tests) / sizeof(tests[0]); 80 81static void (*firstTest)() = 0; 82static bool skipAll = false; 83 84void 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