19e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com/*
29e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * Copyright 2012 Google Inc.
39e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com *
49e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * Use of this source code is governed by a BSD-style license that can be
59e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * found in the LICENSE file.
69e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com */
78dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com#include "Simplify.h"
8d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
9d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comnamespace UnitTest {
10d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
11d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com#include "EdgeWalker.cpp"
12d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
13d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com} // end of UnitTest namespace
14d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
15d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com#include "Intersection_Tests.h"
16d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
17d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comSkPoint leftRight[][4] = {
18d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com// equal length
19d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 10}, {10, 50},   {20, 10}, {20, 50}},
20d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 10}, {10, 50},   {10, 10}, {20, 50}},
21d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 10}, {10, 50},   {20, 10}, {10, 50}},
22d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com// left top higher
23d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10,  0}, {10, 50},   {20, 10}, {20, 50}},
24d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10,  0}, {10, 50},   {10, 10}, {20, 50}},
25d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10,  0}, {10, 50},   {20, 10}, {10, 50}},
26b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com    {{10,  0}, {10, 50},   {20, 10}, {10 + 0.000001f, 40}},
27d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com// left top lower
28d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 20}, {10, 50},   {20, 10}, {20, 50}},
29d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 20}, {10, 50},   {10, 10}, {20, 50}},
30d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 20}, {10, 50},   {20, 10}, {10, 50}},
31b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com    {{10, 20}, {10, 50},   {20, 10}, {10 + 0.000001f, 40}},
32d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 20}, {10, 50},   { 0,  0}, {50, 50}},
33d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com// left bottom higher
34d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 10}, {10, 40},   {20, 10}, {20, 50}},
35d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 10}, {10, 40},   {10, 10}, {20, 50}},
36d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 10}, {10, 40},   {20, 10}, {10, 50}},
37b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com    {{10, 10}, {10, 40},   {20, 10}, { 0 + 0.000001f, 70}},
38d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com// left bottom lower
39d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 10}, {10, 60},   {20, 10}, {20, 50}},
40d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    {{10, 10}, {10, 60},   {10, 10}, {20, 50}},
41b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com    {{10, 10}, {10, 60},   {20, 10}, {10 + 0.000001f, 50}},
42b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com    {{10, 10}, {10, 60},   {20, 10}, {10 + 0.000001f, 40}},
43b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com    {{10, 10}, {10, 60},   { 0,  0}, {20 + 0.000001f, 20}},
44d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com};
45d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
46d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comsize_t leftRightCount = sizeof(leftRight) / sizeof(leftRight[0]);
47d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
4878e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com// older code that worked mostly
4978e17130f396d8b2157116c2504e357192f87ed1caryclark@google.comstatic bool operator_less_than(const UnitTest::ActiveEdge& lh,
5078e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com        const UnitTest::ActiveEdge& rh) {
519f3e9a5a17a7546e1c5bfde1eb7e6e9c11870333caryclark@google.com    if ((rh.fAbove.fY - lh.fAbove.fY > lh.fBelow.fY - rh.fAbove.fY
529f3e9a5a17a7546e1c5bfde1eb7e6e9c11870333caryclark@google.com            && lh.fBelow.fY < rh.fBelow.fY)
539f3e9a5a17a7546e1c5bfde1eb7e6e9c11870333caryclark@google.com            || (lh.fAbove.fY - rh.fAbove.fY < rh.fBelow.fY - lh.fAbove.fY
549f3e9a5a17a7546e1c5bfde1eb7e6e9c11870333caryclark@google.com            && rh.fBelow.fY < lh.fBelow.fY)) {
5578e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com        const SkPoint& check = rh.fBelow.fY <= lh.fBelow.fY
5678e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com                && lh.fBelow != rh.fBelow ? rh.fBelow :
5778e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com                rh.fAbove;
5878e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com        return (check.fY - lh.fAbove.fY) * (lh.fBelow.fX - lh.fAbove.fX)
5978e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com                < (lh.fBelow.fY - lh.fAbove.fY) * (check.fX - lh.fAbove.fX);
6078e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com    }
61d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    const SkPoint& check = lh.fBelow.fY <= rh.fBelow.fY
6278e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com            && lh.fBelow != rh.fBelow ? lh.fBelow : lh.fAbove;
6378e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com    return (rh.fBelow.fY - rh.fAbove.fY) * (check.fX - rh.fAbove.fX)
6478e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com            < (check.fY - rh.fAbove.fY) * (rh.fBelow.fX - rh.fAbove.fX);
6578e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com}
6678e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com
6778e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com
68d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comvoid ActiveEdge_Test() {
69d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    UnitTest::InEdge leftIn, rightIn;
70d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    UnitTest::ActiveEdge left, right;
71d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    left.fWorkEdge.fEdge = &leftIn;
72d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    right.fWorkEdge.fEdge = &rightIn;
73d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    for (size_t x = 0; x < leftRightCount; ++x) {
74d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com        left.fAbove = leftRight[x][0];
75d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com        left.fTangent = left.fBelow = leftRight[x][1];
76d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com        right.fAbove = leftRight[x][2];
77fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com        right.fTangent = right.fBelow = leftRight[x][3];
78d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com        SkASSERT(left < right);
7978e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com        SkASSERT(operator_less_than(left, right));
80d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com        SkASSERT(!(right < left));
8178e17130f396d8b2157116c2504e357192f87ed1caryclark@google.com        SkASSERT(!operator_less_than(right, left));
82d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    }
83d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com}
84