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
12static const Quadratic testSet[] = {
13    {{1, 1}, {2, 2}, {1, 1.000003}},
14    {{1, 0}, {2, 6}, {3, 0}}
15};
16
17static const size_t testSetCount = sizeof(testSet) / sizeof(testSet[0]);
18
19
20static 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
30static 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
64void QuadraticReduceOrder_Test() {
65    oneOffTest();
66    standardTestCases();
67}
68