Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: tests/PathOpsOpTest.cpp

Issue 21359002: path ops work in progress (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: remove space Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/PathOpsLineIntersectionTest.cpp ('k') | tests/PathOpsQuadLineIntersectionTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 #include "PathOpsExtendedTest.h" 7 #include "PathOpsExtendedTest.h"
8 8
9 #define TEST(name) { name, #name } 9 #define TEST(name) { name, #name }
10 10
(...skipping 1969 matching lines...) Expand 10 before | Expand all | Expand 10 after
1980 path.moveTo(3, 4); 1980 path.moveTo(3, 4);
1981 path.cubicTo(1, 5, 4, 3, 6, 4); 1981 path.cubicTo(1, 5, 4, 3, 6, 4);
1982 path.close(); 1982 path.close();
1983 pathB.setFillType(SkPath::kWinding_FillType); 1983 pathB.setFillType(SkPath::kWinding_FillType);
1984 pathB.moveTo(3, 4); 1984 pathB.moveTo(3, 4);
1985 pathB.cubicTo(4, 6, 4, 3, 5, 1); 1985 pathB.cubicTo(4, 6, 4, 3, 5, 1);
1986 pathB.close(); 1986 pathB.close();
1987 testPathOp(reporter, path, pathB, kIntersect_PathOp); 1987 testPathOp(reporter, path, pathB, kIntersect_PathOp);
1988 } 1988 }
1989 1989
1990 static void issue1418b(skiatest::Reporter* reporter) {
1991 SkPath path1;
1992 path1.moveTo(0, 0);
1993 path1.lineTo(1, 0);
1994 path1.lineTo(1, 1);
1995 path1.lineTo(0, 1);
1996 path1.lineTo(0, 0);
1997 path1.close();
1998 path1.setFillType(SkPath::kWinding_FillType);
1999 SkPath path2;
2000 path2.moveTo(0.646446645f, -0.353553414f);
2001 path2.quadTo(0.792893291f, -0.50000006f, 1.00000012f, -0.50000006f);
2002 path2.quadTo(1.20710683f, -0.50000006f, 1.35355353f, -0.353553414f);
2003 path2.quadTo(1.50000012f, -0.207106799f, 1.50000012f, 0);
2004 path2.quadTo(1.50000012f, 0.207106799f, 1.35355353f, 0.353553414f);
2005 path2.quadTo(1.20710683f, 0.50000006f, 1.00000012f, 0.50000006f);
2006 path2.quadTo(0.792893291f, 0.50000006f, 0.646446645f, 0.353553414f);
2007 path2.quadTo(0.50000006f, 0.207106799f, 0.50000006f, 0);
2008 path2.quadTo(0.50000006f, -0.207106799f, 0.646446645f, -0.353553414f);
2009 path2.close();
2010 path2.moveTo(1.00000012f, 0.50000006f);
2011 path2.lineTo(1.00000012f, 1.00000012f);
2012 path2.lineTo(0.50000006f, 1.00000012f);
2013 path2.quadTo(0.50000006f, 0.792893291f, 0.646446645f, 0.646446645f);
2014 path2.quadTo(0.792893291f, 0.50000006f, 1.00000012f, 0.50000006f);
2015 path2.close();
2016 path2.setFillType(SkPath::kEvenOdd_FillType);
2017 testPathOp(reporter, path1, path2, kIntersect_PathOp);
2018 }
2019
2020 static void rectOp1i(skiatest::Reporter* reporter) {
2021 SkPath path, pathB;
2022 path.setFillType(SkPath::kWinding_FillType);
2023 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2024 path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
2025 pathB.setFillType(SkPath::kWinding_FillType);
2026 pathB.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2027 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
2028 testPathOp(reporter, path, pathB, kIntersect_PathOp);
2029 }
2030
2031 static void rectOp2i(skiatest::Reporter* reporter) {
2032 SkPath path, pathB;
2033 path.setFillType(SkPath::kEvenOdd_FillType);
2034 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
2035 path.addRect(0, 0, 3, 3, SkPath::kCW_Direction);
2036 pathB.setFillType(SkPath::kWinding_FillType);
2037 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
2038 pathB.addRect(0, 0, 2, 2, SkPath::kCW_Direction);
2039 testPathOp(reporter, path, pathB, kIntersect_PathOp);
2040 }
2041
2042 static void rectOp3x(skiatest::Reporter* reporter) {
2043 SkPath path, pathB;
2044 path.setFillType(SkPath::kEvenOdd_FillType);
2045 path.moveTo(0, 0);
2046 path.lineTo(3, 0);
2047 path.lineTo(3, 3);
2048 path.lineTo(0, 3);
2049 path.close();
2050 path.moveTo(2, 2);
2051 path.lineTo(3, 2);
2052 path.lineTo(3, 3);
2053 path.lineTo(2, 3);
2054 path.close();
2055 pathB.setFillType(SkPath::kWinding_FillType);
2056 pathB.moveTo(1, 1);
2057 pathB.lineTo(3, 1);
2058 pathB.lineTo(3, 3);
2059 pathB.lineTo(1, 3);
2060 pathB.close();
2061 pathB.moveTo(2, 2);
2062 pathB.lineTo(3, 2);
2063 pathB.lineTo(3, 3);
2064 pathB.lineTo(2, 3);
2065 pathB.close();
2066 testPathOp(reporter, path, pathB, kXOR_PathOp);
2067 }
2068
2069 #if 0
2070 static void issue1435(skiatest::Reporter* reporter) {
2071 SkPath path1;
2072 path1.moveTo(160, 60);
2073 path1.lineTo(220, 230);
2074 path1.lineTo(60, 120);
2075 path1.lineTo(260, 120);
2076 path1.lineTo(90, 230);
2077 path1.lineTo(160, 60);
2078 path1.close();
2079 path1.setFillType(SkPath::kEvenOdd_FillType);
2080
2081
2082 SkPath path2;
2083 path2.moveTo(142.589081f, 102.283646f);
2084 path2.quadTo(149.821579f, 100, 158, 100);
2085 path2.quadTo(167.156921f, 100, 175.128036f, 102.862793f);
2086 path2.lineTo(181.176468f, 120);
2087 path2.lineTo(135.294128f, 120);
2088 path2.lineTo(142.589081f, 102.283646f);
2089 path2.close();
2090 path2.moveTo(118.681946f, 160.343842f);
2091 path2.lineTo(135.294128f, 120);
2092 path2.lineTo(117.933762f, 120);
2093 path2.quadTo(108, 132.942657f, 108, 150);
2094 path2.quadTo(108, 151.54483f, 108.08149f, 153.05603f);
2095 path2.lineTo(118.681946f, 160.343842f);
2096 path2.close();
2097 path2.moveTo(156.969696f, 186.666672f);
2098 path2.lineTo(118.681946f, 160.343842f);
2099 path2.lineTo(113.458946f, 173.028259f);
2100 path2.quadTo(116.94117f, 179.651855f, 122.644661f, 185.355347f);
2101 path2.quadTo(130.792465f, 193.503143f, 140.817978f, 197.117783f);
2102 path2.lineTo(156.969696f, 186.666672f);
2103 path2.close();
2104 path2.moveTo(195.830978f, 161.521133f);
2105 path2.lineTo(156.969696f, 186.666672f);
2106 path2.lineTo(173.157288f, 197.795639f);
2107 path2.quadTo(184.392426f, 194.318268f, 193.355347f, 185.355347f);
2108 path2.quadTo(197.805817f, 180.904861f, 200.903809f, 175.894165f);
2109 path2.lineTo(195.830978f, 161.521133f);
2110 path2.close();
2111 path2.moveTo(195.830978f, 161.521133f);
2112 path2.lineTo(207.878281f, 153.725815f);
2113 path2.quadTo(208, 151.888062f, 208, 150);
2114 path2.quadTo(208, 132.942657f, 198.066238f, 120);
2115 path2.lineTo(181.176468f, 120);
2116 path2.lineTo(195.830978f, 161.521133f);
2117 path2.close();
2118 path2.setFillType(SkPath::kEvenOdd_FillType);
2119 testPathOp(reporter, path1, path2, kIntersect_PathOp);
2120 }
2121 #endif
2122
2123 #if 0
2124 static void bufferOverflow(skiatest::Reporter* reporter) {
2125 SkPath path;
2126 path.addRect(0,0, 300,170141183460469231731687303715884105728.);
2127 SkPath pathB;
2128 pathB.addRect(0,0, 300,16);
2129 testPathOp(reporter, path, pathB, kUnion_PathOp);
2130 }
2131 #endif
2132
1990 #if 0 2133 #if 0
1991 static void skpkkiste_to716(skiatest::Reporter* reporter) { 2134 static void skpkkiste_to716(skiatest::Reporter* reporter) {
1992 SkPath path; 2135 SkPath path;
1993 path.setFillType(SkPath::kEvenOdd_FillType); 2136 path.setFillType(SkPath::kEvenOdd_FillType);
1994 path.moveTo(1173, 284); 2137 path.moveTo(1173, 284);
1995 path.cubicTo(1173, 285.125824f, 1173.37207f, 286.164734f, 1174, 287.000488f) ; 2138 path.cubicTo(1173, 285.125824f, 1173.37207f, 286.164734f, 1174, 287.000488f) ;
1996 path.lineTo(1174, 123.999496f); 2139 path.lineTo(1174, 123.999496f);
1997 path.cubicTo(1173.37207f, 124.835243f, 1173, 125.874168f, 1173, 127); 2140 path.cubicTo(1173.37207f, 124.835243f, 1173, 125.874168f, 1173, 127);
1998 path.lineTo(1173, 284); 2141 path.lineTo(1173, 284);
1999 path.close(); 2142 path.close();
2000 SkPath pathB; 2143 SkPath pathB;
2001 pathB.setFillType(SkPath::kWinding_FillType); 2144 pathB.setFillType(SkPath::kWinding_FillType);
2002 pathB.moveTo(1340, 122); 2145 pathB.moveTo(1340, 122);
2003 pathB.cubicTo(1342.76147f, 122, 1345, 124.238579f, 1345, 127); 2146 pathB.cubicTo(1342.76147f, 122, 1345, 124.238579f, 1345, 127);
2004 pathB.lineTo(1345, 284); 2147 pathB.lineTo(1345, 284);
2005 pathB.cubicTo(1345, 286.761414f, 1342.76147f, 289, 1340, 289); 2148 pathB.cubicTo(1345, 286.761414f, 1342.76147f, 289, 1340, 289);
2006 pathB.lineTo(1178, 289); 2149 pathB.lineTo(1178, 289);
2007 pathB.cubicTo(1175.23853f, 289, 1173, 286.761414f, 1173, 284); 2150 pathB.cubicTo(1175.23853f, 289, 1173, 286.761414f, 1173, 284);
2008 pathB.lineTo(1173, 127); 2151 pathB.lineTo(1173, 127);
2009 pathB.cubicTo(1173, 124.238579f, 1175.23853f, 122, 1178, 122); 2152 pathB.cubicTo(1173, 124.238579f, 1175.23853f, 122, 1178, 122);
2010 pathB.lineTo(1340, 122); 2153 pathB.lineTo(1340, 122);
2011 pathB.close(); 2154 pathB.close();
2012 testPathOp(reporter, path, pathB, kIntersect_PathOp); 2155 testPathOp(reporter, path, pathB, kIntersect_PathOp);
2013 } 2156 }
2014 #endif 2157 #endif
2015 2158
2159 static void loopEdge1(skiatest::Reporter* reporter) {
2160 SkPath path;
2161 path.setFillType(SkPath::kEvenOdd_FillType);
2162 path.moveTo(0,0);
2163 path.lineTo(3,0);
2164 path.lineTo(3,2);
2165 path.lineTo(1,2);
2166 path.lineTo(1,1);
2167 path.lineTo(2,1);
2168 path.lineTo(2,3);
2169 path.lineTo(0,3);
2170 path.close();
2171 SkPath pathB;
2172 pathB.setFillType(SkPath::kEvenOdd_FillType);
2173 pathB.moveTo(1,2);
2174 pathB.lineTo(2,2);
2175 pathB.lineTo(2,4);
2176 pathB.lineTo(1,4);
2177 pathB.close();
2178 testPathOp(reporter, path, pathB, kIntersect_PathOp);
2179 }
2180
2181 static void loopEdge2(skiatest::Reporter* reporter) {
2182 SkPath path;
2183 path.setFillType(SkPath::kEvenOdd_FillType);
2184 path.moveTo(0,0);
2185 path.lineTo(3,0);
2186 path.lineTo(3,2);
2187 path.lineTo(1,2);
2188 path.lineTo(1,1);
2189 path.lineTo(2,1);
2190 path.lineTo(2,3);
2191 path.lineTo(0,3);
2192 path.close();
2193 SkPath pathB;
2194 pathB.setFillType(SkPath::kEvenOdd_FillType);
2195 pathB.moveTo(1 - 1e-6f,2);
2196 pathB.lineTo(2 - 1e-6f,2);
2197 pathB.lineTo(2 - 1e-6f,4);
2198 pathB.lineTo(1 - 1e-6f,4);
2199 pathB.close();
2200 testPathOp(reporter, path, pathB, kIntersect_PathOp);
2201 }
2202
2203 static void cubicOp86i(skiatest::Reporter* reporter) {
2204 SkPath path, pathB;
2205 path.setFillType(SkPath::kWinding_FillType);
2206 path.moveTo(0, 4);
2207 path.cubicTo(3, 4, 6, 2, 5, 2);
2208 path.close();
2209 pathB.setFillType(SkPath::kEvenOdd_FillType);
2210 pathB.moveTo(2, 6);
2211 pathB.cubicTo(2, 5, 4, 0, 4, 3);
2212 pathB.close();
2213 testPathOp(reporter, path, pathB, kIntersect_PathOp);
2214 }
2215
2216 static void cubicOp87u(skiatest::Reporter* reporter) {
2217 SkPath path, pathB;
2218 path.setFillType(SkPath::kWinding_FillType);
2219 path.moveTo(0,1);
2220 path.cubicTo(0,2, 2,0, 6,4);
2221 path.close();
2222 pathB.setFillType(SkPath::kWinding_FillType);
2223 pathB.moveTo(0,2);
2224 pathB.cubicTo(4,6, 1,0, 2,0);
2225 pathB.close();
2226 testPathOp(reporter, path, pathB, kUnion_PathOp);
2227 }
2228
2229 static void cubicOp88u(skiatest::Reporter* reporter) {
2230 SkPath path, pathB;
2231 path.setFillType(SkPath::kWinding_FillType);
2232 path.moveTo(0,1);
2233 path.cubicTo(2,5, 5,0, 6,4);
2234 path.close();
2235 pathB.setFillType(SkPath::kWinding_FillType);
2236 pathB.moveTo(0,5);
2237 pathB.cubicTo(4,6, 1,0, 5,2);
2238 pathB.close();
2239 testPathOp(reporter, path, pathB, kUnion_PathOp);
2240 }
2241
2242 static void cubicOp89u(skiatest::Reporter* reporter) {
2243 SkPath path, pathB;
2244 path.setFillType(SkPath::kWinding_FillType);
2245 path.moveTo(0, 3);
2246 path.cubicTo(1, 6, 5, 0, 6, 3);
2247 path.close();
2248 pathB.setFillType(SkPath::kWinding_FillType);
2249 pathB.moveTo(0, 5);
2250 pathB.cubicTo(3, 6, 3, 0, 6, 1);
2251 pathB.close();
2252 testPathOp(reporter, path, pathB, kUnion_PathOp);
2253 }
2254
2255 static void cubicOp90u(skiatest::Reporter* reporter) {
2256 SkPath path, pathB;
2257 path.setFillType(SkPath::kEvenOdd_FillType);
2258 path.moveTo(0, 5);
2259 path.cubicTo(1, 2, 5, 2, 4, 1);
2260 path.close();
2261 pathB.setFillType(SkPath::kEvenOdd_FillType);
2262 pathB.moveTo(2, 5);
2263 pathB.cubicTo(1, 4, 5, 0, 2, 1);
2264 pathB.close();
2265 testPathOp(reporter, path, pathB, kUnion_PathOp);
2266 }
2267
2268 static void cubicOp91u(skiatest::Reporter* reporter) {
2269 SkPath path, pathB;
2270 path.setFillType(SkPath::kWinding_FillType);
2271 path.moveTo(1, 6);
2272 path.cubicTo(0, 3, 6, 3, 5, 0);
2273 path.close();
2274 pathB.setFillType(SkPath::kWinding_FillType);
2275 pathB.moveTo(3, 6);
2276 pathB.cubicTo(0, 5, 6, 1, 3, 0);
2277 pathB.close();
2278 testPathOp(reporter, path, pathB, kUnion_PathOp);
2279 }
2016 static void (*firstTest)(skiatest::Reporter* ) = 0; 2280 static void (*firstTest)(skiatest::Reporter* ) = 0;
2017 2281
2018 static struct TestDesc tests[] = { 2282 static struct TestDesc tests[] = {
2019 // TEST(skpkkiste_to716), 2283 // TEST(skpkkiste_to716),
2284 // TEST(bufferOverflow),
2285 // TEST(issue1435),
2286 TEST(cubicOp91u),
2287 TEST(cubicOp90u),
2288 TEST(cubicOp89u),
2289 TEST(cubicOp88u),
2290 TEST(cubicOp87u),
2291 TEST(cubicOp86i),
2292 TEST(loopEdge2),
2293 TEST(loopEdge1),
2294 TEST(rectOp3x),
2295 TEST(rectOp2i),
2296 TEST(rectOp1i),
2297 TEST(issue1418b),
2020 TEST(cubicOp85i), 2298 TEST(cubicOp85i),
2021 TEST(issue1417), 2299 TEST(issue1417),
2022 TEST(issue1418), 2300 TEST(issue1418),
2023 TEST(skpkkiste_to98), 2301 TEST(skpkkiste_to98),
2024 TEST(skpahrefs_com29), 2302 TEST(skpahrefs_com29),
2025 TEST(cubicOp85d), 2303 TEST(cubicOp85d),
2026 TEST(skpahrefs_com88), 2304 TEST(skpahrefs_com88),
2027 TEST(skphealth_com76), 2305 TEST(skphealth_com76),
2028 TEST(skpancestry_com1), 2306 TEST(skpancestry_com1),
2029 TEST(skpbyte_com1), 2307 TEST(skpbyte_com1),
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
2160 static const size_t subTestCount = SK_ARRAY_COUNT(subTests); 2438 static const size_t subTestCount = SK_ARRAY_COUNT(subTests);
2161 2439
2162 static void (*firstSubTest)(skiatest::Reporter* ) = 0; 2440 static void (*firstSubTest)(skiatest::Reporter* ) = 0;
2163 2441
2164 static bool runSubTestsFirst = false; 2442 static bool runSubTestsFirst = false;
2165 static bool runReverse = false; 2443 static bool runReverse = false;
2166 static void (*stopTest)(skiatest::Reporter* ) = 0; 2444 static void (*stopTest)(skiatest::Reporter* ) = 0;
2167 2445
2168 static void PathOpsOpTest(skiatest::Reporter* reporter) { 2446 static void PathOpsOpTest(skiatest::Reporter* reporter) {
2169 #ifdef SK_DEBUG 2447 #ifdef SK_DEBUG
2170 gDebugMaxWindSum = 4; 2448 SkPathOpsDebug::gMaxWindSum = 4;
2171 gDebugMaxWindValue = 4; 2449 SkPathOpsDebug::gMaxWindValue = 4;
2172 #endif 2450 #endif
2173 #if DEBUG_SHOW_TEST_NAME 2451 #if DEBUG_SHOW_TEST_NAME
2174 strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH); 2452 strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
2175 #endif 2453 #endif
2176 if (runSubTestsFirst) { 2454 if (runSubTestsFirst) {
2177 RunTestSet(reporter, subTests, subTestCount, firstSubTest, stopTest, run Reverse); 2455 RunTestSet(reporter, subTests, subTestCount, firstSubTest, stopTest, run Reverse);
2178 } 2456 }
2179 RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse); 2457 RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse);
2180 if (!runSubTestsFirst) { 2458 if (!runSubTestsFirst) {
2181 RunTestSet(reporter, subTests, subTestCount, firstSubTest, stopTest, run Reverse); 2459 RunTestSet(reporter, subTests, subTestCount, firstSubTest, stopTest, run Reverse);
2182 } 2460 }
2183 #ifdef SK_DEBUG 2461 #ifdef SK_DEBUG
2184 gDebugMaxWindSum = SK_MaxS32; 2462 SkPathOpsDebug::gMaxWindSum = SK_MaxS32;
2185 gDebugMaxWindValue = SK_MaxS32; 2463 SkPathOpsDebug::gMaxWindValue = SK_MaxS32;
2186 #endif 2464 #endif
2187 } 2465 }
2188 2466
2189 #include "TestClassDef.h" 2467 #include "TestClassDef.h"
2190 DEFINE_TESTCLASS_SHORT(PathOpsOpTest) 2468 DEFINE_TESTCLASS_SHORT(PathOpsOpTest)
OLDNEW
« no previous file with comments | « tests/PathOpsLineIntersectionTest.cpp ('k') | tests/PathOpsQuadLineIntersectionTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698