1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2012 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci#include "src/pathops/SkIntersections.h" 8cb93a386Sopenharmony_ci#include "src/pathops/SkPathOpsRect.h" 9cb93a386Sopenharmony_ci#include "src/pathops/SkReduceOrder.h" 10cb93a386Sopenharmony_ci#include "tests/PathOpsQuadIntersectionTestData.h" 11cb93a386Sopenharmony_ci#include "tests/Test.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_cistatic const QuadPts testSet[] = { 14cb93a386Sopenharmony_ci {{{1, 1}, {2, 2}, {1, 1.000003}}}, 15cb93a386Sopenharmony_ci {{{1, 0}, {2, 6}, {3, 0}}} 16cb93a386Sopenharmony_ci}; 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_cistatic const size_t testSetCount = SK_ARRAY_COUNT(testSet); 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_cistatic void oneOffTest(skiatest::Reporter* reporter) { 21cb93a386Sopenharmony_ci for (size_t index = 0; index < testSetCount; ++index) { 22cb93a386Sopenharmony_ci const QuadPts& q = testSet[index]; 23cb93a386Sopenharmony_ci SkDQuad quad; 24cb93a386Sopenharmony_ci quad.debugSet(q.fPts); 25cb93a386Sopenharmony_ci SkReduceOrder reducer; 26cb93a386Sopenharmony_ci SkDEBUGCODE(int result = ) reducer.reduce(quad); 27cb93a386Sopenharmony_ci SkASSERT(result == 3); 28cb93a386Sopenharmony_ci } 29cb93a386Sopenharmony_ci} 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_cistatic void standardTestCases(skiatest::Reporter* reporter) { 32cb93a386Sopenharmony_ci size_t index; 33cb93a386Sopenharmony_ci SkReduceOrder reducer; 34cb93a386Sopenharmony_ci int order; 35cb93a386Sopenharmony_ci enum { 36cb93a386Sopenharmony_ci RunAll, 37cb93a386Sopenharmony_ci RunQuadraticLines, 38cb93a386Sopenharmony_ci RunQuadraticModLines, 39cb93a386Sopenharmony_ci RunNone 40cb93a386Sopenharmony_ci } run = RunAll; 41cb93a386Sopenharmony_ci int firstTestIndex = 0; 42cb93a386Sopenharmony_ci#if 0 43cb93a386Sopenharmony_ci run = RunQuadraticLines; 44cb93a386Sopenharmony_ci firstTestIndex = 1; 45cb93a386Sopenharmony_ci#endif 46cb93a386Sopenharmony_ci int firstQuadraticLineTest = run == RunAll ? 0 : run == RunQuadraticLines ? firstTestIndex 47cb93a386Sopenharmony_ci : SK_MaxS32; 48cb93a386Sopenharmony_ci int firstQuadraticModLineTest = run == RunAll ? 0 : run == RunQuadraticModLines ? firstTestIndex 49cb93a386Sopenharmony_ci : SK_MaxS32; 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ci for (index = firstQuadraticLineTest; index < quadraticLines_count; ++index) { 52cb93a386Sopenharmony_ci const QuadPts& q = quadraticLines[index]; 53cb93a386Sopenharmony_ci SkDQuad quad; 54cb93a386Sopenharmony_ci quad.debugSet(q.fPts); 55cb93a386Sopenharmony_ci order = reducer.reduce(quad); 56cb93a386Sopenharmony_ci if (order != 2) { 57cb93a386Sopenharmony_ci SkDebugf("[%d] line quad order=%d\n", (int) index, order); 58cb93a386Sopenharmony_ci } 59cb93a386Sopenharmony_ci } 60cb93a386Sopenharmony_ci for (index = firstQuadraticModLineTest; index < quadraticModEpsilonLines_count; ++index) { 61cb93a386Sopenharmony_ci const QuadPts& q = quadraticModEpsilonLines[index]; 62cb93a386Sopenharmony_ci SkDQuad quad; 63cb93a386Sopenharmony_ci quad.debugSet(q.fPts); 64cb93a386Sopenharmony_ci order = reducer.reduce(quad); 65cb93a386Sopenharmony_ci if (order != 2 && order != 3) { // FIXME: data probably is not good 66cb93a386Sopenharmony_ci SkDebugf("[%d] line mod quad order=%d\n", (int) index, order); 67cb93a386Sopenharmony_ci } 68cb93a386Sopenharmony_ci } 69cb93a386Sopenharmony_ci} 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ciDEF_TEST(PathOpsReduceOrderQuad, reporter) { 72cb93a386Sopenharmony_ci oneOffTest(reporter); 73cb93a386Sopenharmony_ci standardTestCases(reporter); 74cb93a386Sopenharmony_ci} 75