checkpoint for shape ops

at minimum, the unit tests in SimplyNew_Test pass

git-svn-id: http://skia.googlecode.com/svn/trunk@5860 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/Intersection/SimplifyAngle_Test.cpp b/experimental/Intersection/SimplifyAngle_Test.cpp
index 4bf22fd..9b25851 100644
--- a/experimental/Intersection/SimplifyAngle_Test.cpp
+++ b/experimental/Intersection/SimplifyAngle_Test.cpp
@@ -93,27 +93,12 @@
         int index = 0;
         do {
             int next = index + 1;
-    #if HIGH_DEF_ANGLES==0
-            if (testFlat) {
-                lesser.setFlat(segPtr[index].pts, segPtr[index].verb, 0, index, next);
-            } else {
-                lesser.set(segPtr[index].pts, segPtr[index].verb, 0, index, next);
-            }
-    #else
-            lesser.set(segPtr[index].pts, segPtr[index].verb, 0, index, next, 0, 1);
-    #endif
+            SkTDArray<SimplifyAngleTest::Span> dummy;
+            lesser.set(segPtr[index].pts, segPtr[index].verb, NULL, index, next, dummy);
             if (segPtr[next].verb == SkPath::kMove_Verb) {
                 break;
             }
-    #if HIGH_DEF_ANGLES==0
-            if (testFlat) {
-                greater.setFlat(segPtr[next].pts, segPtr[next].verb, 0, index, next);
-            } else {
-                greater.set(segPtr[next].pts, segPtr[next].verb, 0, index, next);
-            }
-    #else
-            greater.set(segPtr[next].pts, segPtr[next].verb, 0, index, next, 0, 1);
-    #endif
+            greater.set(segPtr[next].pts, segPtr[next].verb, NULL, index, next, dummy);
             bool result = lesser < greater;
             SkASSERT(result);
             index = next;
@@ -129,15 +114,8 @@
     size_t x;
     for (x = 0; x < lineCount; ++x) {
         SimplifyAngleTest::Angle* angle = angles.append();
-    #if HIGH_DEF_ANGLES==0
-        if (testFlat) {
-            angle->setFlat(lines[x], SkPath::kLine_Verb, 0, x, x + 1);
-        } else {
-            angle->set(lines[x], SkPath::kLine_Verb, 0, x, x + 1);
-        }
-    #else
-        angle->set(lines[x], SkPath::kLine_Verb, 0, x, x + 1, 0, 1);
-    #endif
+        SkTDArray<SimplifyAngleTest::Span> dummy;
+        angle->set(lines[x], SkPath::kLine_Verb, 0, x, x + 1, dummy);
         double arcTan = atan2(lines[x][0].fX - lines[x][1].fX,
                 lines[x][0].fY - lines[x][1].fY);
         arcTans.push(arcTan);
@@ -184,15 +162,8 @@
     size_t x;
     for (x = 0; x < quadCount; ++x) {
         SimplifyAngleTest::Angle* angle = angles.append();
-    #if HIGH_DEF_ANGLES==0
-        if (testFlat) {
-            angle->setFlat(quads[x], SkPath::kQuad_Verb, 0, x, x + 1);
-        } else {
-            angle->set(quads[x], SkPath::kQuad_Verb, 0, x, x + 1);
-        }
-     #else
-        angle->set(quads[x], SkPath::kQuad_Verb, 0, x, x + 1, 0, 1);
-    #endif
+        SkTDArray<SimplifyAngleTest::Span> dummy;
+        angle->set(quads[x], SkPath::kQuad_Verb, 0, x, x + 1, dummy);
    }
     for (x = 0; x < quadCount; ++x) {
         angleList.push(&angles[x]);
@@ -214,15 +185,8 @@
     SkTDArray<SimplifyAngleTest::Angle* > angleList;
     for (size_t x = 0; x < cubicCount; ++x) {
         SimplifyAngleTest::Angle* angle = angles.append();
-    #if HIGH_DEF_ANGLES==0
-        if (testFlat) {
-            angle->setFlat(cubics[x], SkPath::kCubic_Verb, 0, x, x + 1);
-        } else {
-            angle->set(cubics[x], SkPath::kCubic_Verb, 0, x, x + 1);
-        }
-     #else
-            angle->set(cubics[x], SkPath::kCubic_Verb, 0, x, x + 1, 0, 1);
-    #endif
+            SkTDArray<SimplifyAngleTest::Span> dummy;
+        angle->set(cubics[x], SkPath::kCubic_Verb, 0, x, x + 1, dummy);
         angleList.push(angle);
     }
     QSort<SimplifyAngleTest::Angle>(angleList.begin(), angleList.end() - 1);
@@ -235,7 +199,68 @@
     }
 }
 
+struct segmentWithT {
+    SkPath::Verb verb;
+    SkPoint pts[4];
+    double ts[2];
+};
+
+
+static const segmentWithT oneOffTest1[] = {
+    {SkPath::kQuad_Verb, {{391.653534f, 183.286819f}, {391.653534f, 157.724487f}, {405.469604f, 141.372879f}},
+        {0.62346946335026932, 0.62344389027237135}},
+    {SkPath::kQuad_Verb, {{399.365234f, 171.695801f}, {399.365234f, 140.337967f}, {375.976227f, 140.337967f}},
+        {0.31638302676995866, 0.31637992418411398}},
+    {SkPath::kMove_Verb }
+};
+
+static const segmentWithT oneOffTest2[] = {
+    {SkPath::kQuad_Verb, {{399.070374f, 151.722f}, {391.101532f, 163.002533f}, {391.101532f, 182.665863f}},
+        {0.13793711854916513, 0.13790171160614006}},
+    {SkPath::kQuad_Verb, {{391.653534f, 183.286819f}, {391.653534f, 157.724487f}, {405.469604f, 141.372879f}},
+        {0.62344389027237135, 0.62346946335026932}},
+    {SkPath::kMove_Verb }
+};
+
+static const segmentWithT oneOffTest3[] = {
+    {SkPath::kQuad_Verb, {{399.365234f, 171.695801f}, {399.365234f, 140.337967f}, {375.976227f, 140.337967f}},
+        {0.31637992418411398, 0.31638302676995866, }},
+    {SkPath::kQuad_Verb, {{399.070374f, 151.722f}, {391.101532f, 163.002533f}, {391.101532f, 182.665863f}},
+        {0.13790171160614006, 0.13793711854916513}},
+    {SkPath::kMove_Verb }
+};
+
+static const segmentWithT* oneOffTests[] = {
+    oneOffTest1,
+    oneOffTest2,
+    oneOffTest3,
+};
+
+static const size_t oneOffTestCount = sizeof(oneOffTests) / sizeof(oneOffTests[0]);
+
+static void oneOffTest(bool testFlat) {
+    for (size_t testIndex = 0; testIndex < oneOffTestCount; ++testIndex) {
+        const segmentWithT* segPtr = oneOffTests[testIndex];
+        SimplifyAngleTest::Angle lesser, greater;
+        int index = 0;
+        do {
+            int next = index + 1;
+            SkTDArray<SimplifyAngleTest::Span> dummy; // FIXME
+            lesser.set(segPtr[index].pts, segPtr[index].verb, 0, index, next, dummy); // FIXME: segPtr[index].ts[0], segPtr[index].ts[1]);
+            if (segPtr[next].verb == SkPath::kMove_Verb) {
+                break;
+            }
+            greater.set(segPtr[next].pts, segPtr[next].verb, 0, index, next, dummy); // FIXME: segPtr[next].ts[0], segPtr[next].ts[1]);
+            bool result = lesser < greater;
+            SkASSERT(result);
+            index = next;
+        } while (true);
+    }
+    SkDebugf("%s finished\n", __FUNCTION__);
+}
+
 static void (*tests[])(bool) = {
+    oneOffTest,
     testSegments,
     testLines,
     testQuads,