| Index: tests/PathOpsCubicIntersectionTest.cpp
|
| diff --git a/tests/PathOpsCubicIntersectionTest.cpp b/tests/PathOpsCubicIntersectionTest.cpp
|
| index 45a96509aa2603b9fe0a17662a1147c221c2504f..a424c50c5567b19273a6e0b10bf244862cb4ab78 100644
|
| --- a/tests/PathOpsCubicIntersectionTest.cpp
|
| +++ b/tests/PathOpsCubicIntersectionTest.cpp
|
| @@ -683,3 +683,72 @@
|
| if (false) CubicIntersection_IntersectionFinder();
|
| if (false) CubicIntersection_RandTest(reporter);
|
| }
|
| +
|
| +static void binaryTest(const SkDCubic& cubic1, const SkDCubic& cubic2,
|
| + skiatest::Reporter* reporter) {
|
| + SkASSERT(ValidCubic(cubic1));
|
| + SkASSERT(ValidCubic(cubic2));
|
| + SkIntersections intersections;
|
| + SkReduceOrder reduce1, reduce2;
|
| + int order1 = reduce1.reduce(cubic1, SkReduceOrder::kNo_Quadratics);
|
| + int order2 = reduce2.reduce(cubic2, SkReduceOrder::kNo_Quadratics);
|
| + if (order1 == 4 && order2 == 4) {
|
| + intersections.intersect(cubic1, cubic2);
|
| + } else {
|
| + intersections.reset();
|
| + }
|
| + SkIntersections intersections2;
|
| + (void) intersections2.intersect(cubic1, cubic2);
|
| + REPORTER_ASSERT(reporter, intersections.used() <= intersections2.used()
|
| + || intersections[0][0] + 0.01 > intersections[0][1]);
|
| + for (int index = 0; index < intersections2.used(); ++index) {
|
| +// SkASSERT(intersections.pt(index).approximatelyEqual(intersections2.pt(index)));
|
| + double tt1 = intersections2[0][index];
|
| + SkDPoint xy1 = cubic1.ptAtT(tt1);
|
| + double tt2 = intersections2[1][index];
|
| + SkDPoint xy2 = cubic2.ptAtT(tt2);
|
| + REPORTER_ASSERT(reporter, xy1.approximatelyEqual(xy2));
|
| + }
|
| +}
|
| +
|
| +DEF_TEST(PathOpsCubicBinaryTest, reporter) {
|
| + int outer = 0;
|
| + int inner = outer + 1;
|
| + do {
|
| + const SkDCubic& cubic1 = testSet[outer];
|
| + const SkDCubic& cubic2 = testSet[inner];
|
| + binaryTest(cubic1, cubic2, reporter);
|
| + inner += 2;
|
| + outer += 2;
|
| + } while (outer < (int) testSetCount);
|
| +}
|
| +
|
| +DEF_TEST(PathOpsCubicBinaryNew, reporter) {
|
| + int outer = 62;
|
| + int inner = outer + 1;
|
| + do {
|
| + const SkDCubic& cubic1 = newTestSet[outer];
|
| + const SkDCubic& cubic2 = newTestSet[inner];
|
| + binaryTest(cubic1, cubic2, reporter);
|
| + inner += 2;
|
| + outer += 2;
|
| + } while (outer < (int) newTestSetCount);
|
| +}
|
| +
|
| +DEF_TEST(PathOpsCubicBinaryStd, reporter) {
|
| + const int firstTest = 0;
|
| + for (size_t index = firstTest; index < tests_count; ++index) {
|
| + const SkDCubic& cubic1 = tests[index][0];
|
| + const SkDCubic& cubic2 = tests[index][1];
|
| + binaryTest(cubic1, cubic2, reporter);
|
| + }
|
| +}
|
| +
|
| +DEF_TEST(PathOpsCubicBinaryCoin, reporter) {
|
| + int firstFail = 0;
|
| + for (int index = firstFail; index < coinSetCount; index += 2) {
|
| + const SkDCubic& cubic1 = coinSet[index];
|
| + const SkDCubic& cubic2 = coinSet[index + 1];
|
| + binaryTest(cubic1, cubic2, reporter);
|
| + }
|
| +}
|
|
|