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