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