From b640203cd5733aaf110277e28e22007c5b541565 Mon Sep 17 00:00:00 2001 From: reed Date: Fri, 20 Mar 2015 13:23:43 -0700 Subject: use Sk2s for conics BUG=skia: Review URL: https://codereview.chromium.org/1025033002 --- tests/GeometryTest.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'tests/GeometryTest.cpp') diff --git a/tests/GeometryTest.cpp b/tests/GeometryTest.cpp index aba8dd224b..8a7bfe3b49 100644 --- a/tests/GeometryTest.cpp +++ b/tests/GeometryTest.cpp @@ -77,6 +77,58 @@ static void test_evalquadat(skiatest::Reporter* reporter) { } } +static void test_conic_eval_pos(skiatest::Reporter* reporter, const SkConic& conic, SkScalar t) { + SkPoint p0, p1; + conic.evalAt(t, &p0, NULL); + p1 = conic.evalAt(t); + check_pairs(reporter, 0, t, "conic-pos", p0.fX, p0.fY, p1.fX, p1.fY); +} + +static void test_conic_eval_tan(skiatest::Reporter* reporter, const SkConic& conic, SkScalar t) { + SkVector v0, v1; + conic.evalAt(t, NULL, &v0); + v1 = conic.evalTangentAt(t); + check_pairs(reporter, 0, t, "conic-tan", v0.fX, v0.fY, v1.fX, v1.fY); +} + +static void test_conic_chop_half(skiatest::Reporter* reporter, const SkConic& conic) { + SkConic dst0[2], dst1[2]; + conic.chop(dst0); + conic.chop2(dst1); + + for (int i = 0; i < 2; ++i) { + REPORTER_ASSERT(reporter, dst0[i].fW == dst1[i].fW); + for (int j = 0; j < 3; ++j) { + check_pairs(reporter, j, 0.5f, "conic-chop", + dst0[i].fPts[j].fX, dst0[i].fPts[j].fY, + dst0[i].fPts[j].fX, dst1[i].fPts[j].fY); + } + } +} + +static void test_conic(skiatest::Reporter* reporter) { + SkRandom rand; + for (int i = 0; i < 1000; ++i) { + SkPoint pts[3]; + for (int j = 0; j < 3; ++j) { + pts[j].set(rand.nextSScalar1() * 100, rand.nextSScalar1() * 100); + } + for (int k = 0; k < 10; ++k) { + SkScalar w = rand.nextUScalar1() * 2; + SkConic conic(pts, w); + test_conic_chop_half(reporter, conic); + + const SkScalar dt = SK_Scalar1 / 128; + SkScalar t = dt; + for (int j = 1; j < 128; ++j) { + test_conic_eval_pos(reporter, conic, t); + test_conic_eval_tan(reporter, conic, t); + t += dt; + } + } + } +} + DEF_TEST(Geometry, reporter) { SkPoint pts[3], dst[5]; @@ -103,4 +155,5 @@ DEF_TEST(Geometry, reporter) { testChopCubic(reporter); test_evalquadat(reporter); + test_conic(reporter); } -- cgit v1.2.3