1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
7e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org
85e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com#include "SkPathMeasure.h"
98f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h"
105e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
1154f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.comstatic void test_small_segment3() {
12ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    SkPath path;
13ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    const SkPoint pts[] = {
14ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        { 0, 0 },
15ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        { 100000000000.0f, 100000000000.0f }, { 0, 0 }, { 10, 10 },
16ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        { 10, 10 }, { 0, 0 }, { 10, 10 }
17ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    };
18d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
19ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    path.moveTo(pts[0]);
202fc2359aaa8807606854f44a3f38c836a03977cdbsalomon@google.com    for (size_t i = 1; i < SK_ARRAY_COUNT(pts); i += 3) {
21ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        path.cubicTo(pts[i], pts[i + 1], pts[i + 2]);
22ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    }
23d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
24ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    SkPathMeasure meas(path, false);
25ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    meas.getLength();
26ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com}
27ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com
2854f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.comstatic void test_small_segment2() {
29ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    SkPath path;
30ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    const SkPoint pts[] = {
31ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        { 0, 0 },
32d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        { 100000000000.0f, 100000000000.0f }, { 0, 0 },
33d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        { 10, 10 }, { 0, 0 },
34ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    };
35d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
36ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    path.moveTo(pts[0]);
37ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    for (size_t i = 1; i < SK_ARRAY_COUNT(pts); i += 2) {
38ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com        path.quadTo(pts[i], pts[i + 1]);
39ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    }
40ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    SkPathMeasure meas(path, false);
41ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com    meas.getLength();
42ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com}
43ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com
4454f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.comstatic void test_small_segment() {
45fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    SkPath path;
46fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    const SkPoint pts[] = {
47fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        { 100000, 100000},
48fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        // big jump between these points, makes a big segment
494b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org        { 1.0005f, 0.9999f },
50fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        // tiny (non-zero) jump between these points
51c6ce750c73c6586a5c2e88a0620b04e9569af401robertphillips@google.com        { SK_Scalar1, SK_Scalar1 },
52fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    };
53d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
54fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    path.moveTo(pts[0]);
55fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    for (size_t i = 1; i < SK_ARRAY_COUNT(pts); ++i) {
56fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        path.lineTo(pts[i]);
57fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    }
58fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    SkPathMeasure meas(path, false);
59fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
60fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    /*  this would assert (before a fix) because we added a segment with
61fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        the same length as the prev segment, due to the follow (bad) pattern
62fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
63fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        d = distance(pts[0], pts[1]);
64fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        distance += d;
65fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        seg->fDistance = distance;
66ded44149856373072a8c6d2b2eacb213a1273a6ereed@google.com
67fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        SkASSERT(d > 0);    // TRUE
68fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        SkASSERT(seg->fDistance > prevSeg->fDistance);  // FALSE
69fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
70fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        This 2nd assert failes because (distance += d) didn't affect distance
71fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com        because distance >>> d.
72fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com     */
73fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com    meas.getLength();
74fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com}
75fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
76e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(PathMeasure, reporter) {
775e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    SkPath  path;
785e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
795e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.moveTo(0, 0);
805e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.lineTo(SK_Scalar1, 0);
815e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.lineTo(SK_Scalar1, SK_Scalar1);
825e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.lineTo(0, SK_Scalar1);
835e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
845e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    SkPathMeasure   meas(path, true);
855e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    SkScalar        length = meas.getLength();
865e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    SkASSERT(length == SK_Scalar1*4);
875e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
885e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.reset();
895e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.moveTo(0, 0);
905e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.lineTo(SK_Scalar1*3, SK_Scalar1*4);
915e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    meas.setPath(&path, false);
925e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    length = meas.getLength();
935e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    REPORTER_ASSERT(reporter, length == SK_Scalar1*5);
945e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
955e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.reset();
965e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    path.addCircle(0, 0, SK_Scalar1);
975e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    meas.setPath(&path, true);
985e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com    length = meas.getLength();
995e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com//    SkDebugf("circle arc-length = %g\n", length);
1005e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com
101510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    // Test the behavior following a close not followed by a move.
102510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.reset();
103510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, 0);
104510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, SK_Scalar1);
105510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(0, SK_Scalar1);
106510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.close();
107510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(-SK_Scalar1, 0);
108510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.setPath(&path, false);
109510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
110510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1 * 4);
111510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.nextContour();
112510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
113510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1);
114510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    SkPoint position;
115510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    SkVector tangent;
116510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
117510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1186853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com        SkScalarNearlyEqual(position.fX,
1196853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com                            -SK_ScalarHalf,
1204b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
121510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, position.fY == 0);
122510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == -SK_Scalar1);
123510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
124510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org
125510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    // Test degenerate paths
126510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.reset();
127510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.moveTo(0, 0);
128510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(0, 0);
129510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, 0);
130510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.quadTo(SK_Scalar1, 0, SK_Scalar1, 0);
131510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.quadTo(SK_Scalar1, SK_Scalar1, SK_Scalar1, SK_Scalar1 * 2);
132510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.cubicTo(SK_Scalar1, SK_Scalar1 * 2,
133510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org                 SK_Scalar1, SK_Scalar1 * 2,
134510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org                 SK_Scalar1, SK_Scalar1 * 2);
135510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.cubicTo(SK_Scalar1*2, SK_Scalar1 * 2,
136510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org                 SK_Scalar1*3, SK_Scalar1 * 2,
137510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org                 SK_Scalar1*4, SK_Scalar1 * 2);
138510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.setPath(&path, false);
139510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
140510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1 * 6);
141510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
142510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1436853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com        SkScalarNearlyEqual(position.fX,
1446853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com                            SK_ScalarHalf,
1454b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
146510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, position.fY == 0);
147510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
148510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
1494b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(2.5f, &position, &tangent));
150510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1514b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org        SkScalarNearlyEqual(position.fX, SK_Scalar1, 0.0001f));
152510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1534b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org        SkScalarNearlyEqual(position.fY, 1.5f));
154510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == 0);
155510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == SK_Scalar1);
1564b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(4.5f, &position, &tangent));
157510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
158d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkScalarNearlyEqual(position.fX,
1594b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            2.5f,
1604b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
161510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
162d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkScalarNearlyEqual(position.fY,
1634b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            2.0f,
1644b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
165510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
166510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
167510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org
168510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.reset();
169510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.moveTo(0, 0);
170510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, 0);
171510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.moveTo(SK_Scalar1, SK_Scalar1);
172510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.moveTo(SK_Scalar1 * 2, SK_Scalar1 * 2);
173510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    path.lineTo(SK_Scalar1, SK_Scalar1 * 2);
174510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.setPath(&path, false);
175510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
176510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1);
177510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
178510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1796853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com        SkScalarNearlyEqual(position.fX,
1806853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com                            SK_ScalarHalf,
1814b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
182510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, position.fY == 0);
183510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
184510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
185510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    meas.nextContour();
186510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    length = meas.getLength();
187510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, length == SK_Scalar1);
188510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, meas.getPosTan(SK_ScalarHalf, &position, &tangent));
189510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
190d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        SkScalarNearlyEqual(position.fX,
1914b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            1.5f,
1924b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
193510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter,
1946853e808a464ca75ff1328338d1eb55ff27c4337robertphillips@google.com        SkScalarNearlyEqual(position.fY,
1954b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            2.0f,
1964b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            0.0001f));
197510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fX == -SK_Scalar1);
198510c6b186d7238bf6d14d92cfd856333ab525bb4schenney@chromium.org    REPORTER_ASSERT(reporter, tangent.fY == 0);
199fab1ddd3a8893db58b2ce0afd28ecc73412ee871reed@google.com
20054f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.com    test_small_segment();
20154f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.com    test_small_segment2();
20254f0d1b7113cb0dc184e522539aab1030a28a421sugoi@google.com    test_small_segment3();
2035e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com}
204