diff options
author | Cary Clark <caryclark@google.com> | 2017-01-23 14:38:52 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-23 15:31:25 +0000 |
commit | 59d5a0e3f560da40e0ae7036a01d7d58ce3718d8 (patch) | |
tree | 55a3467bdbbda58dc30eca902d20130a2a20346d /tests | |
parent | b07a01e6b9bd552bab12aabd48dc77a7562f4f97 (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.cpp | 61 | ||||
-rw-r--r-- | tests/PathOpsChalkboardTest.cpp | 3 | ||||
-rw-r--r-- | tests/PathOpsExtendedTest.cpp | 52 | ||||
-rw-r--r-- | tests/PathOpsExtendedTest.h | 7 | ||||
-rw-r--r-- | tests/PathOpsFuzz763Test.cpp | 3 | ||||
-rw-r--r-- | tests/PathOpsIssue3651.cpp | 8 | ||||
-rw-r--r-- | tests/PathOpsSimplifyFailTest.cpp | 269 | ||||
-rw-r--r-- | tests/PathOpsSimplifyTest.cpp | 21 | ||||
-rw-r--r-- | tests/skia_test.cpp | 7 |
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"); } |