1496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com/* 2496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com * Copyright 2012 Google Inc. 3496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com * 4496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com * Use of this source code is governed by a BSD-style license that can be 5496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com * found in the LICENSE file. 6496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com */ 7496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com#include "PathOpsQuadIntersectionTestData.h" 8496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com#include "SkIntersections.h" 9496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com#include "SkPathOpsRect.h" 10496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com#include "SkReduceOrder.h" 11496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com#include "Test.h" 12496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com 13a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclarkstatic const QuadPts testSet[] = { 14496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com {{{1, 1}, {2, 2}, {1, 1.000003}}}, 15496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com {{{1, 0}, {2, 6}, {3, 0}}} 16496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com}; 17496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com 18ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic const size_t testSetCount = SK_ARRAY_COUNT(testSet); 19496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com 20496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.comstatic void oneOffTest(skiatest::Reporter* reporter) { 21496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com for (size_t index = 0; index < testSetCount; ++index) { 22a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark const QuadPts& q = testSet[index]; 23a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark SkDQuad quad; 24a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark quad.debugSet(q.fPts); 25496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com SkReduceOrder reducer; 26927b7028d44c46e9cbc18368f16ec2262d59d94dcaryclark@google.com SkDEBUGCODE(int result = ) reducer.reduce(quad); 27496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com SkASSERT(result == 3); 28496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com } 29496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com} 30496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com 31496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.comstatic void standardTestCases(skiatest::Reporter* reporter) { 32496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com size_t index; 33496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com SkReduceOrder reducer; 34496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com int order; 35496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com enum { 36496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com RunAll, 37496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com RunQuadraticLines, 38496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com RunQuadraticModLines, 39496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com RunNone 40496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com } run = RunAll; 41496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com int firstTestIndex = 0; 42496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com#if 0 43496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com run = RunQuadraticLines; 44496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com firstTestIndex = 1; 45496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com#endif 46496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com int firstQuadraticLineTest = run == RunAll ? 0 : run == RunQuadraticLines ? firstTestIndex 47496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com : SK_MaxS32; 48496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com int firstQuadraticModLineTest = run == RunAll ? 0 : run == RunQuadraticModLines ? firstTestIndex 49496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com : SK_MaxS32; 50496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com 51496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com for (index = firstQuadraticLineTest; index < quadraticLines_count; ++index) { 52a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark const QuadPts& q = quadraticLines[index]; 53a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark SkDQuad quad; 54a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark quad.debugSet(q.fPts); 55927b7028d44c46e9cbc18368f16ec2262d59d94dcaryclark@google.com order = reducer.reduce(quad); 56496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com if (order != 2) { 57fab44db294846ff05d837b9cf0bf97a073891da7bungeman@google.com SkDebugf("[%d] line quad order=%d\n", (int) index, order); 58496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com } 59496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com } 60496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com for (index = firstQuadraticModLineTest; index < quadraticModEpsilonLines_count; ++index) { 61a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark const QuadPts& q = quadraticModEpsilonLines[index]; 62a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark SkDQuad quad; 63a35ab3e6e024d0b548ded26a2e3b8ecd838ead93caryclark quad.debugSet(q.fPts); 64927b7028d44c46e9cbc18368f16ec2262d59d94dcaryclark@google.com order = reducer.reduce(quad); 6565f553182ab7069378ef863d30094d0327f178d0caryclark if (order != 2 && order != 3) { // FIXME: data probably is not good 66fab44db294846ff05d837b9cf0bf97a073891da7bungeman@google.com SkDebugf("[%d] line mod quad order=%d\n", (int) index, order); 67496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com } 68496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com } 69496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com} 70496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com 7178e7b4e1b928fa69f672be3c743df6d6c3ecbcedtfarina@chromium.orgDEF_TEST(PathOpsReduceOrderQuad, reporter) { 72496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com oneOffTest(reporter); 73496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com standardTestCases(reporter); 74496120185c7baed4edf1c110f4f5b43f29bab1c0caryclark@google.com} 75