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 "SkPathOpsLine.h"
907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com#include "Test.h"
1007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
1107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstatic const SkDLine tests[] = {
1207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {{{2, 1}, {2, 1}}},
1307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {{{2, 1}, {1, 1}}},
1407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {{{2, 1}, {2, 2}}},
1507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {{{1, 1}, {2, 2}}},
1607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {{{3, 0}, {2, 1}}},
1707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {{{3, 2}, {1, 1}}},
1807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com};
1907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
2007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.comstatic const SkDPoint left[] = {
2107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {2, 1},
2207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {1, 0},
2307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {1, 1},
2407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {1, 2},
2507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {2, 0},
2607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    {2, 1}
2707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com};
2807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
29ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.comstatic const size_t tests_count = SK_ARRAY_COUNT(tests);
3007393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com
3178e7b4e1b928fa69f672be3c743df6d6c3ecbcedtfarina@chromium.orgDEF_TEST(PathOpsLineUtilities, reporter) {
3207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    for (size_t index = 0; index < tests_count; ++index) {
3307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        const SkDLine& line = tests[index];
348d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com        SkASSERT(ValidLine(line));
3507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        SkDLine line2;
3607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        SkPoint pts[2] = {line[0].asSkPoint(), line[1].asSkPoint()};
3707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        line2.set(pts);
3807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        REPORTER_ASSERT(reporter, line[0] == line2[0] && line[1] == line2[1]);
3907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        const SkDPoint& pt = left[index];
408d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com        SkASSERT(ValidPoint(pt));
4107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        double result = line.isLeft(pt);
4207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        if ((result <= 0 && index >= 1) || (result < 0 && index == 0)) {
4307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com            SkDebugf("%s [%d] expected left\n", __FUNCTION__, index);
4407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com            REPORTER_ASSERT(reporter, 0);
4507393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        }
4607393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        line2 = line.subDivide(1, 0);
4707393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        REPORTER_ASSERT(reporter, line[0] == line2[1] && line[1] == line2[0]);
4807393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        line2 = SkDLine::SubDivide(pts, 1, 0);
4907393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        REPORTER_ASSERT(reporter, line[0] == line2[1] && line[1] == line2[0]);
504fdbb229649caf74e5c1b55a1823926df903af34caryclark@google.com        SkDPoint mid = line.ptAtT(.5);
5107393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        REPORTER_ASSERT(reporter, approximately_equal((line[0].fX + line[1].fX) / 2, mid.fX));
5207393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com        REPORTER_ASSERT(reporter, approximately_equal((line[0].fY + line[1].fY) / 2, mid.fY));
5307393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com    }
5407393cab57ce74a4aae89a31fae9aaa9780fc19dcaryclark@google.com}
55