107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com/* 207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com * Copyright 2012 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 */ 78d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com#include "PathOpsTestCommon.h" 807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "SkPathOpsCubic.h" 907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "SkPathOpsLine.h" 1007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "SkPathOpsQuad.h" 1107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "SkPathOpsRect.h" 1207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "Test.h" 1307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 1407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstatic const SkDQuad quadTests[] = { 1507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{{1, 1}, {2, 1}, {0, 2}}}, 1607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{{0, 0}, {1, 1}, {3, 1}}}, 1707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{{2, 0}, {1, 1}, {2, 2}}}, 1807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{{4, 0}, {0, 1}, {4, 2}}}, 1907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{{0, 0}, {0, 1}, {1, 1}}}, 2007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com}; 2107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 2207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstatic const SkDCubic cubicTests[] = { 2307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{{2, 0}, {3, 1}, {2, 2}, {1, 1}}}, 2407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{{3, 1}, {2, 2}, {1, 1}, {2, 0}}}, 2507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com {{{3, 0}, {2, 1}, {3, 2}, {1, 1}}}, 2607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com}; 2707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 28ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic const size_t quadTests_count = SK_ARRAY_COUNT(quadTests); 29ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic const size_t cubicTests_count = SK_ARRAY_COUNT(cubicTests); 3007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com 3154359294a7c9dc54802d512a5d891a35c1663392caryclarkstatic void setRawBounds(const SkDQuad& quad, SkDRect* rect) { 3254359294a7c9dc54802d512a5d891a35c1663392caryclark rect->set(quad[0]); 3354359294a7c9dc54802d512a5d891a35c1663392caryclark rect->add(quad[1]); 3454359294a7c9dc54802d512a5d891a35c1663392caryclark rect->add(quad[2]); 3554359294a7c9dc54802d512a5d891a35c1663392caryclark} 3654359294a7c9dc54802d512a5d891a35c1663392caryclark 3754359294a7c9dc54802d512a5d891a35c1663392caryclarkstatic void setRawBounds(const SkDCubic& cubic, SkDRect* rect) { 3854359294a7c9dc54802d512a5d891a35c1663392caryclark rect->set(cubic[0]); 3954359294a7c9dc54802d512a5d891a35c1663392caryclark rect->add(cubic[1]); 4054359294a7c9dc54802d512a5d891a35c1663392caryclark rect->add(cubic[2]); 4154359294a7c9dc54802d512a5d891a35c1663392caryclark rect->add(cubic[3]); 4254359294a7c9dc54802d512a5d891a35c1663392caryclark} 4354359294a7c9dc54802d512a5d891a35c1663392caryclark 4478e7b4e1b928fa69f672be3c743df6d6c3ecbcedtfarina@chromium.orgDEF_TEST(PathOpsDRect, reporter) { 4507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com size_t index; 4607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkDRect rect, rect2; 4707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com for (index = 0; index < quadTests_count; ++index) { 4807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkDQuad& quad = quadTests[index]; 498d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com SkASSERT(ValidQuad(quad)); 5054359294a7c9dc54802d512a5d891a35c1663392caryclark setRawBounds(quad, &rect); 5107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com rect2.setBounds(quad); 5254359294a7c9dc54802d512a5d891a35c1663392caryclark REPORTER_ASSERT(reporter, rect.intersects(rect2)); 5307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com // FIXME: add a recursive box subdivision method to verify that tight bounds is correct 5407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkDPoint leftTop = {rect2.fLeft, rect2.fTop}; 5507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, rect.contains(leftTop)); 5607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkDPoint rightBottom = {rect2.fRight, rect2.fBottom}; 5707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, rect.contains(rightBottom)); 5807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com } 5907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com for (index = 0; index < cubicTests_count; ++index) { 6007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com const SkDCubic& cubic = cubicTests[index]; 618d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com SkASSERT(ValidCubic(cubic)); 6254359294a7c9dc54802d512a5d891a35c1663392caryclark setRawBounds(cubic, &rect); 6307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com rect2.setBounds(cubic); 6454359294a7c9dc54802d512a5d891a35c1663392caryclark REPORTER_ASSERT(reporter, rect.intersects(rect2)); 6507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com // FIXME: add a recursive box subdivision method to verify that tight bounds is correct 6607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkDPoint leftTop = {rect2.fLeft, rect2.fTop}; 6707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, rect.contains(leftTop)); 6807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com SkDPoint rightBottom = {rect2.fRight, rect2.fBottom}; 6907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com REPORTER_ASSERT(reporter, rect.contains(rightBottom)); 7007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com } 7107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com} 72