PathOpsBoundsTest.cpp revision ad65a3e5fb1f94699f183551b828efbcc6a133ce
107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com/* 207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com * Copyright 2013 Google Inc. 307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com * 407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com * Use of this source code is governed by a BSD-style license that can be 507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com * found in the LICENSE file. 607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com */ 707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "SkPathOpsBounds.h" 807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "Test.h" 907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 1007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstatic const SkRect sectTests[][2] = { 1107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 0, 4, 1}, {4, 0, 6, 1}}, 1207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 0, 4, 1}, {3, 0, 5, 1}}, 1307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 0, 4, 1}, {3, 0, 5, 0}}, 1407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 0, 4, 1}, {3, 1, 5, 2}}, 1507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 1, 4, 2}, {1, 0, 5, 3}}, 1607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 1, 5, 3}, {3, 1, 4, 2}}, 1707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 0, 4, 1}, {3, 0, 3, 0}}, // intersecting an empty bounds is OK 1807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 0, 4, 1}, {4, 1, 5, 2}}, // touching just on a corner is OK 1907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com}; 2007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 21ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic const size_t sectTestsCount = SK_ARRAY_COUNT(sectTests); 2207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 2307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstatic const SkRect noSectTests[][2] = { 2407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 0, 4, 1}, {5, 0, 6, 1}}, 2507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{2, 0, 4, 1}, {3, 2, 5, 2}}, 2607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com}; 2707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 28ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic const size_t noSectTestsCount = SK_ARRAY_COUNT(noSectTests); 2907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 3007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstatic const SkRect reallyEmpty[] = { 3107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {0, 0, 0, 0}, 3207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {1, 1, 1, 0}, 3307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {1, 1, 0, 1}, 3407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {1, 1, 0, 0}, 3507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {1, 2, 3, SK_ScalarNaN}, 3607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com}; 3707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 38ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic const size_t emptyTestsCount = SK_ARRAY_COUNT(reallyEmpty); 3907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 4007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstatic const SkRect notReallyEmpty[] = { 4107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {0, 0, 1, 0}, 4207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {0, 0, 0, 1}, 4307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {0, 0, 1, 1}, 4407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com}; 4507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 46ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic const size_t notEmptyTestsCount = SK_ARRAY_COUNT(notReallyEmpty); 4707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 48ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic void PathOpsBoundsTest(skiatest::Reporter* reporter) { 4907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com for (size_t index = 0; index < sectTestsCount; ++index) { 5007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkPathOpsBounds& bounds1 = static_cast<const SkPathOpsBounds&>(sectTests[index][0]); 5107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkPathOpsBounds& bounds2 = static_cast<const SkPathOpsBounds&>(sectTests[index][1]); 5207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bool touches = SkPathOpsBounds::Intersects(bounds1, bounds2); 5307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, touches); 5407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com } 5507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com for (size_t index = 0; index < noSectTestsCount; ++index) { 5607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkPathOpsBounds& bounds1 = static_cast<const SkPathOpsBounds&>(noSectTests[index][0]); 5707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkPathOpsBounds& bounds2 = static_cast<const SkPathOpsBounds&>(noSectTests[index][1]); 5807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bool touches = SkPathOpsBounds::Intersects(bounds1, bounds2); 5907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, !touches); 6007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com } 6107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkPathOpsBounds bounds; 6207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.setEmpty(); 6307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.add(1, 2, 3, 4); 6407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkPathOpsBounds expected; 6507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com expected.set(0, 0, 3, 4); 6607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 6707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.setEmpty(); 6807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkPathOpsBounds ordinal; 6907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com ordinal.set(1, 2, 3, 4); 7007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.add(ordinal); 7107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 7207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkPoint topLeft = {0, 0}; 7307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.setPointBounds(topLeft); 7407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkPoint botRight = {3, 4}; 7507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.add(botRight); 7607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 7707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com for (size_t index = 0; index < emptyTestsCount; ++index) { 7807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkPathOpsBounds& bounds = static_cast<const SkPathOpsBounds&>(reallyEmpty[index]); 7907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bool empty = bounds.isReallyEmpty(); 8007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, empty); 8107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com } 8207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com for (size_t index = 0; index < notEmptyTestsCount; ++index) { 8307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkPathOpsBounds& bounds = static_cast<const SkPathOpsBounds&>(notReallyEmpty[index]); 8407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bool empty = bounds.isReallyEmpty(); 8507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, !empty); 8607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com } 8707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkPoint curvePts[] = {{0, 0}, {1, 2}, {3, 4}, {5, 6}}; 8807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.setLineBounds(curvePts); 8907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com expected.set(0, 0, 1, 2); 9007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 9107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com (bounds.*SetCurveBounds[1])(curvePts); 9207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 9307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.setQuadBounds(curvePts); 9407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com expected.set(0, 0, 3, 4); 9507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 9607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com (bounds.*SetCurveBounds[2])(curvePts); 9707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 9807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com bounds.setCubicBounds(curvePts); 9907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com expected.set(0, 0, 5, 6); 10007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 10107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com (bounds.*SetCurveBounds[3])(curvePts); 10207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, bounds == expected); 10307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com} 10407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 10507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "TestClassDef.h" 106ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comDEFINE_TESTCLASS_SHORT(PathOpsBoundsTest) 107