aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar Cary Clark <caryclark@google.com>2017-01-23 14:38:52 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-23 15:31:25 +0000
commit59d5a0e3f560da40e0ae7036a01d7d58ce3718d8 (patch)
tree55a3467bdbbda58dc30eca902d20130a2a20346d /tests
parentb07a01e6b9bd552bab12aabd48dc77a7562f4f97 (diff)
Revert "offset angle check edge in common"
This reverts commit d2eb581ebc8f8009e80cccccd74d5b341ef5bd5b. Reason for revert: broke Google3 MSAN run of dm Original change's description: > offset angle check edge in common > > When curves cross, their intersection points may be nearby, but not exactly the same. > Sort the angles formed by the crossing curves when all angles don't have the same > origin. > > This sets up the framework to solve test case that currently fail (e.g., joel6) but > does not fix all related test cases (e.g., joel9). > > All older existing test cases, including extended tests, pass. > > Rework the test framework to better report when tests expected to produce failing > results now pass. > > Add new point and vector operations to support offset angles. > > TBR=reed@google.com > BUG=skia:6041 > > Change-Id: I67c651ded0a25e99ad93d55d6a35109b3ee3698e > Reviewed-on: https://skia-review.googlesource.com/6624 > Commit-Queue: Cary Clark <caryclark@google.com> > Reviewed-by: Cary Clark <caryclark@google.com> > TBR=caryclark@google.com,reviews@skia.org # Not skipping CQ checks because original CL landed > 1 day ago. BUG=skia:6041 Change-Id: I43db0808522ac44aceeb4f70e296167ea84a3663 Reviewed-on: https://skia-review.googlesource.com/7373 Commit-Queue: Cary Clark <caryclark@google.com> Reviewed-by: Cary Clark <caryclark@google.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/PathOpsAngleTest.cpp61
-rw-r--r--tests/PathOpsChalkboardTest.cpp3
-rw-r--r--tests/PathOpsExtendedTest.cpp52
-rw-r--r--tests/PathOpsExtendedTest.h7
-rw-r--r--tests/PathOpsFuzz763Test.cpp3
-rw-r--r--tests/PathOpsIssue3651.cpp8
-rw-r--r--tests/PathOpsSimplifyFailTest.cpp269
-rw-r--r--tests/PathOpsSimplifyTest.cpp21
-rw-r--r--tests/skia_test.cpp7
9 files changed, 57 insertions, 374 deletions
diff --git a/tests/PathOpsAngleTest.cpp b/tests/PathOpsAngleTest.cpp
index a598aea949..d5285c8fbc 100644
--- a/tests/PathOpsAngleTest.cpp
+++ b/tests/PathOpsAngleTest.cpp
@@ -478,67 +478,6 @@ DEF_TEST(PathOpsAngleAfter, reporter) {
}
}
-static void offset_start(SkOpAngle* angle, const SkPoint* line, bool offsetStart) {
- SkDPoint* pt = angle->debugFirstPt();
- if (!offsetStart) {
- pt->fX = pt->fY = 0;
- return;
- }
- pt->fX = line[1].fX * 0.001f;
- pt->fY = line[1].fY * 0.001f;
-}
-
-// test if offset line edges return the same results as edges without offsets
-DEF_TEST(PathOpsOffsetLineAngle, reporter) {
- static SkPoint radialLines[][2] = {
- { {0, 0}, { 2, -1} }, { {0, 0}, { 2, -2} }, { {0, 0}, { 1, -2} }, { {0, 0}, { 0, -2} },
- { {0, 0}, {-1, -2} }, { {0, 0}, {-2, -2} }, { {0, 0}, {-2, -1} }, { {0, 0}, {-2, 0} },
- { {0, 0}, {-2, 1} }, { {0, 0}, {-2, 2} }, { {0, 0}, {-1, 2} }, { {0, 0}, { 0, 2} },
- { {0, 0}, { 1, 2} }, { {0, 0}, { 2, 2} }, { {0, 0}, { 2, 1} }, { {0, 0}, { 2, 0} },
- };
- SkChunkAlloc allocator(4096);
- SkOpContourHead contour;
- SkOpGlobalState state(&contour, &allocator SkDEBUGPARAMS(false) SkDEBUGPARAMS(nullptr));
- contour.init(&state, false, false);
- for (int lh = 0; lh < 16; ++lh) {
- for (int mid = 0; mid < 16; ++mid) {
- if (lh == mid) {
- continue;
- }
- for (int rh = 0; rh < 16; ++rh) {
- if (lh == rh || mid == rh) {
- continue;
- }
- allocator.reset();
- contour.reset();
- contour.addLine(radialLines[lh]);
- contour.addLine(radialLines[mid]);
- contour.addLine(radialLines[rh]);
- SkOpSegment* seg1 = contour.first();
- seg1->debugAddAngle(0, 1);
- SkOpSegment* seg2 = seg1->next();
- seg2->debugAddAngle(0, 1);
- SkOpSegment* seg3 = seg2->next();
- seg3->debugAddAngle(0, 1);
- SkOpAngle* angle1 = seg1->debugLastAngle();
- SkOpAngle* angle2 = seg2->debugLastAngle();
- SkOpAngle* angle3 = seg3->debugLastAngle();
- PathOpsAngleTester::SetNext(*angle1, *angle3);
- /* int expected = */ PathOpsAngleTester::After(*angle2, *angle1);
- for (int test = 1; test <= 8; ++test) {
- offset_start(angle1, radialLines[lh], test & 1);
- offset_start(angle2, radialLines[mid], test & 2);
- offset_start(angle3, radialLines[rh], test & 4);
- /* int found = */ PathOpsAngleTester::After(*angle2, *angle1);
-#if 0 // this test fails; haven't explored if this is a real bug or not
- REPORTER_ASSERT(reporter, expected == found);
-#endif
- }
- }
- }
- }
-}
-
void SkOpSegment::debugAddAngle(double startT, double endT) {
SkOpPtT* startPtT = startT == 0 ? fHead.ptT() : startT == 1 ? fTail.ptT()
: this->addT(startT);
diff --git a/tests/PathOpsChalkboardTest.cpp b/tests/PathOpsChalkboardTest.cpp
index acfa46f39b..8c74e7f98d 100644
--- a/tests/PathOpsChalkboardTest.cpp
+++ b/tests/PathOpsChalkboardTest.cpp
@@ -91,6 +91,9 @@ static void testChalkboard(PathOpsThreadState* data) {
}
static void chalkboard_threaded(skiatest::Reporter* reporter, const char* filename) {
+#if DEBUG_UNDER_DEVELOPMENT
+ return;
+#endif
initializeTests(reporter, "chalkboard");
PathOpsThreadedTestRunner testRunner(reporter);
SkRandom r;
diff --git a/tests/PathOpsExtendedTest.cpp b/tests/PathOpsExtendedTest.cpp
index 06fee80f5d..d70deb30fc 100644
--- a/tests/PathOpsExtendedTest.cpp
+++ b/tests/PathOpsExtendedTest.cpp
@@ -320,26 +320,21 @@ int comparePaths(skiatest::Reporter* reporter, const char* filename, const SkPat
static SkTDArray<SkPathOp> gTestOp;
-static void dumpPathOpFunction(const char* testName, const SkPath& a, const SkPath& b,
- const SkPathOp shapeOp) {
+static void showPathOpPath(const char* testName, const SkPath& one, const SkPath& two,
+ const SkPath& a, const SkPath& b, const SkPath& scaledOne, const SkPath& scaledTwo,
+ const SkPathOp shapeOp, const SkMatrix& scale) {
+ SkASSERT((unsigned) shapeOp < SK_ARRAY_COUNT(opStrs));
if (!testName) {
testName = "xOp";
}
SkDebugf("static void %s_%s(skiatest::Reporter* reporter, const char* filename) {\n",
testName, opSuffixes[shapeOp]);
+ *gTestOp.append() = shapeOp;
SkDebugf(" SkPath path, pathB;\n");
SkPathOpsDebug::ShowOnePath(a, "path", false);
SkPathOpsDebug::ShowOnePath(b, "pathB", false);
SkDebugf(" testPathOp(reporter, path, pathB, %s, filename);\n", opStrs[shapeOp]);
SkDebugf("}\n");
-}
-
-static void showPathOpPath(const char* testName, const SkPath& one, const SkPath& two,
- const SkPath& a, const SkPath& b, const SkPath& scaledOne, const SkPath& scaledTwo,
- const SkPathOp shapeOp, const SkMatrix& scale) {
- SkASSERT((unsigned) shapeOp < SK_ARRAY_COUNT(opStrs));
- *gTestOp.append() = shapeOp;
- dumpPathOpFunction(testName, a, b, shapeOp);
drawAsciiPaths(scaledOne, scaledTwo, true);
}
@@ -349,15 +344,11 @@ static int comparePaths(skiatest::Reporter* reporter, const char* testName, cons
const SkPath& scaledOne, const SkPath& two, const SkPath& scaledTwo, SkBitmap& bitmap,
const SkPath& a, const SkPath& b, const SkPathOp shapeOp, const SkMatrix& scale,
ExpectMatch expectMatch) {
- if (ExpectMatch::kFlaky == expectMatch) {
- return 0; // fuzz data may cause asserts in region generating code, so don't try
- }
int errors2x2;
const int MAX_ERRORS = 8;
(void) pathsDrawTheSame(bitmap, scaledOne, scaledTwo, errors2x2);
if (ExpectMatch::kNo == expectMatch) {
if (errors2x2 < MAX_ERRORS) {
- SkDebugf("%s failing test %s now succeeds\n", __FUNCTION__, testName);
REPORTER_ASSERT(reporter, 0);
}
return 0;
@@ -514,11 +505,6 @@ bool testSimplifyCheck(skiatest::Reporter* reporter, const SkPath& path, const c
ExpectSuccess::kYes : ExpectSuccess::kNo, SkipAssert::kNo, ExpectMatch::kNo);
}
-bool testSimplifyTry(skiatest::Reporter* reporter, const SkPath& path, const char* filename) {
- return inner_simplify(reporter, path, filename, ExpectSuccess::kYes, SkipAssert::kNo,
- ExpectMatch::kNo);
-}
-
#if DEBUG_SHOW_TEST_NAME
static void showName(const SkPath& a, const SkPath& b, const SkPathOp shapeOp) {
SkDebugf("\n");
@@ -539,23 +525,18 @@ static bool innerPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkP
SkDEBUGPARAMS(testName))) {
if (ExpectSuccess::kYes == expectSuccess) {
SkDebugf("%s %s did not expect failure\n", __FUNCTION__, testName);
- dumpPathOpFunction(testName, a, b, shapeOp);
REPORTER_ASSERT(reporter, 0);
}
return false;
} else {
if (ExpectSuccess::kNo == expectSuccess) {
SkDebugf("%s %s unexpected success\n", __FUNCTION__, testName);
- dumpPathOpFunction(testName, a, b, shapeOp);
REPORTER_ASSERT(reporter, 0);
}
}
if (!reporter->verbose()) {
return true;
}
- if (ExpectMatch::kFlaky == expectMatch) {
- return true; // fuzzy data may assert in region construction: see bug.skia.org/6129
- }
SkPath pathOut, scaledPathOut;
SkRegion rgnA, rgnB, openClip, rgnOut;
openClip.setRect(-16000, -16000, 16000, 16000);
@@ -598,18 +579,29 @@ bool testPathOpCheck(skiatest::Reporter* reporter, const SkPath& a, const SkPath
ExpectSuccess::kYes : ExpectSuccess::kNo, SkipAssert::kNo, ExpectMatch::kNo);
}
-bool testPathOpTry(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
- const SkPathOp shapeOp, const char* testName) {
- return innerPathOp(reporter, a, b, shapeOp, testName,
- ExpectSuccess::kYes, SkipAssert::kNo, ExpectMatch::kNo);
-}
-
bool testPathOpFuzz(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
const SkPathOp shapeOp, const char* testName) {
return innerPathOp(reporter, a, b, shapeOp, testName, ExpectSuccess::kFlaky, SkipAssert::kYes,
ExpectMatch::kFlaky);
}
+bool testPathOpFail(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
+ const SkPathOp shapeOp, const char* testName) {
+#if DEBUG_SHOW_TEST_NAME
+ showName(a, b, shapeOp);
+#endif
+ SkPath orig;
+ orig.lineTo(54, 43);
+ SkPath out = orig;
+ if (Op(a, b, shapeOp, &out) ) {
+ SkDebugf("%s test is expected to fail\n", __FUNCTION__);
+ REPORTER_ASSERT(reporter, 0);
+ return false;
+ }
+ SkASSERT(out == orig);
+ return true;
+}
+
SK_DECLARE_STATIC_MUTEX(gMutex);
void initializeTests(skiatest::Reporter* reporter, const char* test) {
diff --git a/tests/PathOpsExtendedTest.h b/tests/PathOpsExtendedTest.h
index 7c8ceb1529..9f8b0aeaac 100644
--- a/tests/PathOpsExtendedTest.h
+++ b/tests/PathOpsExtendedTest.h
@@ -36,18 +36,17 @@ extern bool testPathOp(skiatest::Reporter* reporter, const SkPath& a, const SkPa
const SkPathOp , const char* testName);
extern bool testPathOpCheck(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
const SkPathOp , const char* testName, bool checkFail);
+extern bool testPathOpFail(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
+ const SkPathOp, const char* testName);
extern bool testPathOpFuzz(skiatest::Reporter* reporter, const SkPath& a,
const SkPath& b, const SkPathOp , const char* testName);
-extern bool testPathOpTry(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
- const SkPathOp , const char* testName);
extern bool testSimplify(SkPath& path, bool useXor, SkPath& out, PathOpsThreadState& state,
const char* pathStr);
extern bool testSimplify(skiatest::Reporter* reporter, const SkPath& path, const char* filename);
extern bool testSimplifyCheck(skiatest::Reporter* reporter, const SkPath& path,
const char* filename, bool checkFail);
extern bool testSimplifyFuzz(skiatest::Reporter* reporter, const SkPath& path,
- const char* filename);
-extern bool testSimplifyTry(skiatest::Reporter* reporter, const SkPath& path, const char* filename);
+ const char* filename);
void initializeTests(skiatest::Reporter* reporter, const char* testName);
diff --git a/tests/PathOpsFuzz763Test.cpp b/tests/PathOpsFuzz763Test.cpp
index 996f4e70e7..90d5723774 100644
--- a/tests/PathOpsFuzz763Test.cpp
+++ b/tests/PathOpsFuzz763Test.cpp
@@ -2092,7 +2092,8 @@ path.quadTo(SkBits2Float(0x42240000), SkBits2Float(0x41ed7d86), SkBits2Float(0x4
path.close();
SkPath path2(path);
- testPathOpTry(reporter, path1, path2, (SkPathOp) 2, filename);
+ // DEBUG_UNDER_DEVELOPMENT fuzz763_1026368 disable expectation check for now
+ testPathOpCheck(reporter, path1, path2, (SkPathOp) 2, filename, !SkOpGlobalState::DebugRunFail());
}
static void fuzz763_5485218(skiatest::Reporter* reporter, const char* filename) {
diff --git a/tests/PathOpsIssue3651.cpp b/tests/PathOpsIssue3651.cpp
index dc93657d08..bd4ed2d9ab 100644
--- a/tests/PathOpsIssue3651.cpp
+++ b/tests/PathOpsIssue3651.cpp
@@ -472,7 +472,9 @@ path.close();
static void issue3651_1a(skiatest::Reporter* reporter, const char* filename) {
SkPath path = path1_a();
SkPath pathB = path2_a();
- testPathOpTry(reporter, path, pathB, SkPathOp::kUnion_SkPathOp, filename);
+ // DEBUG_UNDER_DEVELOPMENT issue3651_1a disable expectation check for now
+ testPathOpCheck(reporter, path, pathB, SkPathOp::kUnion_SkPathOp, filename,
+ !SkOpGlobalState::DebugRunFail());
}
static SkPath path3() {
@@ -1202,7 +1204,9 @@ path.close();
static void issue3651_1(skiatest::Reporter* reporter, const char* filename) {
SkPath path = path1();
SkPath pathB = path2();
- testPathOpTry(reporter, path, pathB, SkPathOp::kUnion_SkPathOp, filename);
+ // DEBUG_UNDER_DEVELOPMENT issue3651_1 disable expectation check for now
+ testPathOpCheck(reporter, path, pathB, SkPathOp::kUnion_SkPathOp, filename,
+ !SkOpGlobalState::DebugRunFail());
}
static void issue3651_2(skiatest::Reporter* reporter, const char* filename) {
diff --git a/tests/PathOpsSimplifyFailTest.cpp b/tests/PathOpsSimplifyFailTest.cpp
index 44bb50ce94..b6f210e8ea 100644
--- a/tests/PathOpsSimplifyFailTest.cpp
+++ b/tests/PathOpsSimplifyFailTest.cpp
@@ -215,278 +215,9 @@ path.close();
testSimplifyFuzz(reporter, path, filename);
}
-static void fuzz_twister(skiatest::Reporter* reporter, const char* filename) {
- SkPath path;
- path.setFillType((SkPath::FillType) 0);
-path.moveTo(0, 600);
-path.lineTo(3.35544e+07f, 600);
-path.lineTo(3.35544e+07f, 0);
-path.lineTo(0, 0);
-path.lineTo(0, 600);
-path.close();
-path.moveTo(63, 600);
-path.lineTo(3.35545e+07f, 600);
-path.lineTo(3.35545e+07f, 0);
-path.lineTo(63, 0);
-path.lineTo(63, 600);
-path.close();
-path.moveTo(93, 600);
-path.lineTo(3.35545e+07f, 600);
-path.lineTo(3.35545e+07f, 0);
-path.lineTo(93, 0);
-path.lineTo(93, 600);
-path.close();
-path.moveTo(123, 600);
-path.lineTo(3.35546e+07f, 600);
-path.lineTo(3.35546e+07f, 0);
-path.lineTo(123, 0);
-path.lineTo(123, 600);
-path.close();
- testSimplifyFuzz(reporter, path, filename);
-}
-
-static void fuzz_twister2(skiatest::Reporter* reporter, const char* filename) {
- SkPath path;
-
-path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x44160000)); // 0, 600
-path.lineTo(SkBits2Float(0x4bfffffe), SkBits2Float(0x44160000)); // 3.35544e+07f, 600
-path.lineTo(SkBits2Float(0x4bfffffe), SkBits2Float(0x00000000)); // 3.35544e+07f, 0
-path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
-path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x44160000)); // 0, 600
-path.close();
-
-path.moveTo(SkBits2Float(0x427c0000), SkBits2Float(0x00000000)); // 63, 0
-path.lineTo(SkBits2Float(0x4c00000f), SkBits2Float(0x00000000)); // 3.35545e+07f, 0
-path.lineTo(SkBits2Float(0x4c00000f), SkBits2Float(0x00000000)); // 3.35545e+07f, 0
-path.lineTo(SkBits2Float(0x427c0000), SkBits2Float(0x00000000)); // 63, 0
-path.close();
-
-path.moveTo(SkBits2Float(0x42ba0000), SkBits2Float(0x00000000)); // 93, 0
-path.lineTo(SkBits2Float(0x4c000016), SkBits2Float(0x00000000)); // 3.35545e+07f, 0
-path.lineTo(SkBits2Float(0x4c000016), SkBits2Float(0x00000000)); // 3.35545e+07f, 0
-path.lineTo(SkBits2Float(0x42ba0000), SkBits2Float(0x00000000)); // 93, 0
-path.close();
-
-path.moveTo(SkBits2Float(0x42f60000), SkBits2Float(0x00000000)); // 123, 0
-path.lineTo(SkBits2Float(0x4c00001e), SkBits2Float(0x00000000)); // 3.35546e+07f, 0
-path.lineTo(SkBits2Float(0x4c00001e), SkBits2Float(0x00000000)); // 3.35546e+07f, 0
-path.lineTo(SkBits2Float(0x42f60000), SkBits2Float(0x00000000)); // 123, 0
-path.close();
-
- testSimplifyFuzz(reporter, path, filename);
-}
-
-static void fuzz994s_11(skiatest::Reporter* reporter, const char* filename) {
- SkPath path;
- path.setFillType((SkPath::FillType) 0);
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.close();
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.close();
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x42b40000)); // 110, 90
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x41f00000)); // 110, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.close();
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x46ff4c00), SkBits2Float(0x41f00000)); // 32678, 30
-path.lineTo(SkBits2Float(0x46ff4c00), SkBits2Float(0x41f00000)); // 32678, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.close();
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x4c000006)); // 10, 3.35545e+07f
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x4c000006)); // 110, 3.35545e+07f
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x41f00000)); // 110, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x4c000006)); // 10, 3.35545e+07f
-path.close();
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x439d8000)); // 10, 315
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x439d8000)); // 110, 315
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x437f0000)); // 110, 255
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x437f0000)); // 10, 255
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x439d8000)); // 10, 315
-path.close();
-path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x42700000)); // 0, 60
-path.lineTo(SkBits2Float(0x42c80000), SkBits2Float(0x42700000)); // 100, 60
-path.lineTo(SkBits2Float(0x42c80000), SkBits2Float(0x00000000)); // 100, 0
-path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0
-path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x42700000)); // 0, 60
-path.close();
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x42b40000)); // 110, 90
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x41f00000)); // 110, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.close();
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x4c000006)); // 10, 3.35545e+07f
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x4c000006)); // 110, 3.35545e+07f
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x41f00000)); // 110, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x4c000006)); // 10, 3.35545e+07f
-path.close();
-path.moveTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x42b40000)); // 110, 90
-path.lineTo(SkBits2Float(0x42dc0000), SkBits2Float(0x41f00000)); // 110, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
-path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
-path.close();
-
- testSimplifyFuzz(reporter, path, filename);
-}
-
-static void fuzz994s_3414(skiatest::Reporter* reporter, const char* filename) {
- SkPath path;
- path.setFillType((SkPath::FillType) 0);
-path.moveTo(SkBits2Float(0x42c80000), SkBits2Float(0x42480000)); // 100, 50
-path.conicTo(SkBits2Float(0x42c80000), SkBits2Float(0x00000000), SkBits2Float(0x42480000), SkBits2Float(0x00000000), SkBits2Float(0x3f3504f3)); // 100, 0, 50, 0, 0.707107f
-path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3)); // 0, 0, 0, 50, 0.707107f
-path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x42c80000), SkBits2Float(0x42480000), SkBits2Float(0x42c80000), SkBits2Float(0x3f3504f3)); // 0, 100, 50, 100, 0.707107f
-path.conicTo(SkBits2Float(0x42c80000), SkBits2Float(0x42c80000), SkBits2Float(0x42c80000), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3)); // 100, 100, 100, 50, 0.707107f
-path.close();
-path.moveTo(SkBits2Float(0x42c84964), SkBits2Float(0x42480000)); // 100.143f, 50
-path.conicTo(SkBits2Float(0x42c84964), SkBits2Float(0x00000000), SkBits2Float(0x424892c8), SkBits2Float(0x00000000), SkBits2Float(0x3f3504f3)); // 100.143f, 0, 50.1433f, 0, 0.707107f
-path.conicTo(SkBits2Float(0x3e12c788), SkBits2Float(0x00000000), SkBits2Float(0x3e12c788), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3)); // 0.143339f, 0, 0.143339f, 50, 0.707107f
-path.conicTo(SkBits2Float(0x3e12c788), SkBits2Float(0x42c80000), SkBits2Float(0x424892c8), SkBits2Float(0x42c80000), SkBits2Float(0x3f3504f3)); // 0.143339f, 100, 50.1433f, 100, 0.707107f
-path.conicTo(SkBits2Float(0x42c84964), SkBits2Float(0x42c80000), SkBits2Float(0x42c84964), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3)); // 100.143f, 100, 100.143f, 50, 0.707107f
-path.close();
-path.moveTo(SkBits2Float(0x42c80000), SkBits2Float(0x42480000)); // 100, 50
-path.conicTo(SkBits2Float(0x42c80000), SkBits2Float(0x00000000), SkBits2Float(0x42480000), SkBits2Float(0x00000000), SkBits2Float(0x3f3504f3)); // 100, 0, 50, 0, 0.707107f
-path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x00000000), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3)); // 0, 0, 0, 50, 0.707107f
-path.conicTo(SkBits2Float(0x00000000), SkBits2Float(0x42c80000), SkBits2Float(0x42480000), SkBits2Float(0x42c80000), SkBits2Float(0x3f3504f3)); // 0, 100, 50, 100, 0.707107f
-path.conicTo(SkBits2Float(0x42c80000), SkBits2Float(0x42c80000), SkBits2Float(0x42c80000), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3)); // 100, 100, 100, 50, 0.707107f
-path.close();
-path.moveTo(SkBits2Float(0x4c00006b), SkBits2Float(0x424c0000)); // 3.35549e+07f, 51
-path.conicTo(SkBits2Float(0x4c00006b), SkBits2Float(0xcbffffe5), SkBits2Float(0x43d6e720), SkBits2Float(0xcbffffe5), SkBits2Float(0x3f3504f3)); // 3.35549e+07f, -3.35544e+07f, 429.806f, -3.35544e+07f, 0.707107f
-path.conicTo(SkBits2Float(0xcbffff28), SkBits2Float(0xcbffffe5), SkBits2Float(0xcbffff28), SkBits2Float(0x424c0000), SkBits2Float(0x3f3504f3)); // -3.3554e+07f, -3.35544e+07f, -3.3554e+07f, 51, 0.707107f
-path.conicTo(SkBits2Float(0xcbffff28), SkBits2Float(0x4c00000c), SkBits2Float(0x43d6e720), SkBits2Float(0x4c00000c), SkBits2Float(0x3f3504f3)); // -3.3554e+07f, 3.35545e+07f, 429.806f, 3.35545e+07f, 0.707107f
-path.conicTo(SkBits2Float(0x4c00006b), SkBits2Float(0x4c00000c), SkBits2Float(0x4c00006b), SkBits2Float(0x424c0000), SkBits2Float(0x3f3504f3)); // 3.35549e+07f, 3.35545e+07f, 3.35549e+07f, 51, 0.707107f
-path.close();
-path.moveTo(SkBits2Float(0x43ef6720), SkBits2Float(0x42480000)); // 478.806f, 50
-path.conicTo(SkBits2Float(0x43ef6720), SkBits2Float(0x00000000), SkBits2Float(0x43d66720), SkBits2Float(0x00000000), SkBits2Float(0x3f3504f3)); // 478.806f, 0, 428.806f, 0, 0.707107f
-path.conicTo(SkBits2Float(0x43bd6720), SkBits2Float(0x00000000), SkBits2Float(0x43bd6720), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3)); // 378.806f, 0, 378.806f, 50, 0.707107f
-path.conicTo(SkBits2Float(0x43bd6720), SkBits2Float(0x42c80000), SkBits2Float(0x43d66720), SkBits2Float(0x42c80000), SkBits2Float(0x3f3504f3)); // 378.806f, 100, 428.806f, 100, 0.707107f
-path.conicTo(SkBits2Float(0x43ef6720), SkBits2Float(0x42c80000), SkBits2Float(0x43ef6720), SkBits2Float(0x42480000), SkBits2Float(0x3f3504f3)); // 478.806f, 100, 478.806f, 50, 0.707107f
-path.close();
-
- testSimplify(reporter, path, filename);
-}
-
-static void fuzz763_4713_b(skiatest::Reporter* reporter, const char* filename) {
- SkPath path;
- path.setFillType((SkPath::FillType) 0);
-path.moveTo(SkBits2Float(0x42240000), SkBits2Float(0x42040000));
-path.quadTo(SkBits2Float(0x42240000), SkBits2Float(0x4211413d), SkBits2Float(0x421aa09e), SkBits2Float(0x421aa09e));
-path.quadTo(SkBits2Float(0x4211413d), SkBits2Float(0x42240000), SkBits2Float(0x42040000), SkBits2Float(0x42240000));
-path.quadTo(SkBits2Float(0x41ed7d86), SkBits2Float(0x42240000), SkBits2Float(0x41dabec3), SkBits2Float(0x421aa09e));
-path.quadTo(SkBits2Float(0x41c80000), SkBits2Float(0x4211413d), SkBits2Float(0x41c80000), SkBits2Float(0x42040000));
-path.quadTo(SkBits2Float(0x41c80000), SkBits2Float(0x41ed7d86), SkBits2Float(0x41dabec3), SkBits2Float(0x41dabec3));
-path.quadTo(SkBits2Float(0x41ed7d86), SkBits2Float(0x41c80000), SkBits2Float(0x42040000), SkBits2Float(0x41c80000));
-path.quadTo(SkBits2Float(0x4211413d), SkBits2Float(0x41c80000), SkBits2Float(0x421aa09e), SkBits2Float(0x41dabec3));
-path.quadTo(SkBits2Float(0x42240000), SkBits2Float(0x41ed7d86), SkBits2Float(0x42240000), SkBits2Float(0x42040000));
-path.close();
-
-path.moveTo(SkBits2Float(0x4204f72e), SkBits2Float(0x41c56cd2));
-path.quadTo(SkBits2Float(0x42123842), SkBits2Float(0x41c52adf), SkBits2Float(0x421baed7), SkBits2Float(0x41d7bac6));
-path.quadTo(SkBits2Float(0x4225256d), SkBits2Float(0x41ea4aad), SkBits2Float(0x42254667), SkBits2Float(0x4202666b));
-path.quadTo(SkBits2Float(0x42256760), SkBits2Float(0x420fa77f), SkBits2Float(0x421c1f6c), SkBits2Float(0x42191e14));
-path.quadTo(SkBits2Float(0x421bff97), SkBits2Float(0x42193e89), SkBits2Float(0x421bdf6b), SkBits2Float(0x42195eb8));
-path.quadTo(SkBits2Float(0x421bbff6), SkBits2Float(0x42197f32), SkBits2Float(0x421ba03b), SkBits2Float(0x42199f57));
-path.quadTo(SkBits2Float(0x421b605e), SkBits2Float(0x4219e00a), SkBits2Float(0x421b1fa8), SkBits2Float(0x421a1f22));
-path.quadTo(SkBits2Float(0x421ae0f1), SkBits2Float(0x421a604b), SkBits2Float(0x421aa09e), SkBits2Float(0x421aa09e));
-path.quadTo(SkBits2Float(0x4211413d), SkBits2Float(0x42240000), SkBits2Float(0x42040000), SkBits2Float(0x42240000));
-path.quadTo(SkBits2Float(0x41ed7d86), SkBits2Float(0x42240000), SkBits2Float(0x41dabec3), SkBits2Float(0x421aa09e));
-path.quadTo(SkBits2Float(0x41c80000), SkBits2Float(0x4211413d), SkBits2Float(0x41c80000), SkBits2Float(0x42040000));
-path.quadTo(SkBits2Float(0x41c80000), SkBits2Float(0x41ed7d86), SkBits2Float(0x41dabec3), SkBits2Float(0x41dabec3));
-path.quadTo(SkBits2Float(0x41db19b1), SkBits2Float(0x41da63d5), SkBits2Float(0x41db755b), SkBits2Float(0x41da0a9b));
-path.quadTo(SkBits2Float(0x41dbce01), SkBits2Float(0x41d9ae59), SkBits2Float(0x41dc285e), SkBits2Float(0x41d952ce));
-path.quadTo(SkBits2Float(0x41dc55b6), SkBits2Float(0x41d924df), SkBits2Float(0x41dc82cd), SkBits2Float(0x41d8f7cd));
-path.quadTo(SkBits2Float(0x41dcaf1e), SkBits2Float(0x41d8ca01), SkBits2Float(0x41dcdc4c), SkBits2Float(0x41d89bf0));
-path.quadTo(SkBits2Float(0x41ef6c33), SkBits2Float(0x41c5aec5), SkBits2Float(0x4204f72e), SkBits2Float(0x41c56cd2));
-path.close();
-testSimplify(reporter, path, filename);
-}
-
-static void fuzz864a(skiatest::Reporter* reporter,const char* filename) {
- SkPath path;
- path.moveTo(10, 90);
- path.lineTo(10, 90);
- path.lineTo(10, 30);
- path.lineTo(10, 30);
- path.lineTo(10, 90);
- path.close();
- path.moveTo(10, 90);
- path.lineTo(10, 90);
- path.lineTo(10, 30);
- path.lineTo(10, 30);
- path.lineTo(10, 90);
- path.close();
- path.moveTo(10, 90);
- path.lineTo(110, 90);
- path.lineTo(110, 30);
- path.lineTo(10, 30);
- path.lineTo(10, 90);
- path.close();
- path.moveTo(10, 30);
- path.lineTo(32678, 30);
- path.lineTo(32678, 30);
- path.lineTo(10, 30);
- path.close();
- path.moveTo(10, 3.35545e+07f);
- path.lineTo(110, 3.35545e+07f);
- path.lineTo(110, 30);
- path.lineTo(10, 30);
- path.lineTo(10, 3.35545e+07f);
- path.close();
- path.moveTo(10, 315);
- path.lineTo(110, 315);
- path.lineTo(110, 255);
- path.lineTo(10, 255);
- path.lineTo(10, 315);
- path.close();
- path.moveTo(0, 60);
- path.lineTo(100, 60);
- path.lineTo(100, 0);
- path.lineTo(0, 0);
- path.lineTo(0, 60);
- path.close();
- path.moveTo(10, 90);
- path.lineTo(110, 90);
- path.lineTo(110, 30);
- path.lineTo(10, 30);
- path.lineTo(10, 90);
- path.close();
- path.moveTo(10, 3.35545e+07f);
- path.lineTo(110, 3.35545e+07f);
- path.lineTo(110, 30);
- path.lineTo(10, 30);
- path.lineTo(10, 3.35545e+07f);
- path.close();
- path.moveTo(10, 90);
- path.lineTo(110, 90);
- path.lineTo(110, 30);
- path.lineTo(10, 30);
- path.lineTo(10, 90);
- path.close();
- testSimplifyFuzz(reporter, path, filename);
-}
-
#define TEST(test) test(reporter, #test)
DEF_TEST(PathOpsSimplifyFail, reporter) {
- TEST(fuzz864a);
- TEST(fuzz763_4713_b);
- TEST(fuzz994s_3414);
- TEST(fuzz994s_11);
- TEST(fuzz_twister2);
- TEST(fuzz_twister);
TEST(fuzz763_2);
TEST(fuzz763_1);
TEST(fuzz_x2);
diff --git a/tests/PathOpsSimplifyTest.cpp b/tests/PathOpsSimplifyTest.cpp
index 7daa5e0d5f..2de67ff22f 100644
--- a/tests/PathOpsSimplifyTest.cpp
+++ b/tests/PathOpsSimplifyTest.cpp
@@ -4871,7 +4871,7 @@ static void fuzz864a(skiatest::Reporter* reporter,const char* filename) {
path.lineTo(10, 30);
path.lineTo(10, 90);
path.close();
- testSimplifyFuzz(reporter, path, filename);
+ testSimplify(reporter, path, filename);
}
static void cr514118(skiatest::Reporter* reporter,const char* filename) {
@@ -4954,7 +4954,7 @@ path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x41f00000)); // 10, 30
path.lineTo(SkBits2Float(0x41200000), SkBits2Float(0x42b40000)); // 10, 90
path.close();
- testSimplifyFuzz(reporter, path, filename);
+ testSimplify(reporter, path, filename);
}
static void fuzz994s_3414(skiatest::Reporter* reporter, const char* filename) {
@@ -5021,7 +5021,7 @@ path.lineTo(3.35546e+07f, 0);
path.lineTo(123, 0);
path.lineTo(123, 600);
path.close();
- testSimplifyFuzz(reporter, path, filename);
+ testSimplify(reporter, path, filename);
}
static void fuzz_twister2(skiatest::Reporter* reporter, const char* filename) {
@@ -6919,6 +6919,8 @@ testSimplify(reporter, path, filename);
}
static void joel_9(skiatest::Reporter* reporter, const char* filename) {
+#if DEBUG_UNDER_DEVELOPMENT
+// fails with image mismatch
SkPath path;
path.moveTo(SkBits2Float(0x4310dbe7), SkBits2Float(0x438e9604)); // 144.859f, 285.172f
path.lineTo(SkBits2Float(0x4310dbe7), SkBits2Float(0x438e9604)); // 144.859f, 285.172f
@@ -6971,10 +6973,13 @@ path.lineTo(SkBits2Float(0x430bbdf4), SkBits2Float(0x43898f1a)); // 139.742f, 2
path.cubicTo(SkBits2Float(0x430fefe0), SkBits2Float(0x438a3f1a), SkBits2Float(0x43123811), SkBits2Float(0x438c7d0e), SkBits2Float(0x4310dbe8), SkBits2Float(0x438e9624)); // 143.937f, 276.493f, 146.219f, 280.977f, 144.859f, 285.173f
path.lineTo(SkBits2Float(0x430d67f0), SkBits2Float(0x438e070a)); // 141.406f, 284.055f
path.close();
-testSimplifyTry(reporter, path, filename);
+testSimplify(reporter, path, filename);
+#endif
}
static void joel_10(skiatest::Reporter* reporter, const char* filename) {
+#if DEBUG_UNDER_DEVELOPMENT
+// fails with image mismatch
SkPath path;
path.moveTo(SkBits2Float(0x440fc979), SkBits2Float(0x43d88000)); // 575.148f, 433
path.lineTo(SkBits2Float(0x440fc979), SkBits2Float(0x43d88000)); // 575.148f, 433
@@ -7027,11 +7032,12 @@ path.lineTo(SkBits2Float(0x44111106), SkBits2Float(0x43dd86ea)); // 580.266f, 4
path.cubicTo(SkBits2Float(0x4410048b), SkBits2Float(0x43dcd7f0), SkBits2Float(0x440f720c), SkBits2Float(0x43da99dc), SkBits2Float(0x440fc989), SkBits2Float(0x43d87fe0)); // 576.071f, 441.687f, 573.782f, 437.202f, 575.149f, 432.999f
path.lineTo(SkBits2Float(0x4410a687), SkBits2Float(0x43d91000)); // 578.602f, 434.125f
path.close();
-// DEBUG_UNDER_DEVELOPMENT fails with angle instability
-testSimplifyFuzz(reporter, path, filename);
+testSimplify(reporter, path, filename);
+#endif
}
static void joel_11(skiatest::Reporter* reporter, const char* filename) {
+#if DEBUG_UNDER_DEVELOPMENT
// fails with image mismatch
SkPath path;
path.moveTo(SkBits2Float(0x43c9d000), SkBits2Float(0x4411977d)); // 403.625f, 582.367f
@@ -7086,7 +7092,8 @@ path.lineTo(SkBits2Float(0x43c6bd0e), SkBits2Float(0x4413f591)); // 397.477f, 5
path.cubicTo(SkBits2Float(0x43c64810), SkBits2Float(0x4412e116), SkBits2Float(0x43c7a70a), SkBits2Float(0x4411d28f), SkBits2Float(0x43c9d000), SkBits2Float(0x4411978d)); // 396.563f, 587.517f, 399.305f, 583.29f, 403.625f, 582.368f
path.lineTo(SkBits2Float(0x43ca3106), SkBits2Float(0x44127b02)); // 404.383f, 585.922f
path.close();
-testSimplifyFuzz(reporter, path, filename);
+testSimplify(reporter, path, filename);
+#endif
}
static void make_joel_12(SkPath& path) {
diff --git a/tests/skia_test.cpp b/tests/skia_test.cpp
index 969c1ff54a..4cb55d0853 100644
--- a/tests/skia_test.cpp
+++ b/tests/skia_test.cpp
@@ -29,6 +29,7 @@ using namespace sk_gpu_test;
DEFINE_bool2(dumpOp, d, false, "dump the pathOps to a file to recover mid-crash.");
DEFINE_bool2(extendedTest, x, false, "run extended tests for pathOps.");
+DEFINE_bool2(runFail, f, false, "check for success on tests known to fail.");
DEFINE_bool2(verifyOp, y, false, "compare the pathOps result against a region.");
#if DEBUG_COIN
@@ -140,6 +141,7 @@ int test_main() {
SkPathOpsDebug::gDumpOp = FLAGS_dumpOp;
SkPathOpsDebug::gVerifyOp = FLAGS_verifyOp;
#endif
+ SkPathOpsDebug::gRunFail = FLAGS_runFail;
SkPathOpsDebug::gVeryVerbose = FLAGS_veryVerbose;
SetupCrashHandler();
@@ -169,6 +171,11 @@ int test_main() {
if (FLAGS_dumpOp) {
header.appendf(" -d");
}
+#ifdef SK_DEBUG
+ if (FLAGS_runFail) {
+ header.appendf(" -f");
+ }
+#endif
if (FLAGS_verbose) {
header.appendf(" -v");
}