17839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger/* 27839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Copyright 2012 Google Inc. 37839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * 47839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Use of this source code is governed by a BSD-style license that can be 57839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * found in the LICENSE file. 67839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger */ 758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "PathOpsTestCommon.h" 87839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkPathOpsLine.h" 97839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "Test.h" 107839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 117839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerstatic const SkDLine tests[] = { 127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {{{2, 1}, {2, 1}}}, 137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {{{2, 1}, {1, 1}}}, 147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {{{2, 1}, {2, 2}}}, 157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {{{1, 1}, {2, 2}}}, 167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {{{3, 0}, {2, 1}}}, 177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {{{3, 2}, {1, 1}}}, 187839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger}; 197839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 207839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerstatic const SkDPoint left[] = { 217839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {2, 1}, 227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {1, 0}, 237839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {1, 1}, 247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {1, 2}, 257839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {2, 0}, 267839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger {2, 1} 277839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger}; 287839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 297839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerstatic const size_t tests_count = SK_ARRAY_COUNT(tests); 307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerstatic void PathOpsLineUtilitiesTest(skiatest::Reporter* reporter) { 327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger for (size_t index = 0; index < tests_count; ++index) { 337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const SkDLine& line = tests[index]; 3458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkASSERT(ValidLine(line)); 357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkDLine line2; 367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkPoint pts[2] = {line[0].asSkPoint(), line[1].asSkPoint()}; 377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger line2.set(pts); 387839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, line[0] == line2[0] && line[1] == line2[1]); 397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const SkDPoint& pt = left[index]; 4058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkASSERT(ValidPoint(pt)); 417839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger double result = line.isLeft(pt); 427839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger if ((result <= 0 && index >= 1) || (result < 0 && index == 0)) { 437839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkDebugf("%s [%d] expected left\n", __FUNCTION__, index); 447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, 0); 457839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 467839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger line2 = line.subDivide(1, 0); 477839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, line[0] == line2[1] && line[1] == line2[0]); 487839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger line2 = SkDLine::SubDivide(pts, 1, 0); 497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, line[0] == line2[1] && line[1] == line2[0]); 5058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkDPoint mid = line.ptAtT(.5); 517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, approximately_equal((line[0].fX + line[1].fX) / 2, mid.fX)); 527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger REPORTER_ASSERT(reporter, approximately_equal((line[0].fY + line[1].fY) / 2, mid.fY)); 537839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 547839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger} 557839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 567839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "TestClassDef.h" 577839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek SollenbergerDEFINE_TESTCLASS_SHORT(PathOpsLineUtilitiesTest) 58