• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
oneOffTest()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 
standardTestCases()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 
QuadraticReduceOrder_Test()64 void QuadraticReduceOrder_Test() {
65     oneOffTest();
66     standardTestCases();
67 }
68