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 */
7cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com#include "EdgeWalker_Test.h"
8cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com#include "Intersection_Tests.h"
9198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com#include "SkBitmap.h"
10198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com
11198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.comstatic SkBitmap bitmap;
12cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
13cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle() {
14cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
15cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.setFillType(SkPath::kWinding_FillType);
16cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(10,10); // triangle      |\      .
17cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(10,30); //               |_\     .
18cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(20,30);
19cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
20cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(20,10); // triangle        /|
21cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(10,30); //                /_|
22cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(20,30);
23cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
24198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap); // expect |\/|
25d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com                                   //        |__|
26cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
27cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
28cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle3() {
29cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
30cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
31cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
32cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
33cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
34cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
35cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
36cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(3, 1);
37cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
38198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
39cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
40cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
41cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle4() {
42cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
43cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
44cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
45cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
46cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
47cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
48cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
49cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(2, 1);
50cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
51198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
52cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
53cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
54cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle5() {
55cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
56cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
57cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
58cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
59cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
60cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
61cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 1);
62cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(2, 1);
63cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
64198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
65cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
66cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
67cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle6() {
68cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
69cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
70cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
71cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
72cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
73cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
74cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
75cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
76cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(3, 1);
77cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
78cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
79198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
80cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
81cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
82cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle7() {
83cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
84cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
85cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
86cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
87cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
88cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
89cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
90cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 1);
91cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 2);
92cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
93cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
94198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
95cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
96cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
97cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle8() {
98cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
99cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
100cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
101cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
102cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
103cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
104cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 1);
105cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 2);
106cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 3);
107cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
108cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
109198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
110cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
111cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
112cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle9() {
113cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
114cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
115cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
116cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 1);
117cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
118cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
119cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
120cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 1);
121cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(2, 1);
122cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
123cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
124198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
125cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
126cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
127cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle10() {
128cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
129cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
130cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
131cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 1);
132cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
133cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
134cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
135cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(2, 0);
136cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
137cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
138cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
139198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
140cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
141cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
142cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle11() {
143cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
144cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
145cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
146cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 2);
147cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
148cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
149cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
150cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(2, 1);
151cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(2, 2);
152cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
153cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
154198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
155cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
156cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
157cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle12() {
158cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
159cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
160cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
161cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 2);
162cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
163cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
164cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(2, 0);
165cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 3);
166cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 1);
167cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(2, 0);
168cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
169198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
170cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
171cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
172cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle13() {
173cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
174cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
175cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
176cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 3);
177cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
178cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
179cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(3, 0);
180cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 3);
181cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 1);
182cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(3, 0);
183cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
184198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
185cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
186cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
187cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle14() {
188cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
189cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
190cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
191cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
192cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
193cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
194cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
195cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 0);
196cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
197cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 0);
198cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
199198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
200cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
201cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
202cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle15() {
203cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
204cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.setFillType(SkPath::kEvenOdd_FillType);
205cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
206cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
207cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 2);
208cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
209cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
210cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
211cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(2, 2);
212cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
213198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
214cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
215cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
216cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle16() {
217cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
218cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
219cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
220cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 2);
221cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
222cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
223cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
224cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 3);
225cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
226198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
227cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
228cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
229cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle17() {
230cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
231cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
232cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
233cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 2);
234cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
235cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(0, 0);
236cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(1, 3);
237cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(0, 1);
238cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
239198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
240cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
241d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
2424917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void testSimplifyTriangle18() {
2434917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    SkPath path, out;
2444917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
2454917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 1);
2464917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 2);
2474917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
2484917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(1, 0);
2494917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 1);
2504917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 3);
2514917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
252198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
2534917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
2544917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
2554917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void testSimplifyTriangle19() {
2564917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    SkPath path, out;
2574917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.setFillType(SkPath::kEvenOdd_FillType);
2584917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
2594917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 1);
2604917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(3, 2);
2614917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
2624917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
2634917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 1);
2644917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(2, 1);
2654917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
266198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
2674917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
2684917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
2694917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void testSimplifyTriangle20() {
2704917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    SkPath path, out;
2714917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
2724917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(2, 1);
2734917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 3);
2744917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
2754917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(2, 0);
2764917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(3, 2);
2774917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 3);
2784917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
279198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
2804917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
2814917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
2824917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void testSimplifyTriangle21() {
2834917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    SkPath path, out;
2844917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
2854917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 0);
2864917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 2);
2874917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
2884917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(2, 0);
2894917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(2, 1);
2904917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 3);
2914917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
292198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
2934917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
2944917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
2954917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void testSimplifyDegenerateTriangle1() {
2964917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    SkPath path, out;
2974917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
2984917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 0);
2994917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 0);
3004917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
3014917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
3024917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 0);
3034917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(0, 0);
3044917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
305198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
3064917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
3074917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
3084917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.comstatic void testSimplifyDegenerateTriangle2() {
3094917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    SkPath path, out;
3104917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(0, 0);
3114917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(1, 1);
3124917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(2, 2);
3134917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
3144917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.moveTo(1, 0);
3154917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(2, 2);
3164917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.lineTo(3, 3);
3174917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    path.close();
318198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
3194917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com}
3204917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com
321cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyWindingParallelogram() {
322cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
323cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.setFillType(SkPath::kWinding_FillType);
324d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    path.moveTo(20,10); // parallelogram  _
325cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(30,30); //               \ \      .
326cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(40,30); //                \_\     .
327cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(30,10);
328cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
329cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(20,10); // parallelogram   _
330cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(10,30); //                / /
331cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(20,30); //               /_/
332cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(30,10);
333cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
334198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap); // expect   _
335d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com                                   //         / \     .
3362e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}                                  //        /___\    .
337cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
338cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyXorParallelogram() {
339cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
340cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.setFillType(SkPath::kEvenOdd_FillType);
341d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    path.moveTo(20,10); // parallelogram  _
342cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(30,30); //               \ \      .
343cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(40,30); //                \_\     .
344cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(30,10);
345cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
346cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(20,10); // parallelogram   _
347cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(10,30); //                / /
348cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(20,30); //               /_/
349cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(30,10);
350cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
351198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap); // expect   _
3522e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}                                  //         \ /
353cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
354cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testSimplifyTriangle2() {
355cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath path, out;
356cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.setFillType(SkPath::kWinding_FillType);
357cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.moveTo(10,10); // triangle      |\      .
358cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(10,30); //               |_\     .
359cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(20,30);
360cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.close();
361d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    path.moveTo(10,10); // triangle       _
362cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(20,10); //               \ |
363cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    path.lineTo(20,30); //                \|
3642e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();                  //         _
365198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap); // expect | |
3662e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}                                  //        |_|
367cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
368198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com#if 0
369cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void testPathTriangleRendering() {
370cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    SkPath one, two;
371cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    one.moveTo(0, 0);
372cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    one.lineTo(3, 3);
373cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    one.lineTo(0, 3);
374cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    one.lineTo(1, 2);
375cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    one.close();
376b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com    for (float x = .1f; x <= 2.9ff; x += .1f) {
377cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        SkDebugf("%s x=%g\n", __FUNCTION__, x);
378cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        two.moveTo(0, 0);
379cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        two.lineTo(x, x);
380cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        two.lineTo(3, 3);
381cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        two.lineTo(0, 3);
382cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        two.lineTo(1, 2);
383cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        two.close();
384cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        comparePaths(one, two);
385cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        two.reset();
386cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    }
387cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
388198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com#endif
389cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
390752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic void simplify(const char* functionName, const SkPath& path,
391752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        bool fill, SkPath& out) {
392198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    if (false) SkDebugf("%s\n", functionName);
393752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(path, fill, out);
394752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com}
395752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com
3962e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifySkinnyTriangle1() {
3972e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    for (int x = 1; x < 255; ++x) {
3982e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        SkPath path, out;
3992e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.moveTo((x * 101) % 10, 0);
4002e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 91) % 10, 1000);
4012e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 71) % 10, 2000);
4022e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 51) % 10, 3000);
4032e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.close();
4042e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.moveTo((x * 101) % 20, 0);
4052e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 91) % 20, 1000);
4062e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 71) % 20, 2000);
4072e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 51) % 20, 3000);
4082e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.close();
4092e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.moveTo((x * 101) % 30, 0);
4102e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 91) % 30, 1000);
4112e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 71) % 30, 2000);
4122e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.lineTo((x * 51) % 30, 3000);
4132e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.close();
414752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        simplify(path, true, out);
4152e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    }
4162e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
4172e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
4182e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifySkinnyTriangle2() {
4192e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        SkPath path, out;
4202e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com#if 01
421b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(591.091064f, 627.534851f);
422b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(541.088135f, 560.707642f);
423b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(491.085175f, 493.880310f);
424b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(441.082214f, 427.053101f);
425b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com//path.lineTo(591.091064f, 627.534851f);
4262e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.compath.close();
4272e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com#endif
428b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(317.093445f, 592.013306f);
429b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(366.316162f, 542.986572f);
430b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(416.051514f, 486.978577f);
431b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(465.786865f, 430.970581f);
432b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com//path.lineTo(317.093445f, 592.013306f);
4332e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.compath.close();
4342e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com#if 0
435b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(289.392517f, 517.138489f);
436b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(249.886078f, 508.598022f);
437b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(217.110916f, 450.916443f);
438b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(196.621033f, 394.917633f);
439b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com//path.lineTo(289.392517f, 517.138489f);
4402e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.compath.close();
4412e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com#endif
442752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
4432e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
4442e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
4452e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifySkinnyTriangle3() {
4462e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        SkPath path, out;
447b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com        path.moveTo(591, 627.534851f);
448b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com        path.lineTo(541, 560.707642f);
449b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com        path.lineTo(491, 493.880310f);
450b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com        path.lineTo(441, 427.053101f);
4512e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.close();
452b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com        path.moveTo(317, 592.013306f);
453b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com        path.lineTo(366, 542.986572f);
454b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com        path.lineTo(416, 486.978577f);
455b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com        path.lineTo(465, 430.970581f);
4562e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        path.close();
457752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
4582e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
4592e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
4602e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifySkinnyTriangle4() {
4612e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        SkPath path, out;
462b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(572.655212f, 614.959961f);
463b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(524.618896f, 549.339600f);
464b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(476.582581f, 483.719269f);
465b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(428.546265f, 418.098938f);
466b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(572.655212f, 614.959961f);
467b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
468b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(312.166382f, 583.723083f);
469b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(361.047791f, 529.824219f);
470b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(409.929230f, 475.925354f);
471b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(458.810669f, 422.026520f);
472b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(312.166382f, 583.723083f);
473b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
474b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(278.742737f, 508.065643f);
475b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(241.475800f, 493.465118f);
476b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(210.344177f, 437.315125f);
477b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(197.019455f, 383.794556f);
478b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(278.742737f, 508.065643f);
4792e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.compath.close();
480752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
4812e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
4822e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
4832e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifySkinnyTriangle5() {
4842e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        SkPath path, out;
485b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(554.690613f, 602.286072f);
486b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(508.590057f, 537.906250f);
487b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(462.489441f, 473.526520f);
488b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(416.388855f, 409.146729f);
489b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(554.690613f, 602.286072f);
490b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
491b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(307.216949f, 575.189270f);
492b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(355.826965f, 516.804688f);
493b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(403.815918f, 464.990753f);
494b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(451.804871f, 413.176819f);
495b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(307.216949f, 575.189270f);
496b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
497b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(271.998901f, 521.301025f);
498b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(234.619705f, 499.687683f);
499b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(203.059692f, 441.332336f);
500b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(195.994370f, 386.856506f);
501b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(271.998901f, 521.301025f);
5022e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.compath.close();
503752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
5042e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
5052e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
506752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic void testSimplifySkinnyTriangle6() {
507752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        SkPath path, out;
508b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(591.091064f, 627.534851f);
509b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(541.088135f, 560.707642f);
510b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(491.085175f, 493.880310f);
511b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(441.082214f, 427.053101f);
512b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(591.091064f, 627.534851f);
513b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
514b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(317.093445f, 592.013306f);
515b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(366.316162f, 542.986572f);
516b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(416.051514f, 486.978577f);
517b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(465.786865f, 430.970581f);
518b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(317.093445f, 592.013306f);
519b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
520b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(289.392517f, 517.138489f);
521b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(249.886078f, 508.598022f);
522b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(217.110916f, 450.916443f);
523b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(196.621033f, 394.917633f);
524b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(289.392517f, 517.138489f);
525752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
526752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
527752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com}
5282e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
5292e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifyTriangle22() {
5302e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    SkPath path, out;
5312e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
5322e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 0);
5332e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 2);
5342e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
5352e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(1, 0);
5362e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 2);
5372e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 1);
5382e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
539198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
5402e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
5412e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
5422e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifyTriangle23() {
5432e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    SkPath path, out;
5442e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
5452e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 0);
5462e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 0);
5472e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
5482e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
5492e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 1);
5502e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 2);
5512e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
552198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
5532e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
5542e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
5552e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic void testSimplifyTriangle24() {
5562e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    SkPath path, out;
5572e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
5582e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 0);
5592e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 1);
5602e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
5612e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.moveTo(0, 0);
5622e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(1, 0);
5632e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.lineTo(0, 1);
5642e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    path.close();
565198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com    testSimplify(path, true, out, bitmap);
5662e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com}
5672e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com
568752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic void testSimplifySkinnyTriangle7() {
569752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        SkPath path, out;
570b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(487.502319f, 550.811279f);
571b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(448.826050f, 491.720123f);
572b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(410.149780f, 432.628967f);
573b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(371.473572f, 373.537781f);
574b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(487.502319f, 550.811279f);
575b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
576b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(295.817108f, 532.655579f);
577b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(342.896271f, 485.912292f);
578b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(389.975433f, 439.169006f);
579b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(437.054596f, 392.425781f);
580b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(295.817108f, 532.655579f);
581b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
582b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(239.726822f, 575.025269f);
583b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(204.117569f, 521.429688f);
584b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(171.275452f, 454.110382f);
585b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(193.328583f, 397.859497f);
586b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(239.726822f, 575.025269f);
587752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
588752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
589752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com}
590752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com
591752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic void testSimplifySkinnyTriangle8() {
592752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        SkPath path, out;
593b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(441.943115f, 511.678040f);
594b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(408.487549f, 456.880920f);
595b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(375.031952f, 402.083801f);
596b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(341.576385f, 347.286682f);
597b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(441.943115f, 511.678040f);
598b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
599b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(297.548492f, 557.246704f);
600b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(350.768494f, 507.627014f);
601b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(403.988525f, 458.007385f);
602b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(457.208527f, 408.387695f);
603b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(297.548492f, 557.246704f);
604b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
605b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(209.857895f, 615.802979f);
606b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(178.249481f, 534.230347f);
607b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(144.905640f, 460.056824f);
608b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(192.953125f, 404.972900f);
609b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(209.857895f, 615.802979f);
610752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
611752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
612752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com}
613752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com
614752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic void testSimplifySkinnyTriangle9() {
615752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        SkPath path, out;
616b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(439.867065f, 528.291931f);
617b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(405.413025f, 469.107178f);
618b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(370.958954f, 409.922363f);
619b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(336.504883f, 350.737610f);
620b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(439.867065f, 528.291931f);
621752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
622b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(298.922455f, 573.251953f);
623b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(356.360962f, 521.905090f);
624b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(413.799438f, 470.558228f);
625b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(471.237915f, 419.211365f);
626b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(298.922455f, 573.251953f);
627752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
628b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(187.200775f, 643.035156f);
629b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(159.713165f, 540.993774f);
630b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(126.257164f, 462.198517f);
631b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(193.534012f, 409.266235f);
632b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(187.200775f, 643.035156f);
633752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
634752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
635752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
636752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com}
637752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com
638752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic void testSimplifySkinnyTriangle10() {
639752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        SkPath path, out;
640752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com#if 0
641b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(99.270325f, 239.365234f);
642b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(105.967056f, 173.361206f);
643b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(148.821381f, 141.309891f);
644b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(159.101013f, 189.235138f);
645b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(99.270325f, 239.365234f);
646752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
647752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com#endif
648b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(213.673737f, 413.292938f);
649b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(225.200134f, 343.616821f);
650b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(236.726532f, 273.940704f);
651b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(219.386414f, 231.373322f);
652b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(213.673737f, 413.292938f);
653b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
654b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(43.485352f, 308.984497f);
655b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(122.610657f, 305.950134f);
656b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(201.735962f, 302.915802f);
657b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(280.861267f, 299.881470f);
658b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(43.485352f, 308.984497f);
659752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.compath.close();
660752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    simplify(__FUNCTION__, path, true, out);
661752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com}
662752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com
663d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comstatic void testSimplifySkinnyTriangle11() {
664d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com        SkPath path, out;
665b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(-177.878387f, 265.368988f);
666b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-254.415771f, 303.709961f);
667b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-317.465363f, 271.325562f);
668b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-374.520386f, 207.507660f);
669b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-177.878387f, 265.368988f);
670b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
671b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(-63.582489f, -3.679123f);
672b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-134.496841f, 26.434566f);
673b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-205.411209f, 56.548256f);
674b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-276.325562f, 86.661942f);
675b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-63.582489f, -3.679123f);
676b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
677b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(-57.078423f, 162.633453f);
678b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-95.963928f, 106.261139f);
679b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-134.849457f, 49.888824f);
680b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-173.734955f, -6.483480f);
681b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-57.078423f, 162.633453f);
682d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.compath.close();
683d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    simplify(__FUNCTION__, path, true, out);
684d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com}
685d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
686d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comstatic void testSimplifySkinnyTriangle12() {
687d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com        SkPath path, out;
688b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(98.666489f, -94.295059f);
689b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(156.584320f, -61.939133f);
690b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(174.672974f, -12.343765f);
691b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(158.622345f, 52.028267f);
692b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(98.666489f, -94.295059f);
693b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
694b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(-133.225616f, -48.622055f);
695b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-73.855499f, -10.375397f);
696b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-14.485367f, 27.871277f);
697b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(44.884750f, 66.117935f);
698b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-133.225616f, -48.622055f);
699b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
700b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo( 9.030045f, -163.413132f);
701b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-19.605331f, -89.588760f);
702b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-48.240707f, -15.764404f);
703b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(-76.876053f, 58.059944f);
704b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo( 9.030045f, -163.413132f);
705d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.compath.close();
706d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    simplify(__FUNCTION__, path, true, out);
707d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com}
708d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
709d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.comstatic void testSimplifySkinnyTriangle13() {
710d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com        SkPath path, out;
711b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(340.41568f, -170.97171f);
712b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(418.846893f, -142.428329f);
713b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(497.278107f, -113.884933f);
714b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(449.18222f, -45.6723022f);
715b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(340.41568f, -170.97171f);
716b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.close();
717b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.moveTo(326.610535f, 34.0393639f);
718b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(371.334595f, -14.9620667f);
719b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(416.058624f, -63.9634857f);
720b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(460.782654f, -112.96492f);
721b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.compath.lineTo(326.610535f, 34.0393639f);
722d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.compath.close();
723d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    simplify(__FUNCTION__, path, true, out);
724d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com}
725d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com
726cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic void (*simplifyTests[])() = {
727d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    testSimplifySkinnyTriangle13,
728d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    testSimplifySkinnyTriangle12,
729d88e0894d0156f4d427b812fec69bfba3eec7a8dcaryclark@google.com    testSimplifySkinnyTriangle11,
730752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    testSimplifySkinnyTriangle10,
731752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    testSimplifySkinnyTriangle9,
732752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    testSimplifySkinnyTriangle8,
733752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    testSimplifySkinnyTriangle7,
734752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com    testSimplifySkinnyTriangle6,
7352e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifySkinnyTriangle5,
7362e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifySkinnyTriangle4,
7372e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifySkinnyTriangle3,
7382e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifySkinnyTriangle2,
7392e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifySkinnyTriangle1,
7402e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifyTriangle24,
7412e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifyTriangle23,
7422e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    testSimplifyTriangle22,
7434917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    testSimplifyDegenerateTriangle2,
7444917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    testSimplifyDegenerateTriangle1,
7454917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    testSimplifyTriangle21,
7464917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    testSimplifyTriangle20,
7474917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    testSimplifyTriangle19,
7484917f17bf6bd8bff7f4b03717dcb02561cf227c9caryclark@google.com    testSimplifyTriangle18,
749cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle17,
750cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle16,
751cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle15,
752cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle14,
753cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle13,
754cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle12,
755cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle11,
756cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle10,
757cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle7,
758cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle9,
759cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle8,
760cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle6,
761cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle5,
762cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle4,
763cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle3,
764cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle,
765cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyTriangle2,
766cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyWindingParallelogram,
767cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    testSimplifyXorParallelogram,
768198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com//    testPathTriangleRendering,
769cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com};
770cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
771cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic size_t simplifyTestsCount = sizeof(simplifyTests) / sizeof(simplifyTests[0]);
772cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
773a5764233aa6b207c4169fff7fccae567a160a0fdcaryclark@google.comstatic void (*firstTest)() = testSimplifySkinnyTriangle12;
774cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com
775cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comvoid SimplifyPolygonPaths_Test() {
776cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    size_t index = 0;
777cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    if (firstTest) {
778cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        while (index < simplifyTestsCount && simplifyTests[index] != firstTest) {
779cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com            ++index;
780cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        }
781cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    }
7822e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com    bool firstTestComplete = false;
783cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    for ( ; index < simplifyTestsCount; ++index) {
784cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com        (*simplifyTests[index])();
785752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        if (simplifyTests[index] == testSimplifySkinnyTriangle2) {
786198e054b33051a6cd5f606ccbc8d539cefc5631fcaryclark@google.com            if (false) SkDebugf("%s last fast skinny test\n", __FUNCTION__);
787752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com        }
7882e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com        firstTestComplete = true;
789cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com    }
790cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com}
791