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
11static 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
28static 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
37static 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
45static 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
66void QuadraticBezierClip_Test() {
67    oneAtEndTest();
68    oneOffTest();
69    standardTestCases();
70}
71