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 #include "TestUtilities.h"
     11 
     12 static const Quadratic testSet[] = {
     13     {{1, 1}, {2, 2}, {1, 1.000003}},
     14     {{1, 0}, {2, 6}, {3, 0}}
     15 };
     16 
     17 static const size_t testSetCount = sizeof(testSet) / sizeof(testSet[0]);
     18 
     19 
     20 static void oneOffTest() {
     21     SkDebugf("%s FLT_EPSILON=%1.9g\n", __FUNCTION__, FLT_EPSILON);
     22     for (size_t index = 0; index < testSetCount; ++index) {
     23         const Quadratic& quad = testSet[index];
     24         Quadratic reduce;
     25         SkDEBUGCODE(int result = ) reduceOrder(quad, reduce, kReduceOrder_TreatAsFill);
     26         SkASSERT(result == 3);
     27     }
     28 }
     29 
     30 static void standardTestCases() {
     31     size_t index;
     32     Quadratic reduce;
     33     int order;
     34     enum {
     35         RunAll,
     36         RunQuadraticLines,
     37         RunQuadraticModLines,
     38         RunNone
     39     } run = RunAll;
     40     int firstTestIndex = 0;
     41 #if 0
     42     run = RunQuadraticLines;
     43     firstTestIndex = 1;
     44 #endif
     45     int firstQuadraticLineTest = run == RunAll ? 0 : run == RunQuadraticLines ? firstTestIndex : SK_MaxS32;
     46     int firstQuadraticModLineTest = run == RunAll ? 0 : run == RunQuadraticModLines ? firstTestIndex : SK_MaxS32;
     47 
     48     for (index = firstQuadraticLineTest; index < quadraticLines_count; ++index) {
     49         const Quadratic& quad = quadraticLines[index];
     50         order = reduceOrder(quad, reduce, kReduceOrder_TreatAsFill);
     51         if (order != 2) {
     52             printf("[%d] line quad order=%d\n", (int) index, order);
     53         }
     54     }
     55     for (index = firstQuadraticModLineTest; index < quadraticModEpsilonLines_count; ++index) {
     56         const Quadratic& quad = quadraticModEpsilonLines[index];
     57         order = reduceOrder(quad, reduce, kReduceOrder_TreatAsFill);
     58         if (order != 3) {
     59             printf("[%d] line mod quad order=%d\n", (int) index, order);
     60         }
     61     }
     62 }
     63 
     64 void QuadraticReduceOrder_Test() {
     65     oneOffTest();
     66     standardTestCases();
     67 }
     68