OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 #include "PathOpsCubicIntersectionTestData.h" | 7 #include "PathOpsCubicIntersectionTestData.h" |
8 #include "PathOpsTestCommon.h" | 8 #include "PathOpsTestCommon.h" |
9 #include "SkGeometry.h" | 9 #include "SkGeometry.h" |
10 #include "SkIntersections.h" | 10 #include "SkIntersections.h" |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 } | 676 } |
677 | 677 |
678 DEF_TEST(PathOpsCubicIntersection, reporter) { | 678 DEF_TEST(PathOpsCubicIntersection, reporter) { |
679 oneOffTests(reporter); | 679 oneOffTests(reporter); |
680 cubicIntersectionSelfTest(reporter); | 680 cubicIntersectionSelfTest(reporter); |
681 cubicIntersectionCoinTest(reporter); | 681 cubicIntersectionCoinTest(reporter); |
682 standardTestCases(reporter); | 682 standardTestCases(reporter); |
683 if (false) CubicIntersection_IntersectionFinder(); | 683 if (false) CubicIntersection_IntersectionFinder(); |
684 if (false) CubicIntersection_RandTest(reporter); | 684 if (false) CubicIntersection_RandTest(reporter); |
685 } | 685 } |
| 686 |
| 687 static void binaryTest(const SkDCubic& cubic1, const SkDCubic& cubic2, |
| 688 skiatest::Reporter* reporter) { |
| 689 SkASSERT(ValidCubic(cubic1)); |
| 690 SkASSERT(ValidCubic(cubic2)); |
| 691 SkIntersections intersections; |
| 692 SkReduceOrder reduce1, reduce2; |
| 693 int order1 = reduce1.reduce(cubic1, SkReduceOrder::kNo_Quadratics); |
| 694 int order2 = reduce2.reduce(cubic2, SkReduceOrder::kNo_Quadratics); |
| 695 if (order1 == 4 && order2 == 4) { |
| 696 intersections.intersect(cubic1, cubic2); |
| 697 } else { |
| 698 intersections.reset(); |
| 699 } |
| 700 SkIntersections intersections2; |
| 701 (void) intersections2.intersect(cubic1, cubic2); |
| 702 REPORTER_ASSERT(reporter, intersections.used() <= intersections2.used() |
| 703 || intersections[0][0] + 0.01 > intersections[0][1]); |
| 704 for (int index = 0; index < intersections2.used(); ++index) { |
| 705 // SkASSERT(intersections.pt(index).approximatelyEqual(intersections2
.pt(index))); |
| 706 double tt1 = intersections2[0][index]; |
| 707 SkDPoint xy1 = cubic1.ptAtT(tt1); |
| 708 double tt2 = intersections2[1][index]; |
| 709 SkDPoint xy2 = cubic2.ptAtT(tt2); |
| 710 REPORTER_ASSERT(reporter, xy1.approximatelyEqual(xy2)); |
| 711 } |
| 712 } |
| 713 |
| 714 DEF_TEST(PathOpsCubicBinaryTest, reporter) { |
| 715 int outer = 0; |
| 716 int inner = outer + 1; |
| 717 do { |
| 718 const SkDCubic& cubic1 = testSet[outer]; |
| 719 const SkDCubic& cubic2 = testSet[inner]; |
| 720 binaryTest(cubic1, cubic2, reporter); |
| 721 inner += 2; |
| 722 outer += 2; |
| 723 } while (outer < (int) testSetCount); |
| 724 } |
| 725 |
| 726 DEF_TEST(PathOpsCubicBinaryNew, reporter) { |
| 727 int outer = 62; |
| 728 int inner = outer + 1; |
| 729 do { |
| 730 const SkDCubic& cubic1 = newTestSet[outer]; |
| 731 const SkDCubic& cubic2 = newTestSet[inner]; |
| 732 binaryTest(cubic1, cubic2, reporter); |
| 733 inner += 2; |
| 734 outer += 2; |
| 735 } while (outer < (int) newTestSetCount); |
| 736 } |
| 737 |
| 738 DEF_TEST(PathOpsCubicBinaryStd, reporter) { |
| 739 const int firstTest = 0; |
| 740 for (size_t index = firstTest; index < tests_count; ++index) { |
| 741 const SkDCubic& cubic1 = tests[index][0]; |
| 742 const SkDCubic& cubic2 = tests[index][1]; |
| 743 binaryTest(cubic1, cubic2, reporter); |
| 744 } |
| 745 } |
| 746 |
| 747 DEF_TEST(PathOpsCubicBinaryCoin, reporter) { |
| 748 int firstFail = 0; |
| 749 for (int index = firstFail; index < coinSetCount; index += 2) { |
| 750 const SkDCubic& cubic1 = coinSet[index]; |
| 751 const SkDCubic& cubic2 = coinSet[index + 1]; |
| 752 binaryTest(cubic1, cubic2, reporter); |
| 753 } |
| 754 } |
OLD | NEW |