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 */
74917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com#include "EdgeWalker_Test.h"
84917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com#include "Intersection_Tests.h"
9198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com#include "SkBitmap.h"
10198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com
11198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.comstatic SkBitmap bitmap;
124917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
134917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void testSimplifyQuad1() {
144917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    SkPath path, out;
154917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
164917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 0);
174917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(3, 2);
184917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(3, 3);
194917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
204917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(1, 0);
214917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 3);
224917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 3);
234917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 3);
244917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
25198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
262e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
272e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
282e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifyQuad2() {
292e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    SkPath path, out;
302e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
312e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 0);
322e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 0);
332e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 2);
342e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
352e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 1);
362e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 1);
372e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 1);
382e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 2);
392e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
40198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
412e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
422e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
432e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifyQuad3() {
442e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    SkPath path, out;
452e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
462e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 0);
472e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 0);
482e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 2);
492e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
502e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 1);
512e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 1);
522e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(2, 1);
532e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 2);
542e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
55198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
562e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
572e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
582e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifyQuad4() {
592e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    SkPath path, out;
602e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
612e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 0);
622e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 0);
632e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(2, 2);
642e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
652e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
662e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(2, 1);
672e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(3, 1);
682e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(3, 3);
692e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
70198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
712e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
722e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
732e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifyQuad5() {
742e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    SkPath path, out;
752e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
762e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 0);
772e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 0);
782e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(3, 2);
792e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
802e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 1);
812e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 1);
822e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(2, 1);
832e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 2);
842e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
85198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
862e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
872e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
882e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifyQuad6() {
892e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    SkPath path, out;
902e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
912e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 0);
922e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 1);
932e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(3, 3);
942e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
952e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(1, 1);
962e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 1);
972e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 1);
982e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(2, 2);
992e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
100198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
1014917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
1024917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
1034917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void (*simplifyTests[])() = {
1042e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifyQuad6,
1052e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifyQuad5,
1062e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifyQuad4,
1072e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifyQuad3,
1082e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifyQuad2,
1094917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    testSimplifyQuad1,
1104917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com};
1114917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
1124917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic size_t simplifyTestsCount = sizeof(simplifyTests) / sizeof(simplifyTests[0]);
1134917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
1144917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void (*firstTest)() = 0;
1154917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
1164917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comvoid SimplifyQuadralateralPaths_Test() {
1174917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    size_t index = 0;
1184917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    if (firstTest) {
1194917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com        while (index < simplifyTestsCount && simplifyTests[index] != firstTest) {
1204917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com            ++index;
1214917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com        }
1224917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    }
1234917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    for ( ; index < simplifyTestsCount; ++index) {
1244917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com        (*simplifyTests[index])();
1254917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    }
1264917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
127