Home | History | Annotate | Download | only in Intersection
      1 /*
      2  * Copyright 2012 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 #include "CurveIntersection.h"
      8 #include "Intersection_Tests.h"
      9 #include "QuadraticIntersection_TestData.h"
     10 
     11 static const Quadratic testSet[] = {
     12     // data for oneOffTest
     13     {{8.0000000000000071, 8.0000000000000071},
     14      {8.7289570079366854, 8.7289570079366889},
     15      {9.3914917259458743, 9.0593802763083691}},
     16     {{8.0000000000000142, 8.0000000000000142},
     17      {8.1250000000000107, 8.1250000000000071},
     18      {8.2500000000000071, 8.2187500000000053}},
     19      // data for oneAtEndTest
     20     {{0.91292418204644155, 0.41931201426549197},
     21      {0.70491388044579517, 0.64754305977710236},
     22      {0,                   1                  }},
     23     {{0.21875,             0.765625           },
     24      {0.125,               0.875              },
     25      {0,                   1                  }}
     26 };
     27 
     28 static void oneAtEndTest() {
     29     const Quadratic& quad1 = testSet[2];
     30     const Quadratic& quad2 = testSet[3];
     31     double minT = 0;
     32     double maxT = 1;
     33     bezier_clip(quad1, quad2, minT, maxT);
     34 }
     35 
     36 
     37 static void oneOffTest() {
     38     const Quadratic& quad1 = testSet[0];
     39     const Quadratic& quad2 = testSet[1];
     40     double minT = 0;
     41     double maxT = 1;
     42     bezier_clip(quad1, quad2, minT, maxT);
     43 }
     44 
     45 static void standardTestCases() {
     46     for (size_t index = 0; index < quadraticTests_count; ++index) {
     47         const Quadratic& quad1 = quadraticTests[index][0];
     48         const Quadratic& quad2 = quadraticTests[index][1];
     49         Quadratic reduce1, reduce2;
     50         int order1 = reduceOrder(quad1, reduce1, kReduceOrder_TreatAsFill);
     51         int order2 = reduceOrder(quad2, reduce2, kReduceOrder_TreatAsFill);
     52         if (order1 < 3) {
     53             SkDebugf("%s [%d] quad1 order=%d\n", __FUNCTION__, (int)index, order1);
     54         }
     55         if (order2 < 3) {
     56             SkDebugf("%s [%d] quad2 order=%d\n", __FUNCTION__, (int)index, order2);
     57         }
     58         if (order1 == 3 && order2 == 3) {
     59             double minT = 0;
     60             double maxT = 1;
     61             bezier_clip(reduce1, reduce2, minT, maxT);
     62         }
     63     }
     64 }
     65 
     66 void QuadraticBezierClip_Test() {
     67     oneAtEndTest();
     68     oneOffTest();
     69     standardTestCases();
     70 }
     71