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

Unified Diff: experimental/Intersection/CubicToQuadratics_Test.cpp

Issue 867213004: remove prototype pathops code (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « experimental/Intersection/CubicToQuadratics.cpp ('k') | experimental/Intersection/CubicUtilities.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: experimental/Intersection/CubicToQuadratics_Test.cpp
diff --git a/experimental/Intersection/CubicToQuadratics_Test.cpp b/experimental/Intersection/CubicToQuadratics_Test.cpp
deleted file mode 100644
index b7e1252a46ccb5759e481289e3bb799653ce81ac..0000000000000000000000000000000000000000
--- a/experimental/Intersection/CubicToQuadratics_Test.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-#include "CubicIntersection_TestData.h"
-#include "CubicUtilities.h"
-#include "Intersection_Tests.h"
-#include "QuadraticIntersection_TestData.h"
-#include "TestUtilities.h"
-#include "SkGeometry.h"
-
-static void test(const Cubic* cubics, const char* name, int firstTest, size_t testCount) {
- SkTDArray<Quadratic> quads;
- for (size_t index = firstTest; index < testCount; ++index) {
- const Cubic& cubic = cubics[index];
- double precision = calcPrecision(cubic);
- (void) cubic_to_quadratics(cubic, precision, quads);
- if (quads.count() != 1) {
- printf("%s [%d] cubic to quadratics failed count=%d\n", name, (int) index,
- quads.count());
- }
- }
-}
-
-static void test(const Quadratic* quadTests, const char* name, int firstTest, size_t testCount) {
- SkTDArray<Quadratic> quads;
- for (size_t index = firstTest; index < testCount; ++index) {
- const Quadratic& quad = quadTests[index];
- Cubic cubic;
- quad_to_cubic(quad, cubic);
- double precision = calcPrecision(cubic);
- (void) cubic_to_quadratics(cubic, precision, quads);
- if (quads.count() != 1) {
- printf("%s [%d] cubic to quadratics failed count=%d\n", name, (int) index,
- quads.count());
- }
- }
-}
-
-static void testC(const Cubic* cubics, const char* name, int firstTest, size_t testCount) {
- SkTDArray<Quadratic> quads;
- // test if computed line end points are valid
- for (size_t index = firstTest; index < testCount; ++index) {
- const Cubic& cubic = cubics[index];
- double precision = calcPrecision(cubic);
- int order = cubic_to_quadratics(cubic, precision, quads);
- SkASSERT(order != 4);
- if (order < 3) {
- continue;
- }
- if (!AlmostEqualUlps(cubic[0].x, quads[0][0].x)
- || !AlmostEqualUlps(cubic[0].y, quads[0][0].y)) {
- printf("[%d] unmatched start\n", (int) index);
- }
- int last = quads.count() - 1;
- if (!AlmostEqualUlps(cubic[3].x, quads[last][2].x)
- || !AlmostEqualUlps(cubic[3].y, quads[last][2].y)) {
- printf("[%d] unmatched end\n", (int) index);
- }
- }
-}
-
-static void testC(const Cubic(* cubics)[2], const char* name, int firstTest, size_t testCount) {
- SkTDArray<Quadratic> quads;
- for (size_t index = firstTest; index < testCount; ++index) {
- for (int idx2 = 0; idx2 < 2; ++idx2) {
- const Cubic& cubic = cubics[index][idx2];
- double precision = calcPrecision(cubic);
- int order = cubic_to_quadratics(cubic, precision, quads);
- SkASSERT(order != 4);
- if (order < 3) {
- continue;
- }
- if (!AlmostEqualUlps(cubic[0].x, quads[0][0].x)
- || !AlmostEqualUlps(cubic[0].y, quads[0][0].y)) {
- printf("[%d][%d] unmatched start\n", (int) index, idx2);
- }
- int last = quads.count() - 1;
- if (!AlmostEqualUlps(cubic[3].x, quads[last][2].x)
- || !AlmostEqualUlps(cubic[3].y, quads[last][2].y)) {
- printf("[%d][%d] unmatched end\n", (int) index, idx2);
- }
- }
- }
-}
-
-void CubicToQuadratics_Test() {
- enum {
- RunAll,
- RunPointDegenerates,
- RunNotPointDegenerates,
- RunLines,
- RunNotLines,
- RunModEpsilonLines,
- RunLessEpsilonLines,
- RunNegEpsilonLines,
- RunQuadraticLines,
- RunQuadraticModLines,
- RunComputedLines,
- RunComputedTests,
- RunNone
- } run = RunAll;
- int firstTestIndex = 0;
-#if 0
- run = RunComputedLines;
- firstTestIndex = 18;
-#endif
- int firstPointDegeneratesTest = run == RunAll ? 0 : run == RunPointDegenerates ? firstTestIndex : SK_MaxS32;
- int firstNotPointDegeneratesTest = run == RunAll ? 0 : run == RunNotPointDegenerates ? firstTestIndex : SK_MaxS32;
- int firstLinesTest = run == RunAll ? 0 : run == RunLines ? firstTestIndex : SK_MaxS32;
- int firstNotLinesTest = run == RunAll ? 0 : run == RunNotLines ? firstTestIndex : SK_MaxS32;
- int firstModEpsilonTest = run == RunAll ? 0 : run == RunModEpsilonLines ? firstTestIndex : SK_MaxS32;
- int firstLessEpsilonTest = run == RunAll ? 0 : run == RunLessEpsilonLines ? firstTestIndex : SK_MaxS32;
- int firstNegEpsilonTest = run == RunAll ? 0 : run == RunNegEpsilonLines ? firstTestIndex : SK_MaxS32;
- int firstQuadraticLineTest = run == RunAll ? 0 : run == RunQuadraticLines ? firstTestIndex : SK_MaxS32;
- int firstQuadraticModLineTest = run == RunAll ? 0 : run == RunQuadraticModLines ? firstTestIndex : SK_MaxS32;
- int firstComputedLinesTest = run == RunAll ? 0 : run == RunComputedLines ? firstTestIndex : SK_MaxS32;
- int firstComputedCubicsTest = run == RunAll ? 0 : run == RunComputedTests ? firstTestIndex : SK_MaxS32;
-
- test(pointDegenerates, "pointDegenerates", firstPointDegeneratesTest, pointDegenerates_count);
- test(notPointDegenerates, "notPointDegenerates", firstNotPointDegeneratesTest, notPointDegenerates_count);
- test(lines, "lines", firstLinesTest, lines_count);
- test(notLines, "notLines", firstNotLinesTest, notLines_count);
- test(modEpsilonLines, "modEpsilonLines", firstModEpsilonTest, modEpsilonLines_count);
- test(lessEpsilonLines, "lessEpsilonLines", firstLessEpsilonTest, lessEpsilonLines_count);
- test(negEpsilonLines, "negEpsilonLines", firstNegEpsilonTest, negEpsilonLines_count);
- test(quadraticLines, "quadraticLines", firstQuadraticLineTest, quadraticLines_count);
- test(quadraticModEpsilonLines, "quadraticModEpsilonLines", firstQuadraticModLineTest,
- quadraticModEpsilonLines_count);
- testC(lines, "computed lines", firstComputedLinesTest, lines_count);
- testC(tests, "computed tests", firstComputedCubicsTest, tests_count);
- printf("%s end\n", __FUNCTION__);
-}
-
-static Cubic locals[] = {
-{{0, 1}, {1.9274705288631189e-19, 1.0000000000000002}, {0.0017190297609673323, 0.99828097023903239},
- {0.0053709083094631276, 0.99505672974365911}},
-
- {{14.5975863, 41.632436}, {16.3518929, 26.2639684}, {18.5165519, 7.68775139}, {8.03767257, 89.1628526}},
- {{69.7292014, 38.6877352}, {24.7648688, 23.1501713}, {84.9283191, 90.2588441}, {80.392774, 61.3533852}},
- {{
- 60.776536520932126,
- 71.249307306133829
- }, {
- 87.107894191103014,
- 22.377669868235323
- }, {
- 1.4974754310666936,
- 68.069569937917208
- }, {
- 45.261946574441133,
- 17.536076632112298
- }},
-};
-
-static size_t localsCount = sizeof(locals) / sizeof(locals[0]);
-
-#define DEBUG_CRASH 0
-#define TEST_AVERAGE_END_POINTS 0 // must take const off to test
-extern const bool AVERAGE_END_POINTS;
-
-static void oneOff(size_t x) {
- const Cubic& cubic = locals[x];
- const SkPoint skcubic[4] = {{(float) cubic[0].x, (float) cubic[0].y},
- {(float) cubic[1].x, (float) cubic[1].y}, {(float) cubic[2].x, (float) cubic[2].y},
- {(float) cubic[3].x, (float) cubic[3].y}};
- SkScalar skinflect[2];
- int skin = SkFindCubicInflections(skcubic, skinflect);
- SkDebugf("%s %d %1.9g\n", __FUNCTION__, skin, skinflect[0]);
- SkTDArray<Quadratic> quads;
- double precision = calcPrecision(cubic);
- (void) cubic_to_quadratics(cubic, precision, quads);
- SkDebugf("%s quads=%d\n", __FUNCTION__, quads.count());
-}
-
-void CubicsToQuadratics_OneOffTests() {
- for (size_t x = 0; x < localsCount; ++x) {
- oneOff(x);
- }
-}
-
-void CubicsToQuadratics_OneOffTest() {
- oneOff(0);
-}
-
-void CubicsToQuadratics_RandTest() {
- srand(0);
- const int arrayMax = 8;
- const int sampleMax = 10;
- const int tests = 1000000; // 10000000;
- int quadDist[arrayMax];
- bzero(quadDist, sizeof(quadDist));
- Cubic samples[arrayMax][sampleMax];
- int sampleCount[arrayMax];
- bzero(sampleCount, sizeof(sampleCount));
- for (int x = 0; x < tests; ++x) {
- Cubic cubic;
- for (int i = 0; i < 4; ++i) {
- cubic[i].x = (double) rand() / RAND_MAX * 100;
- cubic[i].y = (double) rand() / RAND_MAX * 100;
- }
- #if DEBUG_CRASH
- char str[1024];
- sprintf(str, "{{%1.9g, %1.9g}, {%1.9g, %1.9g}, {%1.9g, %1.9g}, {%1.9g, %1.9g}},\n",
- cubic[0].x, cubic[0].y, cubic[1].x, cubic[1].y, cubic[2].x, cubic[2].y,
- cubic[3].x, cubic[3].y);
- #endif
- SkTDArray<Quadratic> quads;
- double precision = calcPrecision(cubic);
- (void) cubic_to_quadratics(cubic, precision, quads);
- int count = quads.count();
- SkASSERT(count > 0);
- SkASSERT(--count < arrayMax);
- quadDist[count]++;
- int sCount = sampleCount[count];
- if (sCount < sampleMax) {
- memcpy(samples[count][sCount], cubic, sizeof(Cubic));
- sampleCount[count]++;
- }
- }
- for (int x = 0; x < arrayMax; ++x) {
- if (!quadDist[x]) {
- continue;
- }
- SkDebugf("%d %1.9g%%\n", x + 1, (double) quadDist[x] / tests * 100);
- }
- SkDebugf("\n");
- for (int x = 0; x < arrayMax; ++x) {
- for (int y = 0; y < sampleCount[x]; ++y) {
-#if TEST_AVERAGE_END_POINTS
- for (int w = 0; w < 2; ++w) {
- AVERAGE_END_POINTS = w;
-#else
- int w = 0;
-#endif
- SkDebugf("<div id=\"cubic%dx%d%s\">\n", x + 1, y, w ? "x" : "");
- const Cubic& cubic = samples[x][y];
- SkDebugf("{{%1.9g, %1.9g}, {%1.9g, %1.9g}, {%1.9g, %1.9g}, {%1.9g, %1.9g}},\n",
- cubic[0].x, cubic[0].y, cubic[1].x, cubic[1].y, cubic[2].x, cubic[2].y,
- cubic[3].x, cubic[3].y);
- SkTDArray<Quadratic> quads;
- double precision = calcPrecision(cubic);
- (void) cubic_to_quadratics(cubic, precision, quads);
- for (int z = 0; z < quads.count(); ++z) {
- const Quadratic& quad = quads[z];
- SkDebugf("{{%1.9g, %1.9g}, {%1.9g, %1.9g}, {%1.9g, %1.9g}},\n",
- quad[0].x, quad[0].y, quad[1].x, quad[1].y, quad[2].x, quad[2].y);
- }
- SkDebugf("</div>\n\n");
-#if TEST_AVERAGE_END_POINTS
- }
-#endif
- }
- }
- SkDebugf("</div>\n\n");
- SkDebugf("<script type=\"text/javascript\">\n\n");
- SkDebugf("var testDivs = [\n");
- for (int x = 0; x < arrayMax; ++x) {
- for (int y = 0; y < sampleCount[x]; ++y) {
-#if TEST_AVERAGE_END_POINTS
- for (int w = 0; w < 2; ++w) {
-#else
- int w = 0;
-#endif
- SkDebugf(" cubic%dx%d%s,\n", x + 1, y, w ? "x" : "");
-#if TEST_AVERAGE_END_POINTS
- }
-#endif
- }
- }
- SkDebugf("\n\n\n");
- SkDebugf("%s end\n", __FUNCTION__);
-}
« no previous file with comments | « experimental/Intersection/CubicToQuadratics.cpp ('k') | experimental/Intersection/CubicUtilities.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698