diff options
author | caryclark <caryclark@google.com> | 2016-10-20 08:32:18 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-20 08:32:18 -0700 |
commit | a35ab3e6e024d0b548ded26a2e3b8ecd838ead93 (patch) | |
tree | c009069f86b1129fcf5037ffc8e8fbf1b9ba010f /tests/PathOpsQuadIntersectionTest.cpp | |
parent | 65820db5e15201a3f30968420232d36c0ca89cd8 (diff) |
fix fuzzers
Many old pathops-related fuzz failures have built up while
the codebase was under a state a flux. Now that the code
is stable, address these failures.
Most of the CL plumbs the debug global state to downstream
routines so that, if the data is not trusted (ala fuzzed)
the function can safely exit without asserting.
TBR=reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2426173002
Review-Url: https://chromiumcodereview.appspot.com/2426173002
Diffstat (limited to 'tests/PathOpsQuadIntersectionTest.cpp')
-rw-r--r-- | tests/PathOpsQuadIntersectionTest.cpp | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/tests/PathOpsQuadIntersectionTest.cpp b/tests/PathOpsQuadIntersectionTest.cpp index be3d5a86d1..cb35944918 100644 --- a/tests/PathOpsQuadIntersectionTest.cpp +++ b/tests/PathOpsQuadIntersectionTest.cpp @@ -14,9 +14,13 @@ static void standardTestCases(skiatest::Reporter* reporter) { bool showSkipped = false; for (size_t index = 0; index < quadraticTests_count; ++index) { - const SkDQuad& quad1 = quadraticTests[index][0]; + const QuadPts& q1 = quadraticTests[index][0]; + SkDQuad quad1; + quad1.debugSet(q1.fPts); SkASSERT(ValidQuad(quad1)); - const SkDQuad& quad2 = quadraticTests[index][1]; + const QuadPts& q2 = quadraticTests[index][1]; + SkDQuad quad2; + quad2.debugSet(q2.fPts); SkASSERT(ValidQuad(quad2)); SkReduceOrder reduce1, reduce2; int order1 = reduce1.reduce(quad1); @@ -52,7 +56,7 @@ static void standardTestCases(skiatest::Reporter* reporter) { } } -static const SkDQuad testSet[] = { +static const QuadPts testSet[] = { {{{-0.001019871095195412636, -0.008523519150912761688}, {-0.005396408028900623322, -0.005396373569965362549}, {-0.02855382487177848816, -0.02855364233255386353}}}, {{{-0.004567248281091451645, -0.01482933573424816132}, {-0.01142475008964538574, -0.01140109263360500336}, {-0.02852955088019371033, -0.02847047336399555206}}}, @@ -326,9 +330,13 @@ static const SkDQuad testSet[] = { const size_t testSetCount = SK_ARRAY_COUNT(testSet); static void oneOffTest1(skiatest::Reporter* reporter, size_t outer, size_t inner) { - const SkDQuad& quad1 = testSet[outer]; + const QuadPts& q1 = testSet[outer]; + SkDQuad quad1; + quad1.debugSet(q1.fPts); SkASSERT(ValidQuad(quad1)); - const SkDQuad& quad2 = testSet[inner]; + const QuadPts& q2 = testSet[inner]; + SkDQuad quad2; + quad2.debugSet(q2.fPts); SkASSERT(ValidQuad(quad2)); SkIntersections intersections; intersections.intersect(quad1, quad2); @@ -358,7 +366,7 @@ static void oneOffTests(skiatest::Reporter* reporter) { } } -static const SkDQuad coincidentTestSet[] = { +static const QuadPts coincidentTestSet[] = { {{{4914.9990234375, 1523}, {4942.75146484375, 1523}, {4962.375, 1542.6239013671875}}}, {{{4962.3759765625, 1542.6239013671875}, {4942.75244140625, 1523}, {4915, 1523}}}, #if 0 @@ -374,9 +382,13 @@ static const SkDQuad coincidentTestSet[] = { static const int coincidentTestSetCount = (int) SK_ARRAY_COUNT(coincidentTestSet); static void coincidentTestOne(skiatest::Reporter* reporter, int test1, int test2) { - const SkDQuad& quad1 = coincidentTestSet[test1]; + const QuadPts& q1 = coincidentTestSet[test1]; + SkDQuad quad1; + quad1.debugSet(q1.fPts); SkASSERT(ValidQuad(quad1)); - const SkDQuad& quad2 = coincidentTestSet[test2]; + const QuadPts& q2 = coincidentTestSet[test2]; + SkDQuad quad2; + quad2.debugSet(q2.fPts); SkASSERT(ValidQuad(quad2)); SkIntersections intersections2; intersections2.intersect(quad1, quad2); @@ -398,9 +410,11 @@ static void coincidentTest(skiatest::Reporter* reporter) { } static void intersectionFinder(int test1, int test2) { - const SkDQuad& quad1 = testSet[test1]; - const SkDQuad& quad2 = testSet[test2]; - + const QuadPts& q1 = testSet[test1]; + const QuadPts& q2 = testSet[test2]; + SkDQuad quad1, quad2; + quad1.debugSet(q1.fPts); + quad2.debugSet(q2.fPts); double t1Seed = 0.5; double t2Seed = 0.8; double t1Step = 0.1; @@ -521,8 +535,12 @@ DEF_TEST(PathOpsQuadBinaryProfile, reporter) { int outer = 0; int inner = outer + 1; do { - const SkDQuad& quad1 = testSet[outer]; - const SkDQuad& quad2 = testSet[inner]; + const QuadPts& q1 = testSet[outer]; + SkDQuad quad1; + quad1.debugSet(q1.fPts); + const QuadPts& q2 = testSet[inner]; + SkDQuad quad2; + quad2.debugSet(q2.fPts); (void) intersections.intersect(quad1, quad2); REPORTER_ASSERT(reporter, intersections.used() >= 0); // make sure code isn't tossed inner += 2; @@ -531,8 +549,11 @@ DEF_TEST(PathOpsQuadBinaryProfile, reporter) { } for (int x = 0; x < 100; ++x) { for (size_t test = 0; test < quadraticTests_count; ++test) { - const SkDQuad& quad1 = quadraticTests[test][0]; - const SkDQuad& quad2 = quadraticTests[test][1]; + const QuadPts& q1 = quadraticTests[test][0]; + const QuadPts& q2 = quadraticTests[test][1]; + SkDQuad quad1, quad2; + quad1.debugSet(q1.fPts); + quad2.debugSet(q2.fPts); (void) intersections.intersect(quad1, quad2); REPORTER_ASSERT(reporter, intersections.used() >= 0); // make sure code isn't tossed } |