PathMeasureTest.cpp revision 4b413c8bb123e42ca4b9c7bfa6bc2167283cb84c
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
85e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com#include "Test.h"
95e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com#include "SkPathMeasure.h"
105e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
1154f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.comstatic void test_small_segment3() {
12ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com#ifdef SK_SCALAR_IS_FLOAT
13ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    SkPath path;
14ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    const SkPoint pts[] = {
15ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        { 0, 0 },
16ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        { 100000000000.0f, 100000000000.0f }, { 0, 0 }, { 10, 10 },
17ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        { 10, 10 }, { 0, 0 }, { 10, 10 }
18ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    };
19d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
20ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    path.moveTo(pts[0]);
212fc2359aaa8807606854f44a3f38c836a03977cdbsalomon@google.com    for (size_t i = 1; i < SK_ARRAY_COUNT(pts); i += 3) {
22ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        path.cubicTo(pts[i], pts[i + 1], pts[i + 2]);
23ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    }
24d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
25ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    SkPathMeasure meas(path, false);
26ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    meas.getLength();
27ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com#endif
28ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com}
29ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com
3054f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.comstatic void test_small_segment2() {
31ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com#ifdef SK_SCALAR_IS_FLOAT
32ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    SkPath path;
33ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    const SkPoint pts[] = {
34ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        { 0, 0 },
35d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        { 100000000000.0f, 100000000000.0f }, { 0, 0 },
36d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        { 10, 10 }, { 0, 0 },
37ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    };
38d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
39ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    path.moveTo(pts[0]);
40ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    for (size_t i = 1; i < SK_ARRAY_COUNT(pts); i += 2) {
41ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        path.quadTo(pts[i], pts[i + 1]);
42ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    }
43ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    SkPathMeasure meas(path, false);
44ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    meas.getLength();
45ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com#endif
46ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com}
47ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com
4854f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.comstatic void test_small_segment() {
49fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com#ifdef SK_SCALAR_IS_FLOAT
50fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    SkPath path;
51fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    const SkPoint pts[] = {
52fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        { 100000, 100000},
53fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        // big jump between these points, makes a big segment
544b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org        { 1.0005f, 0.9999f },
55fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        // tiny (non-zero) jump between these points
56c6ce750c73c6586a5c2e88a0620b04e9569af401robertphillips@google.com        { SK_Scalar1, SK_Scalar1 },
57fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    };
58d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
59fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    path.moveTo(pts[0]);
60fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    for (size_t i = 1; i < SK_ARRAY_COUNT(pts); ++i) {
61fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        path.lineTo(pts[i]);
62fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    }
63fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    SkPathMeasure meas(path, false);
64fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
65fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    /*  this would assert (before a fix) because we added a segment with
66fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        the same length as the prev segment, due to the follow (bad) pattern
67fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
68fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        d = distance(pts[0], pts[1]);
69fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        distance += d;
70fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        seg->fDistance = distance;
71ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com
72fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        SkASSERT(d > 0);    // TRUE
73fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        SkASSERT(seg->fDistance > prevSeg->fDistance);  // FALSE
74fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
75fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        This 2nd assert failes because (distance += d) didn't affect distance
76fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        because distance >>> d.
77fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com     */
78fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    meas.getLength();
79fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com#endif
80fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com}
81fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
825e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.comstatic void TestPathMeasure(skiatest::Reporter* reporter) {
835e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    SkPath  path;
845e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
855e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.moveTo(0, 0);
865e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.lineTo(SK_Scalar1, 0);
875e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.lineTo(SK_Scalar1, SK_Scalar1);
885e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.lineTo(0, SK_Scalar1);
895e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
905e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    SkPathMeasure   meas(path, true);
915e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    SkScalar        length = meas.getLength();
925e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    SkASSERT(length == SK_Scalar1*4);
935e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
945e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.reset();
955e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.moveTo(0, 0);
965e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.lineTo(SK_Scalar1*3, SK_Scalar1*4);
975e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    meas.setPath(&path, false);
985e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    length = meas.getLength();
995e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    REPORTER_ASSERT(reporter, length == SK_Scalar1*5);
1005e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
1015e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.reset();
1025e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.addCircle(0, 0, SK_Scalar1);
1035e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    meas.setPath(&path, true);
1045e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    length = meas.getLength();
1055e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com//    SkDebugf("circle arc-length = %g\n", length);
1065e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
107510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    // Test the behavior following a close not followed by a move.
108510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.reset();
109510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, 0);
110510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, SK_Scalar1);
111510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(0, SK_Scalar1);
112510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.close();
113510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(-SK_Scalar1, 0);
114510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.setPath(&path, false);
115510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
116510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1 * 4);
117510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.nextContour();
118510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
119510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1);
120510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    SkPoint position;
121510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    SkVector tangent;
122510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
123510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1246853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com        SkScalarNearlyEqual(position.fX,
1256853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com                            -SK_ScalarHalf,
1264b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
127510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, position.fY == 0);
128510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == -SK_Scalar1);
129510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
130510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org
131510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    // Test degenerate paths
132510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.reset();
133510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.moveTo(0, 0);
134510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(0, 0);
135510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, 0);
136510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.quadTo(SK_Scalar1, 0, SK_Scalar1, 0);
137510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.quadTo(SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1 * 2);
138510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.cubicTo(SK_Scalar1, SK_Scalar1 * 2,
139510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org                 SK_Scalar1, SK_Scalar1 * 2,
140510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org                 SK_Scalar1, SK_Scalar1 * 2);
141510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.cubicTo(SK_Scalar1*2, SK_Scalar1 * 2,
142510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org                 SK_Scalar1*3, SK_Scalar1 * 2,
143510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org                 SK_Scalar1*4, SK_Scalar1 * 2);
144510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.setPath(&path, false);
145510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
146510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1 * 6);
147510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
148510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1496853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com        SkScalarNearlyEqual(position.fX,
1506853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com                            SK_ScalarHalf,
1514b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
152510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, position.fY == 0);
153510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
154510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
1554b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(2.5f, &position, &tangent));
156510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1574b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org        SkScalarNearlyEqual(position.fX, SK_Scalar1, 0.0001f));
158510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1594b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org        SkScalarNearlyEqual(position.fY, 1.5f));
160510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == 0);
161510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == SK_Scalar1);
1624b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(4.5f, &position, &tangent));
163510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
164d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkScalarNearlyEqual(position.fX,
1654b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            2.5f,
1664b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
167510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
168d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkScalarNearlyEqual(position.fY,
1694b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            2.0f,
1704b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
171510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
172510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
173510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org
174510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.reset();
175510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.moveTo(0, 0);
176510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, 0);
177510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.moveTo(SK_Scalar1, SK_Scalar1);
178510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.moveTo(SK_Scalar1 * 2, SK_Scalar1 * 2);
179510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, SK_Scalar1 * 2);
180510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.setPath(&path, false);
181510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
182510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1);
183510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
184510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1856853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com        SkScalarNearlyEqual(position.fX,
1866853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com                            SK_ScalarHalf,
1874b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
188510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, position.fY == 0);
189510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
190510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
191510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.nextContour();
192510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
193510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1);
194510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
195510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
196d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkScalarNearlyEqual(position.fX,
1974b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            1.5f,
1984b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
199510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
2006853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com        SkScalarNearlyEqual(position.fY,
2014b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            2.0f,
2024b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
203510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == -SK_Scalar1);
204510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
205fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
20654f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.com    test_small_segment();
20754f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.com    test_small_segment2();
20854f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.com    test_small_segment3();
2095e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com}
2105e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
2115e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com#include "TestClassDef.h"
2125e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.comDEFINE_TESTCLASS("PathMeasure", PathMeasureTestClass, TestPathMeasure)
213