aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/PathOpsQuadIntersectionTest.cpp
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2016-10-20 08:32:18 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-10-20 08:32:18 -0700
commita35ab3e6e024d0b548ded26a2e3b8ecd838ead93 (patch)
treec009069f86b1129fcf5037ffc8e8fbf1b9ba010f /tests/PathOpsQuadIntersectionTest.cpp
parent65820db5e15201a3f30968420232d36c0ca89cd8 (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.cpp51
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
}