19166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com/*
29166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com * Copyright 2012 Google Inc.
39166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com *
49166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com * Use of this source code is governed by a BSD-style license that can be
59166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com * found in the LICENSE file.
69166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com */
79166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
89166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com#include "PathOpsQuadIntersectionTestData.h"
99166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
109166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comconst SkDQuad quadraticPoints[] = {
119166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 0}, {1, 0}, {0, 0}}},
129166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 0}, {0, 1}, {0, 0}}},
139166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 0}, {1, 1}, {0, 0}}},
149166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {2, 2}, {1, 1}}},
159166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com};
169166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
17ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comconst size_t quadraticPoints_count = SK_ARRAY_COUNT(quadraticPoints);
189166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
199166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comconst SkDQuad quadraticLines[] = {
209166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 0}, {0, 0}, {1, 0}}},
219166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 0}, {0, 0}, {0, 0}}},
229166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 0}, {2, 0}, {3, 0}}},
239166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 0}, {0, 0}, {0, 1}}},
249166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 1}, {0, 0}, {0, 0}}},
259166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 1}, {0, 2}, {0, 3}}},
269166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 0}, {0, 0}, {1, 1}}},
279166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {0, 0}, {0, 0}}},
289166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {2, 2}, {3, 3}}},
299166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {3, 3}, {3, 3}}},
309166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {1, 1}, {2, 2}}},
319166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {1, 1}, {3, 3}}},
329166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {2, 2}, {4, 4}}},  // no coincident
339166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {3, 3}, {4, 4}}},
349166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {3, 3}, {2, 2}}},
359166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {4, 4}, {2, 2}}},
369166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {4, 4}, {3, 3}}},
379166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {1, 1}, {3, 3}}},
389166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {1, 1}, {4, 4}}},
399166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {3, 3}, {1, 1}}},
409166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {3, 3}, {4, 4}}},
419166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {4, 4}, {1, 1}}},
429166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {4, 4}, {3, 3}}},
439166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com};
449166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
45ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comconst size_t quadraticLines_count = SK_ARRAY_COUNT(quadraticLines);
469166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
479166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comstatic const double F = FLT_EPSILON * 3;
489166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comstatic const double H = FLT_EPSILON * 4;
499166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comstatic const double J = FLT_EPSILON * 5;
509166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comstatic const double K = FLT_EPSILON * 8;  // INVESTIGATE: why are larger multiples necessary?
519166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
529166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comconst SkDQuad quadraticModEpsilonLines[] = {
539166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, F}, {0, 0}, {1, 0}}},
549166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 0}, {1, 0}, {0, F}}},
559166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 0}, {0, F}, {0, 0}}},
569166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, H}, {2, 0}, {3, 0}}},
577eaa53d8f7e48fd17d02b5e3bd91f90e9c1899efcaryclark@google.com//  {{{F, 0}, {0, 0}, {0, 1}}},  // INVESTIGATE: even substituting K for F, quad is still linear.
587eaa53d8f7e48fd17d02b5e3bd91f90e9c1899efcaryclark@google.com//  {{{0, 0}, {0, 1}, {F, 0}}},
597eaa53d8f7e48fd17d02b5e3bd91f90e9c1899efcaryclark@google.com//  {{{0, 1}, {F, 0}, {0, 0}}},
607eaa53d8f7e48fd17d02b5e3bd91f90e9c1899efcaryclark@google.com//  {{{H, 1}, {0, 2}, {0, 3}}},
619166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, F}, {0, 0}, {1, 1}}},
629166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{0, 0}, {1, 1}, {F, 0}}},
639166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {F, 0}, {0, 0}}},
649166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1+J}, {2, 2}, {3, 3}}},
659166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {3, 3}, {3+F, 3}}},
669166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {1+F, 1}, {2, 2}}},
679166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {2, 2}, {1, 1+F}}},
689166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {1, 1+F}, {3, 3}}},
699166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1+H, 1}, {2, 2}, {4, 4}}},  // no coincident
709166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1+K}, {3, 3}, {4, 4}}},
719166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {3+F, 3}, {2, 2}}},
729166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {4, 4+F}, {2, 2}}},
739166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{1, 1}, {4, 4}, {3+F, 3}}},
749166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {1, 1}, {3, 3+F}}},
759166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2+F, 2}, {1, 1}, {4, 4}}},
769166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2+F}, {3, 3}, {1, 1}}},
779166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {3+F, 3}, {4, 4}}},
789166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {4, 4+F}, {1, 1}}},
799166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {{{2, 2}, {4, 4}, {3+F, 3}}},
809166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com};
819166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
829166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comconst size_t quadraticModEpsilonLines_count =
83ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.com        SK_ARRAY_COUNT(quadraticModEpsilonLines);
849166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
859166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comconst SkDQuad quadraticTests[][2] = {
869166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {  // one intersection
879166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com     {{{0, 0},
889166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com      {0, 1},
899166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com      {1, 1}}},
909166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com     {{{0, 1},
919166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com      {0, 0},
929166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com      {1, 0}}}
939166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    },
949166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    {  // four intersections
959166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com     {{{1, 0},
969166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com      {2, 6},
979166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com      {3, 0}}},
989166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com     {{{0, 1},
999166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com      {6, 2},
1009166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com      {0, 3}}}
1019166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com    }
1029166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com};
1039166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
104ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comconst size_t quadraticTests_count = SK_ARRAY_COUNT(quadraticTests);
105