aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2014-11-17 12:11:42 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-11-17 12:11:42 -0800
commitf52a063dfd7883bbaa58617416a48c2be724e36b (patch)
tree33ba011391752281e896396e655edf5783953aca /tests
parenta18cc77c338e79b5de5c7ee883da31f6befad9bc (diff)
Fix yet another convexicator issue
This CL fixes the case where a bad initial vector (i.e., nearly zero) managed to short circuit all of the convexicator's logic. The initial bad vector would become the last vector and then never get displaced. The history of this is: https://codereview.chromium.org/298973004/ Switched the convexicator to not advance the last vector when the cross product wasn't significant https://codereview.chromium.org/573763002/ Fixed a bug (crbug.com/412640) wherein a zero area path was being incorrectly categorized as convex b.c. opposite but equal vectors were not signaling concavity. BUG=433683 Review URL: https://codereview.chromium.org/727283003
Diffstat (limited to 'tests')
-rw-r--r--tests/PathTest.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp
index 94b91d261b..78cba5ba00 100644
--- a/tests/PathTest.cpp
+++ b/tests/PathTest.cpp
@@ -1206,6 +1206,20 @@ static void test_convexity2(skiatest::Reporter* reporter) {
degenerateConcave.lineTo(41.446522f, 376.25f);
check_convexity(reporter, degenerateConcave, SkPath::kConcave_Convexity);
check_direction(reporter, degenerateConcave, SkPath::kUnknown_Direction);
+
+ // http://crbug.com/433683
+ SkPath badFirstVector;
+ badFirstVector.moveTo(501.087708f, 319.610352f);
+ badFirstVector.lineTo(501.087708f, 319.610352f);
+ badFirstVector.cubicTo(501.087677f, 319.610321f, 449.271606f, 258.078674f, 395.084564f, 198.711182f);
+ badFirstVector.cubicTo(358.967072f, 159.140717f, 321.910553f, 120.650436f, 298.442322f, 101.955399f);
+ badFirstVector.lineTo(301.557678f, 98.044601f);
+ badFirstVector.cubicTo(325.283844f, 116.945084f, 362.615204f, 155.720825f, 398.777557f, 195.340454f);
+ badFirstVector.cubicTo(453.031860f, 254.781662f, 504.912262f, 316.389618f, 504.912292f, 316.389648f);
+ badFirstVector.lineTo(504.912292f, 316.389648f);
+ badFirstVector.lineTo(501.087708f, 319.610352f);
+ badFirstVector.close();
+ check_convexity(reporter, badFirstVector, SkPath::kConcave_Convexity);
}
static void check_convex_bounds(skiatest::Reporter* reporter, const SkPath& p,