1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2016 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPath.h"
8*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h"
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTDArray.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkFloatBits.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkRandom.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "tests/PathOpsExtendedTest.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "tests/PathOpsThreadedCommon.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "tests/Test.h"
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard Worker #include <array>
17*c8dee2aaSAndroid Build Coastguard Worker #include <atomic>
18*c8dee2aaSAndroid Build Coastguard Worker #include <cstddef>
19*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint>
20*c8dee2aaSAndroid Build Coastguard Worker
21*c8dee2aaSAndroid Build Coastguard Worker #define TEST(name) { name, #name }
22*c8dee2aaSAndroid Build Coastguard Worker
tiger8(skiatest::Reporter * reporter,const char * filename)23*c8dee2aaSAndroid Build Coastguard Worker static void tiger8(skiatest::Reporter* reporter, const char* filename) {
24*c8dee2aaSAndroid Build Coastguard Worker SkPath path;
25*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(SkBits2Float(0x43f639c5), SkBits2Float(0x4361375a)); // 492.451f, 225.216f
26*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f58ce4), SkBits2Float(0x435d2a04), SkBits2Float(0x43f71bd9), SkBits2Float(0x435ac7d8)); // 491.101f, 221.164f, 494.218f, 218.781f
27*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f7d69d), SkBits2Float(0x4359aa35), SkBits2Float(0x43f8b3b3), SkBits2Float(0x435951c5)); // 495.677f, 217.665f, 497.404f, 217.319f
28*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x43f8ba67), SkBits2Float(0x43594f16), SkBits2Float(0x43f8c136), SkBits2Float(0x43594dd9), SkBits2Float(0x3f7fa2b1)); // 497.456f, 217.309f, 497.509f, 217.304f, 0.998576f
29*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43fcc3a8), SkBits2Float(0x43589340), SkBits2Float(0x43ff01dc), SkBits2Float(0x4352e191)); // 505.529f, 216.575f, 510.015f, 210.881f
30*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x43ff5113), SkBits2Float(0x4352187b), SkBits2Float(0x43ffb59e), SkBits2Float(0x4352b6e9), SkBits2Float(0x3f3504f3)); // 510.633f, 210.096f, 511.419f, 210.714f, 0.707107f
31*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x43ffdc85), SkBits2Float(0x4352f435), SkBits2Float(0x43ffe4a9), SkBits2Float(0x435355e9), SkBits2Float(0x3f6ec0ae)); // 511.723f, 210.954f, 511.786f, 211.336f, 0.932628f
32*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x4400461c), SkBits2Float(0x435b3080), SkBits2Float(0x4400b692), SkBits2Float(0x4360b229)); // 513.095f, 219.189f, 514.853f, 224.696f
33*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x4400c662), SkBits2Float(0x43617856), SkBits2Float(0x44009920), SkBits2Float(0x4361decb), SkBits2Float(0x3f46ad5b)); // 515.1f, 225.47f, 514.393f, 225.87f, 0.776083f
34*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43fb4920), SkBits2Float(0x43688f50), SkBits2Float(0x43f8340f), SkBits2Float(0x4365b887)); // 502.571f, 232.56f, 496.407f, 229.721f
35*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72cd2), SkBits2Float(0x4364c612), SkBits2Float(0x43f69888), SkBits2Float(0x4362e330)); // 494.35f, 228.774f, 493.192f, 226.887f
36*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f66a00), SkBits2Float(0x43624bae), SkBits2Float(0x43f64c73), SkBits2Float(0x4361ad04)); // 492.828f, 226.296f, 492.597f, 225.676f
37*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f642ea), SkBits2Float(0x436179d2), SkBits2Float(0x43f63c1c), SkBits2Float(0x43614abe)); // 492.523f, 225.476f, 492.47f, 225.292f
38*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f639c9), SkBits2Float(0x43613aa5), SkBits2Float(0x43f63809), SkBits2Float(0x43612cda)); // 492.451f, 225.229f, 492.438f, 225.175f
39*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f63777), SkBits2Float(0x43612855), SkBits2Float(0x43f636df), SkBits2Float(0x43612357)); // 492.433f, 225.158f, 492.429f, 225.138f
40*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6368f), SkBits2Float(0x436120b2), SkBits2Float(0x43f6367b), SkBits2Float(0x43612005)); // 492.426f, 225.128f, 492.426f, 225.125f
41*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63656), SkBits2Float(0x43611ebc)); // 492.424f, 225.12f
42*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63647), SkBits2Float(0x43611e34)); // 492.424f, 225.118f
43*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f6363f), SkBits2Float(0x43611df3)); // 492.424f, 225.117f
44*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f6363e), SkBits2Float(0x43611de5)); // 492.424f, 225.117f
45*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f6363f), SkBits2Float(0x43611deb)); // 492.424f, 225.117f
46*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63647), SkBits2Float(0x43611e37)); // 492.424f, 225.118f
47*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63644), SkBits2Float(0x43611e19)); // 492.424f, 225.118f
48*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6365c), SkBits2Float(0x43611ee7), SkBits2Float(0x43f6365d), SkBits2Float(0x43611ef9)); // 492.425f, 225.121f, 492.425f, 225.121f
49*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f63666), SkBits2Float(0x43611f4b), SkBits2Float(0x43f63672), SkBits2Float(0x43611fb1)); // 492.425f, 225.122f, 492.425f, 225.124f
50*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f636ab), SkBits2Float(0x436121a4), SkBits2Float(0x43f636e3), SkBits2Float(0x4361236a)); // 492.427f, 225.131f, 492.429f, 225.138f
51*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f636fd), SkBits2Float(0x43612443), SkBits2Float(0x43f63705), SkBits2Float(0x4361247e)); // 492.43f, 225.142f, 492.43f, 225.143f
52*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f637d7), SkBits2Float(0x43612b15), SkBits2Float(0x43f638dc), SkBits2Float(0x436131b0)); // 492.436f, 225.168f, 492.444f, 225.194f
53*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f63b88), SkBits2Float(0x43614303), SkBits2Float(0x43f63f62), SkBits2Float(0x43615368)); // 492.465f, 225.262f, 492.495f, 225.326f
54*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6436f), SkBits2Float(0x4361649f), SkBits2Float(0x43f648b2), SkBits2Float(0x43617468)); // 492.527f, 225.393f, 492.568f, 225.455f
55*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f68760), SkBits2Float(0x43623072), SkBits2Float(0x43f6ec71), SkBits2Float(0x4361cb60)); // 493.058f, 226.189f, 493.847f, 225.794f
56*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f722ef), SkBits2Float(0x436194e0), SkBits2Float(0x43f73027), SkBits2Float(0x43611df0)); // 494.273f, 225.582f, 494.376f, 225.117f
57*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f73334), SkBits2Float(0x43610284), SkBits2Float(0x43f73333), SkBits2Float(0x4360e667)); // 494.4f, 225.01f, 494.4f, 224.9f
58*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63638), SkBits2Float(0x43611daf)); // 492.424f, 225.116f
59*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f6b333), SkBits2Float(0x4360e666)); // 493.4f, 224.9f
60*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f639c5), SkBits2Float(0x4361375a)); // 492.451f, 225.216f
61*c8dee2aaSAndroid Build Coastguard Worker path.close();
62*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(SkBits2Float(0x43f72ca1), SkBits2Float(0x43609572)); // 494.349f, 224.584f
63*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x43f72ebd), SkBits2Float(0x4360a219), SkBits2Float(0x43f7302e), SkBits2Float(0x4360af1f), SkBits2Float(0x3f7fa741)); // 494.365f, 224.633f, 494.376f, 224.684f, 0.998646f
64*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63333), SkBits2Float(0x4360e667)); // 492.4f, 224.9f
65*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f63333), SkBits2Float(0x4360ca4b), SkBits2Float(0x43f6363f), SkBits2Float(0x4360aede)); // 492.4f, 224.79f, 492.424f, 224.683f
66*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f64377), SkBits2Float(0x436037ee), SkBits2Float(0x43f679f5), SkBits2Float(0x4360016e)); // 492.527f, 224.218f, 492.953f, 224.006f
67*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6df06), SkBits2Float(0x435f9c5c), SkBits2Float(0x43f71db4), SkBits2Float(0x43605866)); // 493.742f, 223.611f, 494.232f, 224.345f
68*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f722f8), SkBits2Float(0x43606830), SkBits2Float(0x43f72704), SkBits2Float(0x43607966)); // 494.273f, 224.407f, 494.305f, 224.474f
69*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72ae0), SkBits2Float(0x436089cd), SkBits2Float(0x43f72d8a), SkBits2Float(0x43609b1e)); // 494.335f, 224.538f, 494.356f, 224.606f
70*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72e8e), SkBits2Float(0x4360a1b8), SkBits2Float(0x43f72f61), SkBits2Float(0x4360a850)); // 494.364f, 224.632f, 494.37f, 224.657f
71*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72f68), SkBits2Float(0x4360a88a), SkBits2Float(0x43f72f83), SkBits2Float(0x4360a964)); // 494.37f, 224.658f, 494.371f, 224.662f
72*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72fbb), SkBits2Float(0x4360ab2a), SkBits2Float(0x43f72ff4), SkBits2Float(0x4360ad1d)); // 494.373f, 224.669f, 494.375f, 224.676f
73*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f73000), SkBits2Float(0x4360ad83), SkBits2Float(0x43f73009), SkBits2Float(0x4360add5)); // 494.375f, 224.678f, 494.375f, 224.679f
74*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f7300b), SkBits2Float(0x4360ade9), SkBits2Float(0x43f73022), SkBits2Float(0x4360aeb5)); // 494.375f, 224.679f, 494.376f, 224.682f
75*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f7301f), SkBits2Float(0x4360ae97)); // 494.376f, 224.682f
76*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73027), SkBits2Float(0x4360aee3)); // 494.376f, 224.683f
77*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73028), SkBits2Float(0x4360aeeb)); // 494.376f, 224.683f
78*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73027), SkBits2Float(0x4360aedf)); // 494.376f, 224.683f
79*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73021), SkBits2Float(0x4360aeaa)); // 494.376f, 224.682f
80*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73016), SkBits2Float(0x4360ae50)); // 494.376f, 224.681f
81*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73007), SkBits2Float(0x4360adc1)); // 494.375f, 224.679f
82*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f72ff9), SkBits2Float(0x4360ad4d)); // 494.375f, 224.677f
83*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f7300d), SkBits2Float(0x4360adf7), SkBits2Float(0x43f73031), SkBits2Float(0x4360af12)); // 494.375f, 224.68f, 494.376f, 224.684f
84*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f730f0), SkBits2Float(0x4360b4f1), SkBits2Float(0x43f7320a), SkBits2Float(0x4360bc94)); // 494.382f, 224.707f, 494.391f, 224.737f
85*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f73625), SkBits2Float(0x4360d8fe), SkBits2Float(0x43f73c59), SkBits2Float(0x4360fa4a)); // 494.423f, 224.848f, 494.471f, 224.978f
86*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f75132), SkBits2Float(0x43616a36), SkBits2Float(0x43f772ac), SkBits2Float(0x4361d738)); // 494.634f, 225.415f, 494.896f, 225.841f
87*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f7de60), SkBits2Float(0x436335ea), SkBits2Float(0x43f89f25), SkBits2Float(0x4363e779)); // 495.737f, 227.211f, 497.243f, 227.904f
88*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43fb3d30), SkBits2Float(0x436650a0), SkBits2Float(0x44005a14), SkBits2Float(0x43602133)); // 502.478f, 230.315f, 513.407f, 224.13f
89*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x4400799a), SkBits2Float(0x4360ffff)); // 513.9f, 225
90*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x44003ca2), SkBits2Float(0x43614dd5)); // 512.947f, 225.304f
91*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43ff92b8), SkBits2Float(0x435ba8f8), SkBits2Float(0x43fee825), SkBits2Float(0x4353aa15)); // 511.146f, 219.66f, 509.814f, 211.664f
92*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43ff6667), SkBits2Float(0x43537fff)); // 510.8f, 211.5f
93*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43ffcaf2), SkBits2Float(0x43541e6d)); // 511.586f, 212.119f
94*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43fd4888), SkBits2Float(0x435a7d38), SkBits2Float(0x43f8d864), SkBits2Float(0x435b4bbf)); // 506.567f, 218.489f, 497.691f, 219.296f
95*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f8cccd), SkBits2Float(0x435a4ccc)); // 497.6f, 218.3f
96*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f8e5e7), SkBits2Float(0x435b47d3)); // 497.796f, 219.281f
97*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f84300), SkBits2Float(0x435b88fd), SkBits2Float(0x43f7b75b), SkBits2Float(0x435c5e8e)); // 496.523f, 219.535f, 495.432f, 220.369f
98*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6b984), SkBits2Float(0x435de2c4), SkBits2Float(0x43f72ca1), SkBits2Float(0x43609572)); // 493.449f, 221.886f, 494.349f, 224.584f
99*c8dee2aaSAndroid Build Coastguard Worker path.close();
100*c8dee2aaSAndroid Build Coastguard Worker testSimplify(reporter, path, filename);
101*c8dee2aaSAndroid Build Coastguard Worker }
102*c8dee2aaSAndroid Build Coastguard Worker
103*c8dee2aaSAndroid Build Coastguard Worker // fails to include a line of edges, probably mis-sorting
tiger8a(skiatest::Reporter * reporter,const char * filename)104*c8dee2aaSAndroid Build Coastguard Worker static void tiger8a(skiatest::Reporter* reporter, const char* filename) {
105*c8dee2aaSAndroid Build Coastguard Worker SkPath path;
106*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(SkBits2Float(0x43f639c5), SkBits2Float(0x4361375a)); // 492.451f, 225.216f
107*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f58ce4), SkBits2Float(0x435d2a04), SkBits2Float(0x43f71bd9), SkBits2Float(0x435ac7d8)); // 491.101f, 221.164f, 494.218f, 218.781f
108*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f7d69d), SkBits2Float(0x4359aa35), SkBits2Float(0x43f8b3b3), SkBits2Float(0x435951c5)); // 495.677f, 217.665f, 497.404f, 217.319f
109*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x43f8ba67), SkBits2Float(0x43594f16), SkBits2Float(0x43f8c136), SkBits2Float(0x43594dd9), SkBits2Float(0x3f7fa2b1)); // 497.456f, 217.309f, 497.509f, 217.304f, 0.998576f
110*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43fcc3a8), SkBits2Float(0x43589340), SkBits2Float(0x43ff01dc), SkBits2Float(0x4352e191)); // 505.529f, 216.575f, 510.015f, 210.881f
111*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x43ff5113), SkBits2Float(0x4352187b), SkBits2Float(0x43ffb59e), SkBits2Float(0x4352b6e9), SkBits2Float(0x3f3504f3)); // 510.633f, 210.096f, 511.419f, 210.714f, 0.707107f
112*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x43ffdc85), SkBits2Float(0x4352f435), SkBits2Float(0x43ffe4a9), SkBits2Float(0x435355e9), SkBits2Float(0x3f6ec0ae)); // 511.723f, 210.954f, 511.786f, 211.336f, 0.932628f
113*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x4400461c), SkBits2Float(0x435b3080), SkBits2Float(0x4400b692), SkBits2Float(0x4360b229)); // 513.095f, 219.189f, 514.853f, 224.696f
114*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x4400c662), SkBits2Float(0x43617856), SkBits2Float(0x44009920), SkBits2Float(0x4361decb), SkBits2Float(0x3f46ad5b)); // 515.1f, 225.47f, 514.393f, 225.87f, 0.776083f
115*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43fb4920), SkBits2Float(0x43688f50), SkBits2Float(0x43f8340f), SkBits2Float(0x4365b887)); // 502.571f, 232.56f, 496.407f, 229.721f
116*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72cd2), SkBits2Float(0x4364c612), SkBits2Float(0x43f69888), SkBits2Float(0x4362e330)); // 494.35f, 228.774f, 493.192f, 226.887f
117*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f66a00), SkBits2Float(0x43624bae), SkBits2Float(0x43f64c73), SkBits2Float(0x4361ad04)); // 492.828f, 226.296f, 492.597f, 225.676f
118*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f642ea), SkBits2Float(0x436179d2), SkBits2Float(0x43f63c1c), SkBits2Float(0x43614abe)); // 492.523f, 225.476f, 492.47f, 225.292f
119*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f639c9), SkBits2Float(0x43613aa5), SkBits2Float(0x43f63809), SkBits2Float(0x43612cda)); // 492.451f, 225.229f, 492.438f, 225.175f
120*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f63777), SkBits2Float(0x43612855), SkBits2Float(0x43f636df), SkBits2Float(0x43612357)); // 492.433f, 225.158f, 492.429f, 225.138f
121*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6368f), SkBits2Float(0x436120b2), SkBits2Float(0x43f6367b), SkBits2Float(0x43612005)); // 492.426f, 225.128f, 492.426f, 225.125f
122*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63656), SkBits2Float(0x43611ebc)); // 492.424f, 225.12f
123*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63647), SkBits2Float(0x43611e34)); // 492.424f, 225.118f
124*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f6363f), SkBits2Float(0x43611df3)); // 492.424f, 225.117f
125*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f6363e), SkBits2Float(0x43611de5)); // 492.424f, 225.117f
126*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f6363f), SkBits2Float(0x43611deb)); // 492.424f, 225.117f
127*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63647), SkBits2Float(0x43611e37)); // 492.424f, 225.118f
128*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63644), SkBits2Float(0x43611e19)); // 492.424f, 225.118f
129*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6365c), SkBits2Float(0x43611ee7), SkBits2Float(0x43f6365d), SkBits2Float(0x43611ef9)); // 492.425f, 225.121f, 492.425f, 225.121f
130*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f63666), SkBits2Float(0x43611f4b), SkBits2Float(0x43f63672), SkBits2Float(0x43611fb1)); // 492.425f, 225.122f, 492.425f, 225.124f
131*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f636ab), SkBits2Float(0x436121a4), SkBits2Float(0x43f636e3), SkBits2Float(0x4361236a)); // 492.427f, 225.131f, 492.429f, 225.138f
132*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f636fd), SkBits2Float(0x43612443), SkBits2Float(0x43f63705), SkBits2Float(0x4361247e)); // 492.43f, 225.142f, 492.43f, 225.143f
133*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f637d7), SkBits2Float(0x43612b15), SkBits2Float(0x43f638dc), SkBits2Float(0x436131b0)); // 492.436f, 225.168f, 492.444f, 225.194f
134*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f63b88), SkBits2Float(0x43614303), SkBits2Float(0x43f63f62), SkBits2Float(0x43615368)); // 492.465f, 225.262f, 492.495f, 225.326f
135*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6436f), SkBits2Float(0x4361649f), SkBits2Float(0x43f648b2), SkBits2Float(0x43617468)); // 492.527f, 225.393f, 492.568f, 225.455f
136*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f68760), SkBits2Float(0x43623072), SkBits2Float(0x43f6ec71), SkBits2Float(0x4361cb60)); // 493.058f, 226.189f, 493.847f, 225.794f
137*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f722ef), SkBits2Float(0x436194e0), SkBits2Float(0x43f73027), SkBits2Float(0x43611df0)); // 494.273f, 225.582f, 494.376f, 225.117f
138*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f73334), SkBits2Float(0x43610284), SkBits2Float(0x43f73333), SkBits2Float(0x4360e667)); // 494.4f, 225.01f, 494.4f, 224.9f
139*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63638), SkBits2Float(0x43611daf)); // 492.424f, 225.116f
140*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f6b333), SkBits2Float(0x4360e666)); // 493.4f, 224.9f
141*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f639c5), SkBits2Float(0x4361375a)); // 492.451f, 225.216f
142*c8dee2aaSAndroid Build Coastguard Worker path.close();
143*c8dee2aaSAndroid Build Coastguard Worker testSimplify(reporter, path, filename);
144*c8dee2aaSAndroid Build Coastguard Worker }
145*c8dee2aaSAndroid Build Coastguard Worker
146*c8dee2aaSAndroid Build Coastguard Worker static std::atomic<int> gTigerTests{0};
147*c8dee2aaSAndroid Build Coastguard Worker
tiger8a_x(skiatest::Reporter * reporter,uint64_t testlines)148*c8dee2aaSAndroid Build Coastguard Worker static void tiger8a_x(skiatest::Reporter* reporter, uint64_t testlines) {
149*c8dee2aaSAndroid Build Coastguard Worker SkPath path;
150*c8dee2aaSAndroid Build Coastguard Worker uint64_t i = 0;
151*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.moveTo(SkBits2Float(0x43f639c5), SkBits2Float(0x4361375a)); // 492.451f, 225.216f
152*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f58ce4), SkBits2Float(0x435d2a04), SkBits2Float(0x43f71bd9), SkBits2Float(0x435ac7d8)); // 491.101f, 221.164f, 494.218f, 218.781f
153*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f7d69d), SkBits2Float(0x4359aa35), SkBits2Float(0x43f8b3b3), SkBits2Float(0x435951c5)); // 495.677f, 217.665f, 497.404f, 217.319f
154*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.conicTo(SkBits2Float(0x43f8ba67), SkBits2Float(0x43594f16), SkBits2Float(0x43f8c136), SkBits2Float(0x43594dd9), SkBits2Float(0x3f7fa2b1)); // 497.456f, 217.309f, 497.509f, 217.304f, 0.998576f
155*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43fcc3a8), SkBits2Float(0x43589340), SkBits2Float(0x43ff01dc), SkBits2Float(0x4352e191)); // 505.529f, 216.575f, 510.015f, 210.881f
156*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.conicTo(SkBits2Float(0x43ff5113), SkBits2Float(0x4352187b), SkBits2Float(0x43ffb59e), SkBits2Float(0x4352b6e9), SkBits2Float(0x3f3504f3)); // 510.633f, 210.096f, 511.419f, 210.714f, 0.707107f
157*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.conicTo(SkBits2Float(0x43ffdc85), SkBits2Float(0x4352f435), SkBits2Float(0x43ffe4a9), SkBits2Float(0x435355e9), SkBits2Float(0x3f6ec0ae)); // 511.723f, 210.954f, 511.786f, 211.336f, 0.932628f
158*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x4400461c), SkBits2Float(0x435b3080), SkBits2Float(0x4400b692), SkBits2Float(0x4360b229)); // 513.095f, 219.189f, 514.853f, 224.696f
159*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.conicTo(SkBits2Float(0x4400c662), SkBits2Float(0x43617856), SkBits2Float(0x44009920), SkBits2Float(0x4361decb), SkBits2Float(0x3f46ad5b)); // 515.1f, 225.47f, 514.393f, 225.87f, 0.776083f
160*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43fb4920), SkBits2Float(0x43688f50), SkBits2Float(0x43f8340f), SkBits2Float(0x4365b887)); // 502.571f, 232.56f, 496.407f, 229.721f
161*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f72cd2), SkBits2Float(0x4364c612), SkBits2Float(0x43f69888), SkBits2Float(0x4362e330)); // 494.35f, 228.774f, 493.192f, 226.887f
162*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f66a00), SkBits2Float(0x43624bae), SkBits2Float(0x43f64c73), SkBits2Float(0x4361ad04)); // 492.828f, 226.296f, 492.597f, 225.676f
163*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f642ea), SkBits2Float(0x436179d2), SkBits2Float(0x43f63c1c), SkBits2Float(0x43614abe)); // 492.523f, 225.476f, 492.47f, 225.292f
164*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f639c9), SkBits2Float(0x43613aa5), SkBits2Float(0x43f63809), SkBits2Float(0x43612cda)); // 492.451f, 225.229f, 492.438f, 225.175f
165*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f63777), SkBits2Float(0x43612855), SkBits2Float(0x43f636df), SkBits2Float(0x43612357)); // 492.433f, 225.158f, 492.429f, 225.138f
166*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f6368f), SkBits2Float(0x436120b2), SkBits2Float(0x43f6367b), SkBits2Float(0x43612005)); // 492.426f, 225.128f, 492.426f, 225.125f
167*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f63656), SkBits2Float(0x43611ebc)); // 492.424f, 225.12f
168*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f63647), SkBits2Float(0x43611e34)); // 492.424f, 225.118f
169*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f6363f), SkBits2Float(0x43611df3)); // 492.424f, 225.117f
170*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f6363e), SkBits2Float(0x43611de5)); // 492.424f, 225.117f
171*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f6363f), SkBits2Float(0x43611deb)); // 492.424f, 225.117f
172*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f63647), SkBits2Float(0x43611e37)); // 492.424f, 225.118f
173*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f63644), SkBits2Float(0x43611e19)); // 492.424f, 225.118f
174*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f6365c), SkBits2Float(0x43611ee7), SkBits2Float(0x43f6365d), SkBits2Float(0x43611ef9)); // 492.425f, 225.121f, 492.425f, 225.121f
175*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f63666), SkBits2Float(0x43611f4b), SkBits2Float(0x43f63672), SkBits2Float(0x43611fb1)); // 492.425f, 225.122f, 492.425f, 225.124f
176*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f636ab), SkBits2Float(0x436121a4), SkBits2Float(0x43f636e3), SkBits2Float(0x4361236a)); // 492.427f, 225.131f, 492.429f, 225.138f
177*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f636fd), SkBits2Float(0x43612443), SkBits2Float(0x43f63705), SkBits2Float(0x4361247e)); // 492.43f, 225.142f, 492.43f, 225.143f
178*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f637d7), SkBits2Float(0x43612b15), SkBits2Float(0x43f638dc), SkBits2Float(0x436131b0)); // 492.436f, 225.168f, 492.444f, 225.194f
179*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f63b88), SkBits2Float(0x43614303), SkBits2Float(0x43f63f62), SkBits2Float(0x43615368)); // 492.465f, 225.262f, 492.495f, 225.326f
180*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f6436f), SkBits2Float(0x4361649f), SkBits2Float(0x43f648b2), SkBits2Float(0x43617468)); // 492.527f, 225.393f, 492.568f, 225.455f
181*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f68760), SkBits2Float(0x43623072), SkBits2Float(0x43f6ec71), SkBits2Float(0x4361cb60)); // 493.058f, 226.189f, 493.847f, 225.794f
182*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f722ef), SkBits2Float(0x436194e0), SkBits2Float(0x43f73027), SkBits2Float(0x43611df0)); // 494.273f, 225.582f, 494.376f, 225.117f
183*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f73334), SkBits2Float(0x43610284), SkBits2Float(0x43f73333), SkBits2Float(0x4360e667)); // 494.4f, 225.01f, 494.4f, 224.9f
184*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f63638), SkBits2Float(0x43611daf)); // 492.424f, 225.116f
185*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f6b333), SkBits2Float(0x4360e666)); // 493.4f, 224.9f
186*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f639c5), SkBits2Float(0x4361375a)); // 492.451f, 225.216f
187*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.close();
188*c8dee2aaSAndroid Build Coastguard Worker SkString testName;
189*c8dee2aaSAndroid Build Coastguard Worker testName.printf("tiger8a_x%d", ++gTigerTests);
190*c8dee2aaSAndroid Build Coastguard Worker testSimplify(reporter, path, testName.c_str());
191*c8dee2aaSAndroid Build Coastguard Worker }
192*c8dee2aaSAndroid Build Coastguard Worker
tiger8a_h_1(skiatest::Reporter * reporter,const char *)193*c8dee2aaSAndroid Build Coastguard Worker static void tiger8a_h_1(skiatest::Reporter* reporter, const char* ) {
194*c8dee2aaSAndroid Build Coastguard Worker uint64_t testlines = 0x0000000000002008; // best so far: 0x0000001d14c14bb1;
195*c8dee2aaSAndroid Build Coastguard Worker tiger8a_x(reporter, testlines);
196*c8dee2aaSAndroid Build Coastguard Worker }
197*c8dee2aaSAndroid Build Coastguard Worker
tiger8b_x(skiatest::Reporter * reporter,uint64_t testlines)198*c8dee2aaSAndroid Build Coastguard Worker static void tiger8b_x(skiatest::Reporter* reporter, uint64_t testlines) {
199*c8dee2aaSAndroid Build Coastguard Worker SkPath path;
200*c8dee2aaSAndroid Build Coastguard Worker uint64_t i = 0;
201*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.moveTo(SkBits2Float(0x43f72ca1), SkBits2Float(0x43609572)); // 494.349f, 224.584f
202*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.conicTo(SkBits2Float(0x43f72ebd), SkBits2Float(0x4360a219), SkBits2Float(0x43f7302e), SkBits2Float(0x4360af1f), SkBits2Float(0x3f7fa741)); // 494.365f, 224.633f, 494.376f, 224.684f, 0.998646f
203*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f63333), SkBits2Float(0x4360e667)); // 492.4f, 224.9f
204*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f63333), SkBits2Float(0x4360ca4b), SkBits2Float(0x43f6363f), SkBits2Float(0x4360aede)); // 492.4f, 224.79f, 492.424f, 224.683f
205*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f64377), SkBits2Float(0x436037ee), SkBits2Float(0x43f679f5), SkBits2Float(0x4360016e)); // 492.527f, 224.218f, 492.953f, 224.006f
206*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f6df06), SkBits2Float(0x435f9c5c), SkBits2Float(0x43f71db4), SkBits2Float(0x43605866)); // 493.742f, 223.611f, 494.232f, 224.345f
207*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f722f8), SkBits2Float(0x43606830), SkBits2Float(0x43f72704), SkBits2Float(0x43607966)); // 494.273f, 224.407f, 494.305f, 224.474f
208*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f72ae0), SkBits2Float(0x436089cd), SkBits2Float(0x43f72d8a), SkBits2Float(0x43609b1e)); // 494.335f, 224.538f, 494.356f, 224.606f
209*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f72e8e), SkBits2Float(0x4360a1b8), SkBits2Float(0x43f72f61), SkBits2Float(0x4360a850)); // 494.364f, 224.632f, 494.37f, 224.657f
210*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f72f68), SkBits2Float(0x4360a88a), SkBits2Float(0x43f72f83), SkBits2Float(0x4360a964)); // 494.37f, 224.658f, 494.371f, 224.662f
211*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f72fbb), SkBits2Float(0x4360ab2a), SkBits2Float(0x43f72ff4), SkBits2Float(0x4360ad1d)); // 494.373f, 224.669f, 494.375f, 224.676f
212*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f73000), SkBits2Float(0x4360ad83), SkBits2Float(0x43f73009), SkBits2Float(0x4360add5)); // 494.375f, 224.678f, 494.375f, 224.679f
213*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f7300b), SkBits2Float(0x4360ade9), SkBits2Float(0x43f73022), SkBits2Float(0x4360aeb5)); // 494.375f, 224.679f, 494.376f, 224.682f
214*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f7301f), SkBits2Float(0x4360ae97)); // 494.376f, 224.682f
215*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f73027), SkBits2Float(0x4360aee3)); // 494.376f, 224.683f
216*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f73028), SkBits2Float(0x4360aeeb)); // 494.376f, 224.683f
217*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f73027), SkBits2Float(0x4360aedf)); // 494.376f, 224.683f
218*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f73021), SkBits2Float(0x4360aeaa)); // 494.376f, 224.682f
219*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f73016), SkBits2Float(0x4360ae50)); // 494.376f, 224.681f
220*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f73007), SkBits2Float(0x4360adc1)); // 494.375f, 224.679f
221*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f72ff9), SkBits2Float(0x4360ad4d)); // 494.375f, 224.677f
222*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f7300d), SkBits2Float(0x4360adf7), SkBits2Float(0x43f73031), SkBits2Float(0x4360af12)); // 494.375f, 224.68f, 494.376f, 224.684f
223*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f730f0), SkBits2Float(0x4360b4f1), SkBits2Float(0x43f7320a), SkBits2Float(0x4360bc94)); // 494.382f, 224.707f, 494.391f, 224.737f
224*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f73625), SkBits2Float(0x4360d8fe), SkBits2Float(0x43f73c59), SkBits2Float(0x4360fa4a)); // 494.423f, 224.848f, 494.471f, 224.978f
225*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f75132), SkBits2Float(0x43616a36), SkBits2Float(0x43f772ac), SkBits2Float(0x4361d738)); // 494.634f, 225.415f, 494.896f, 225.841f
226*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f7de60), SkBits2Float(0x436335ea), SkBits2Float(0x43f89f25), SkBits2Float(0x4363e779)); // 495.737f, 227.211f, 497.243f, 227.904f
227*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43fb3d30), SkBits2Float(0x436650a0), SkBits2Float(0x44005a14), SkBits2Float(0x43602133)); // 502.478f, 230.315f, 513.407f, 224.13f
228*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4400799a), SkBits2Float(0x4360ffff)); // 513.9f, 225
229*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44003ca2), SkBits2Float(0x43614dd5)); // 512.947f, 225.304f
230*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43ff92b8), SkBits2Float(0x435ba8f8), SkBits2Float(0x43fee825), SkBits2Float(0x4353aa15)); // 511.146f, 219.66f, 509.814f, 211.664f
231*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43ff6667), SkBits2Float(0x43537fff)); // 510.8f, 211.5f
232*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43ffcaf2), SkBits2Float(0x43541e6d)); // 511.586f, 212.119f
233*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43fd4888), SkBits2Float(0x435a7d38), SkBits2Float(0x43f8d864), SkBits2Float(0x435b4bbf)); // 506.567f, 218.489f, 497.691f, 219.296f
234*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f8cccd), SkBits2Float(0x435a4ccc)); // 497.6f, 218.3f
235*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x43f8e5e7), SkBits2Float(0x435b47d3)); // 497.796f, 219.281f
236*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f84300), SkBits2Float(0x435b88fd), SkBits2Float(0x43f7b75b), SkBits2Float(0x435c5e8e)); // 496.523f, 219.535f, 495.432f, 220.369f
237*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.quadTo(SkBits2Float(0x43f6b984), SkBits2Float(0x435de2c4), SkBits2Float(0x43f72ca1), SkBits2Float(0x43609572)); // 493.449f, 221.886f, 494.349f, 224.584f
238*c8dee2aaSAndroid Build Coastguard Worker if (testlines & (1LL << i++)) path.close();
239*c8dee2aaSAndroid Build Coastguard Worker SkString testName;
240*c8dee2aaSAndroid Build Coastguard Worker testName.printf("tiger8b_x%d", ++gTigerTests);
241*c8dee2aaSAndroid Build Coastguard Worker testSimplify(reporter, path, testName.c_str());
242*c8dee2aaSAndroid Build Coastguard Worker }
243*c8dee2aaSAndroid Build Coastguard Worker
testTiger(PathOpsThreadState * data)244*c8dee2aaSAndroid Build Coastguard Worker static void testTiger(PathOpsThreadState* data) {
245*c8dee2aaSAndroid Build Coastguard Worker uint64_t testlines = ((uint64_t) data->fB << 32) | (unsigned int) data->fA;
246*c8dee2aaSAndroid Build Coastguard Worker if (data->fC) {
247*c8dee2aaSAndroid Build Coastguard Worker tiger8b_x(data->fReporter, testlines);
248*c8dee2aaSAndroid Build Coastguard Worker } else {
249*c8dee2aaSAndroid Build Coastguard Worker tiger8a_x(data->fReporter, testlines);
250*c8dee2aaSAndroid Build Coastguard Worker }
251*c8dee2aaSAndroid Build Coastguard Worker }
252*c8dee2aaSAndroid Build Coastguard Worker
tiger_threaded(skiatest::Reporter * reporter,const char * filename)253*c8dee2aaSAndroid Build Coastguard Worker static void tiger_threaded(skiatest::Reporter* reporter, const char* filename) {
254*c8dee2aaSAndroid Build Coastguard Worker initializeTests(reporter, "tigerb");
255*c8dee2aaSAndroid Build Coastguard Worker PathOpsThreadedTestRunner testRunner(reporter);
256*c8dee2aaSAndroid Build Coastguard Worker for (int ab = 0; ab < 2; ++ab) {
257*c8dee2aaSAndroid Build Coastguard Worker SkRandom r;
258*c8dee2aaSAndroid Build Coastguard Worker int testCount = reporter->allowExtendedTest() ? 10000 : 100;
259*c8dee2aaSAndroid Build Coastguard Worker for (int samples = 2; samples < 37; ++samples) {
260*c8dee2aaSAndroid Build Coastguard Worker for (int tests = 0; tests < testCount; ++tests) {
261*c8dee2aaSAndroid Build Coastguard Worker uint64_t testlines = 0;
262*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < samples; ++i) {
263*c8dee2aaSAndroid Build Coastguard Worker int bit;
264*c8dee2aaSAndroid Build Coastguard Worker do {
265*c8dee2aaSAndroid Build Coastguard Worker bit = r.nextRangeU(0, 38);
266*c8dee2aaSAndroid Build Coastguard Worker } while (testlines & (1LL << bit));
267*c8dee2aaSAndroid Build Coastguard Worker testlines |= 1LL << bit;
268*c8dee2aaSAndroid Build Coastguard Worker }
269*c8dee2aaSAndroid Build Coastguard Worker *testRunner.fRunnables.append() =
270*c8dee2aaSAndroid Build Coastguard Worker new PathOpsThreadedRunnable(&testTiger,
271*c8dee2aaSAndroid Build Coastguard Worker (int) (unsigned) (testlines & 0xFFFFFFFF),
272*c8dee2aaSAndroid Build Coastguard Worker (int) (unsigned) (testlines >> 32),
273*c8dee2aaSAndroid Build Coastguard Worker ab, 0, &testRunner);
274*c8dee2aaSAndroid Build Coastguard Worker }
275*c8dee2aaSAndroid Build Coastguard Worker }
276*c8dee2aaSAndroid Build Coastguard Worker }
277*c8dee2aaSAndroid Build Coastguard Worker testRunner.render();
278*c8dee2aaSAndroid Build Coastguard Worker }
279*c8dee2aaSAndroid Build Coastguard Worker
tiger8b_h_1(skiatest::Reporter * reporter,const char * filename)280*c8dee2aaSAndroid Build Coastguard Worker static void tiger8b_h_1(skiatest::Reporter* reporter, const char* filename) {
281*c8dee2aaSAndroid Build Coastguard Worker uint64_t testlines = 0x000000000f27b9e3; // best so far: 0x000000201304b4a3
282*c8dee2aaSAndroid Build Coastguard Worker tiger8b_x(reporter, testlines);
283*c8dee2aaSAndroid Build Coastguard Worker }
284*c8dee2aaSAndroid Build Coastguard Worker
285*c8dee2aaSAndroid Build Coastguard Worker // tries to add same edge twice
tiger8b(skiatest::Reporter * reporter,const char * filename)286*c8dee2aaSAndroid Build Coastguard Worker static void tiger8b(skiatest::Reporter* reporter, const char* filename) {
287*c8dee2aaSAndroid Build Coastguard Worker SkPath path;
288*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(SkBits2Float(0x43f72ca1), SkBits2Float(0x43609572)); // 494.349f, 224.584f
289*c8dee2aaSAndroid Build Coastguard Worker path.conicTo(SkBits2Float(0x43f72ebd), SkBits2Float(0x4360a219), SkBits2Float(0x43f7302e), SkBits2Float(0x4360af1f), SkBits2Float(0x3f7fa741)); // 494.365f, 224.633f, 494.376f, 224.684f, 0.998646f
290*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f63333), SkBits2Float(0x4360e667)); // 492.4f, 224.9f
291*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f63333), SkBits2Float(0x4360ca4b), SkBits2Float(0x43f6363f), SkBits2Float(0x4360aede)); // 492.4f, 224.79f, 492.424f, 224.683f
292*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f64377), SkBits2Float(0x436037ee), SkBits2Float(0x43f679f5), SkBits2Float(0x4360016e)); // 492.527f, 224.218f, 492.953f, 224.006f
293*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6df06), SkBits2Float(0x435f9c5c), SkBits2Float(0x43f71db4), SkBits2Float(0x43605866)); // 493.742f, 223.611f, 494.232f, 224.345f
294*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f722f8), SkBits2Float(0x43606830), SkBits2Float(0x43f72704), SkBits2Float(0x43607966)); // 494.273f, 224.407f, 494.305f, 224.474f
295*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72ae0), SkBits2Float(0x436089cd), SkBits2Float(0x43f72d8a), SkBits2Float(0x43609b1e)); // 494.335f, 224.538f, 494.356f, 224.606f
296*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72e8e), SkBits2Float(0x4360a1b8), SkBits2Float(0x43f72f61), SkBits2Float(0x4360a850)); // 494.364f, 224.632f, 494.37f, 224.657f
297*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72f68), SkBits2Float(0x4360a88a), SkBits2Float(0x43f72f83), SkBits2Float(0x4360a964)); // 494.37f, 224.658f, 494.371f, 224.662f
298*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f72fbb), SkBits2Float(0x4360ab2a), SkBits2Float(0x43f72ff4), SkBits2Float(0x4360ad1d)); // 494.373f, 224.669f, 494.375f, 224.676f
299*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f73000), SkBits2Float(0x4360ad83), SkBits2Float(0x43f73009), SkBits2Float(0x4360add5)); // 494.375f, 224.678f, 494.375f, 224.679f
300*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f7300b), SkBits2Float(0x4360ade9), SkBits2Float(0x43f73022), SkBits2Float(0x4360aeb5)); // 494.375f, 224.679f, 494.376f, 224.682f
301*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f7301f), SkBits2Float(0x4360ae97)); // 494.376f, 224.682f
302*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73027), SkBits2Float(0x4360aee3)); // 494.376f, 224.683f
303*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73028), SkBits2Float(0x4360aeeb)); // 494.376f, 224.683f
304*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73027), SkBits2Float(0x4360aedf)); // 494.376f, 224.683f
305*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73021), SkBits2Float(0x4360aeaa)); // 494.376f, 224.682f
306*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73016), SkBits2Float(0x4360ae50)); // 494.376f, 224.681f
307*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f73007), SkBits2Float(0x4360adc1)); // 494.375f, 224.679f
308*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f72ff9), SkBits2Float(0x4360ad4d)); // 494.375f, 224.677f
309*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f7300d), SkBits2Float(0x4360adf7), SkBits2Float(0x43f73031), SkBits2Float(0x4360af12)); // 494.375f, 224.68f, 494.376f, 224.684f
310*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f730f0), SkBits2Float(0x4360b4f1), SkBits2Float(0x43f7320a), SkBits2Float(0x4360bc94)); // 494.382f, 224.707f, 494.391f, 224.737f
311*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f73625), SkBits2Float(0x4360d8fe), SkBits2Float(0x43f73c59), SkBits2Float(0x4360fa4a)); // 494.423f, 224.848f, 494.471f, 224.978f
312*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f75132), SkBits2Float(0x43616a36), SkBits2Float(0x43f772ac), SkBits2Float(0x4361d738)); // 494.634f, 225.415f, 494.896f, 225.841f
313*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f7de60), SkBits2Float(0x436335ea), SkBits2Float(0x43f89f25), SkBits2Float(0x4363e779)); // 495.737f, 227.211f, 497.243f, 227.904f
314*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43fb3d30), SkBits2Float(0x436650a0), SkBits2Float(0x44005a14), SkBits2Float(0x43602133)); // 502.478f, 230.315f, 513.407f, 224.13f
315*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x4400799a), SkBits2Float(0x4360ffff)); // 513.9f, 225
316*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x44003ca2), SkBits2Float(0x43614dd5)); // 512.947f, 225.304f
317*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43ff92b8), SkBits2Float(0x435ba8f8), SkBits2Float(0x43fee825), SkBits2Float(0x4353aa15)); // 511.146f, 219.66f, 509.814f, 211.664f
318*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43ff6667), SkBits2Float(0x43537fff)); // 510.8f, 211.5f
319*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43ffcaf2), SkBits2Float(0x43541e6d)); // 511.586f, 212.119f
320*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43fd4888), SkBits2Float(0x435a7d38), SkBits2Float(0x43f8d864), SkBits2Float(0x435b4bbf)); // 506.567f, 218.489f, 497.691f, 219.296f
321*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f8cccd), SkBits2Float(0x435a4ccc)); // 497.6f, 218.3f
322*c8dee2aaSAndroid Build Coastguard Worker path.lineTo(SkBits2Float(0x43f8e5e7), SkBits2Float(0x435b47d3)); // 497.796f, 219.281f
323*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f84300), SkBits2Float(0x435b88fd), SkBits2Float(0x43f7b75b), SkBits2Float(0x435c5e8e)); // 496.523f, 219.535f, 495.432f, 220.369f
324*c8dee2aaSAndroid Build Coastguard Worker path.quadTo(SkBits2Float(0x43f6b984), SkBits2Float(0x435de2c4), SkBits2Float(0x43f72ca1), SkBits2Float(0x43609572)); // 493.449f, 221.886f, 494.349f, 224.584f
325*c8dee2aaSAndroid Build Coastguard Worker path.close();
326*c8dee2aaSAndroid Build Coastguard Worker testSimplify(reporter, path, filename);
327*c8dee2aaSAndroid Build Coastguard Worker }
328*c8dee2aaSAndroid Build Coastguard Worker
329*c8dee2aaSAndroid Build Coastguard Worker
330*c8dee2aaSAndroid Build Coastguard Worker
331*c8dee2aaSAndroid Build Coastguard Worker static void (*skipTest)(skiatest::Reporter* , const char* filename) = nullptr;
332*c8dee2aaSAndroid Build Coastguard Worker static void (*firstTest)(skiatest::Reporter* , const char* filename) = nullptr;
333*c8dee2aaSAndroid Build Coastguard Worker static void (*stopTest)(skiatest::Reporter* , const char* filename) = nullptr;
334*c8dee2aaSAndroid Build Coastguard Worker
335*c8dee2aaSAndroid Build Coastguard Worker static TestDesc tests[] = {
336*c8dee2aaSAndroid Build Coastguard Worker TEST(tiger8a_h_1),
337*c8dee2aaSAndroid Build Coastguard Worker TEST(tiger8a),
338*c8dee2aaSAndroid Build Coastguard Worker TEST(tiger8b_h_1),
339*c8dee2aaSAndroid Build Coastguard Worker TEST(tiger8b),
340*c8dee2aaSAndroid Build Coastguard Worker TEST(tiger8),
341*c8dee2aaSAndroid Build Coastguard Worker TEST(tiger_threaded),
342*c8dee2aaSAndroid Build Coastguard Worker };
343*c8dee2aaSAndroid Build Coastguard Worker
344*c8dee2aaSAndroid Build Coastguard Worker static const size_t testCount = std::size(tests);
345*c8dee2aaSAndroid Build Coastguard Worker static bool runReverse = false;
346*c8dee2aaSAndroid Build Coastguard Worker
DEF_TEST(PathOpsTiger,reporter)347*c8dee2aaSAndroid Build Coastguard Worker DEF_TEST(PathOpsTiger, reporter) {
348*c8dee2aaSAndroid Build Coastguard Worker RunTestSet(reporter, tests, testCount, firstTest, skipTest, stopTest, runReverse);
349*c8dee2aaSAndroid Build Coastguard Worker }
350