shape ops work in progress
add quartic solution for intersecting quadratics

git-svn-id: http://skia.googlecode.com/svn/trunk@5541 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/Intersection/QuadraticIntersection_Test.cpp b/experimental/Intersection/QuadraticIntersection_Test.cpp
index 74037be..08736cc 100644
--- a/experimental/Intersection/QuadraticIntersection_Test.cpp
+++ b/experimental/Intersection/QuadraticIntersection_Test.cpp
@@ -28,8 +28,10 @@
             printf("[%d] quad2 order=%d\n", (int) index, order2);
         }
         if (order1 == 3 && order2 == 3) {
-            Intersections intersections;
+            Intersections intersections, intersections2;
             intersect(reduce1, reduce2, intersections);
+            intersect2(reduce1, reduce2, intersections2);
+            SkASSERT(intersections.used() == intersections2.used());
             if (intersections.intersected()) {
                 for (int pt = 0; pt < intersections.used(); ++pt) {
                     double tt1 = intersections.fT[0][pt];
@@ -46,6 +48,10 @@
                         printf("%s [%d,%d] y!= t1=%g (%g,%g) t2=%g (%g,%g)\n",
                             __FUNCTION__, (int)index, pt, tt1, tx1, ty1, tt2, tx2, ty2);
                     }
+                    tt1 = intersections2.fT[0][pt];
+                    SkASSERT(approximately_equal(intersections.fT[0][pt], tt1));
+                    tt2 = intersections2.fT[1][pt];
+                    SkASSERT(approximately_equal(intersections.fT[1][pt], tt2));
                 }
             }
         }
@@ -70,11 +76,12 @@
             if (!intersections.intersected()) {
                 SkDebugf("%s no intersection!\n", __FUNCTION__);
             }
+            double tt1, tt2;
             for (int pt = 0; pt < intersections.used(); ++pt) {
-                double tt1 = intersections.fT[0][pt];
+                tt1 = intersections.fT[0][pt];
                 double tx1, ty1;
                 xy_at_t(quad1, tt1, tx1, ty1);
-                double tt2 = intersections.fT[1][pt];
+                tt2 = intersections.fT[1][pt];
                 double tx2, ty2;
                 xy_at_t(quad2, tt2, tx2, ty2);
                 if (!approximately_equal(tx1, tx2)) {
@@ -90,6 +97,15 @@
                 SkDebugf("%s [%d][%d] t1=%1.9g (%1.9g, %1.9g) t2=%1.9g\n", __FUNCTION__,
                     outer, inner, tt1, tx1, tx2, tt2);
             }
+            Intersections intersections2;
+            intersect2(quad1, quad2, intersections2);
+            SkASSERT(intersections.used() == intersections2.used());
+            for (int pt = 0; pt < intersections2.used(); ++pt) {
+                tt1 = intersections2.fT[0][pt];
+                SkASSERT(approximately_equal(intersections.fT[0][pt], tt1));
+                tt2 = intersections2.fT[1][pt];
+                SkASSERT(approximately_equal(intersections.fT[1][pt], tt2));
+            }
         }
     }
 }
@@ -105,19 +121,29 @@
     for (size_t testIndex = 0; testIndex < coincidentTestSetCount - 1; testIndex += 2) {
         const Quadratic& quad1 = coincidentTestSet[testIndex];
         const Quadratic& quad2 = coincidentTestSet[testIndex + 1];
-        Intersections intersections;
+        Intersections intersections, intersections2;
         intersect(quad1, quad2, intersections);
         SkASSERT(intersections.coincidentUsed() == 2);
-        for (int pt = 0; pt < intersections.coincidentUsed(); ++pt) {
-            double tt1 = intersections.fT[0][pt];
+        int pt;
+        double tt1, tt2;
+        for (pt = 0; pt < intersections.coincidentUsed(); ++pt) {
+            tt1 = intersections.fT[0][pt];
             double tx1, ty1;
             xy_at_t(quad1, tt1, tx1, ty1);
-            double tt2 = intersections.fT[1][pt];
+            tt2 = intersections.fT[1][pt];
             double tx2, ty2;
             xy_at_t(quad2, tt2, tx2, ty2);
             SkDebugf("%s [%d,%d] t1=%g (%g,%g) t2=%g (%g,%g)\n",
                 __FUNCTION__, (int)testIndex, pt, tt1, tx1, ty1, tt2, tx2, ty2);
         }
+        intersect2(quad1, quad2, intersections2);
+        SkASSERT(intersections2.coincidentUsed() == 2);
+        for (pt = 0; pt < intersections2.coincidentUsed(); ++pt) {
+            tt1 = intersections2.fT[0][pt];
+            SkASSERT(approximately_equal(intersections.fT[0][pt], tt1));
+            tt2 = intersections2.fT[1][pt];
+            SkASSERT(approximately_equal(intersections.fT[1][pt], tt2));
+        }
     }
 }