diff --git a/tests/PathOpsLineParametetersTest.cpp b/tests/PathOpsLineParametetersTest.cpp
new file mode 100644
index 0000000..2dad1b2
--- /dev/null
+++ b/tests/PathOpsLineParametetersTest.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2012 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#include "SkLineParameters.h"
+#include "Test.h"
+
+// tests to verify that distance calculations are coded correctly
+static const SkDCubic tests[] = {
+    {{{0, 0}, {1, 1}, {2, 2}, {0, 3}}},
+    {{{0, 0}, {1, 1}, {2, 2}, {3, 0}}},
+    {{{0, 0}, {5, 0}, {-2, 4}, {3, 4}}},
+    {{{0, 2}, {1, 0}, {2, 0}, {3, 0}}},
+    {{{0, .2}, {1, 0}, {2, 0}, {3, 0}}},
+    {{{0, .02}, {1, 0}, {2, 0}, {3, 0}}},
+    {{{0, .002}, {1, 0}, {2, 0}, {3, 0}}},
+    {{{0, .0002}, {1, 0}, {2, 0}, {3, 0}}},
+    {{{0, .00002}, {1, 0}, {2, 0}, {3, 0}}},
+    {{{0, FLT_EPSILON * 2}, {1, 0}, {2, 0}, {3, 0}}},
+};
+
+static const double answers[][2] = {
+    {1, 2},
+    {1, 2},
+    {4, 4},
+    {1.1094003924, 0.5547001962},
+    {0.133038021, 0.06651901052},
+    {0.0133330370, 0.006666518523},
+    {0.001333333037, 0.0006666665185},
+    {0.000133333333, 6.666666652e-05},
+    {1.333333333e-05, 6.666666667e-06},
+    {1.5894571940104115e-07, 7.9472859700520577e-08},
+};
+
+static const size_t tests_count = sizeof(tests) / sizeof(tests[0]);
+
+static void LineParameterTest(skiatest::Reporter* reporter) {
+    for (size_t index = 0; index < tests_count; ++index) {
+        SkLineParameters lineParameters;
+        const SkDCubic& cubic = tests[index];
+        lineParameters.cubicEndPoints(cubic);
+        double denormalizedDistance[2];
+        denormalizedDistance[0] = lineParameters.controlPtDistance(cubic, 1);
+        denormalizedDistance[1] = lineParameters.controlPtDistance(cubic, 2);
+        double normalSquared = lineParameters.normalSquared();
+        size_t inner;
+        for (inner = 0; inner < 2; ++inner) {
+            double distSq = denormalizedDistance[inner];
+            distSq *= distSq;
+            double answersSq = answers[index][inner];
+            answersSq *= answersSq;
+            if (AlmostEqualUlps(distSq, normalSquared * answersSq)) {
+                continue;
+            }
+            SkDebugf("%s [%d,%d] denormalizedDistance:%g != answer:%g"
+                    " distSq:%g answerSq:%g normalSquared:%g\n",
+                    __FUNCTION__, static_cast<int>(index), (int)inner,
+                    denormalizedDistance[inner], answers[index][inner],
+                    distSq, answersSq, normalSquared);
+        }
+        lineParameters.normalize();
+        double normalizedDistance[2];
+        normalizedDistance[0] = lineParameters.controlPtDistance(cubic, 1);
+        normalizedDistance[1] = lineParameters.controlPtDistance(cubic, 2);
+        for (inner = 0; inner < 2; ++inner) {
+            if (AlmostEqualUlps(fabs(normalizedDistance[inner]), answers[index][inner])) {
+                continue;
+            }
+            SkDebugf("%s [%d,%d] normalizedDistance:%1.10g != answer:%g\n",
+                    __FUNCTION__, static_cast<int>(index), (int)inner,
+                    normalizedDistance[inner], answers[index][inner]);
+            REPORTER_ASSERT(reporter, 0);
+        }
+    }
+}
+
+#include "TestClassDef.h"
+DEFINE_TESTCLASS("PathOpsLineParameters", PathOpsLineParametersClass, LineParameterTest)
