1 // Boost.Geometry (aka GGL, Generic Geometry Library)
4 // Copyright (c) 2012-2019 Barend Gehrels, Amsterdam, the Netherlands.
6 // This file was modified by Oracle on 2016-2021.
7 // Modifications copyright (c) 2016-2021, Oracle and/or its affiliates.
8 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
10 // Use, modification and distribution is subject to the Boost Software License,
11 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
12 // http://www.boost.org/LICENSE_1_0.txt)
14 #include "test_buffer.hpp"
16 static std::string
const simplex
17 = "MULTIPOLYGON(((0 1,2 5,5 3,0 1)),((1 1,5 2,5 0,1 1)))";
19 static std::string
const zonethru
20 = "MULTIPOLYGON(((0 0,0 6,5 6,5 4,3 4,3 0,0 0)),((5 0,5 2,7 2,7 6,10 6,10 0,5 0)))";
22 static std::string
const wrapped
23 = "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(2 2,8 2,8 8,2 8,2 2)),((4 4,4 6,6 6,6 4,4 4)))";
25 static std::string
const nested
26 = "MULTIPOLYGON(((0 0,0 14,14 14,14 0,0 0),(2 2,12 2,12 12,2 12,2 2)),((4 4,4 10,10 10,10 4,4 4),(6 6,8 6,8 8,6 8,6 6)))";
28 static std::string
const triangles
29 = "MULTIPOLYGON(((0 4,3 0,-2.5 -1,0 4)),((3 8,5.5 13,8 8,3 8)),((11 4,13.5 -1,8 0,11 4)))";
31 static std::string
const degenerate0
33 static std::string
const degenerate1
34 = "MULTIPOLYGON(((5 5,5 5,5 5,5 5)),((6 6,6 6,6 6,6 6)))";
35 static std::string
const degenerate2
36 = "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(5 5,5 5,5 5,5 5)),((11 5,11 5,11 5,11 5)))";
38 // From robustness tests (rt)
40 // Case with duplicate points (due to chained boxes) (round)
41 static std::string
const rt_a
42 = "MULTIPOLYGON(((2 7,2 8,3 8,3 7,2 7)),((5 4,5 5,6 5,6 4,5 4)),((5 8,6 8,6 7,6 6,5 6,5 7,4 7,4 8,5 8)),((3 5,4 5,4 4,3 4,2 4,2 5,3 5)))";
44 // Case with u-u (miter)
45 static std::string
const rt_b
46 = "MULTIPOLYGON(((8 4,8 5,9 5,9 4,8 4)),((6 2,6 3,7 3,7 2,6 2)),((8 0,8 1,9 1,9 0,8 0)),((9 7,9 8,10 8,10 7,9 7)))";
48 // Case with geometry::equals( turn.point(7.0000000000000000, 4.3368086899420177e-019), helper_segment(7.0000000000000000, 0.00000000000000000))) (round)
49 static std::string
const rt_c
50 = "MULTIPOLYGON(((6 1,6 2,7 2,7 1,6 1)),((8 0,8 1,9 1,9 0,8 0)))";
52 // Case with round corner on same perpendicular points (round)
53 static std::string
const rt_d
54 = "MULTIPOLYGON(((2 2,2 3,3 2,2 2)),((2 5,2 6,3 5,2 5)),((2 4,2 5,3 4,2 4)),((3 2,3 3,4 2,3 2)),((4 4,4 5,5 4,4 4)),((5 6,5 5,4 5,4 6,5 7,5 6)),((2 2,3 1,3 0,2 0,2 1,1 1,1 2,2 2)),((1 3,1 2,0 2,1 3)),((1 4,2 4,2 3,1 3,1 4)))";
56 // Case with missing turning point (miter) and many intersections (round, OK)
57 static std::string
const rt_e
58 = "MULTIPOLYGON(((0 6,0 7,1 6,0 6)),((3 7,3 8,4 8,4 7,3 7)),((4 6,4 7,5 7,4 6)),((3 6,3 7,4 6,3 6)),((1 9,2 10,2 9,1 9)),((1 9,1 8,0 8,0 9,1 9)),((3 5,3 4,2 4,2 5,2 6,3 5)))";
60 // Extract of e (miter)
61 static std::string
const rt_f
62 = "MULTIPOLYGON(((0 6,0 7,1 6,0 6)),((1 9,1 8,0 8,0 9,1 9)))";
64 // Robustness / turn problem (collinearity with turn after), solved in get_turn-info
65 static std::string
const rt_g1
66 = "MULTIPOLYGON(((3 8,3 9,4 9,3 8)),((7 5,7 6,8 5,7 5)),((1 8,1 9,2 9,1 8)),((1 6,1 7,2 7,1 6)))";
68 static std::string
const rt_g2
69 = "MULTIPOLYGON(((6 5,7 5,6 4,5 4,5 5,6 5)),((4 2,4 3,5 3,4 2)))";
71 static std::string
const rt_g3
72 = "MULTIPOLYGON(((4 2,5 3,5 2,4 2)),((2 0,3 1,3 0,2 0)))";
75 // IP on match of 3 lines
76 static std::string
const rt_h
77 = "MULTIPOLYGON(((4 7,4 8,5 7,4 7)),((4 8,5 9,5 8,4 8)),((9 1,10 2,10 1,9 1)),((4 1,4 2,5 2,4 1)),((2 9,2 10,3 10,2 9)),((7 7,8 8,8 7,7 7)),((3 4,4 4,3 3,2 3,2 4,3 4)))";
80 static std::string
const rt_i
81 = "MULTIPOLYGON(((2 1,2 2,3 2,2 1)),((3 2,3 3,4 3,3 2)))";
83 // r=1.16 (touching in the middle)
84 static std::string
const rt_j
85 = "MULTIPOLYGON(((2 4,2 5,3 5,2 4)),((5 3,5 4,6 4,5 3)),((9 4,9 5,10 5,10 4,9 4)),((0 2,0 3,1 3,0 2)))";
87 // Occupied (but not completely - due to duplicate point there)
88 static std::string
const rt_k
89 = "MULTIPOLYGON(((3 7,3 8,4 8,3 7)),((0 4,0 5,1 5,0 4)),((3 5,3 6,4 6,4 5,3 5)),((2 6,3 7,3 6,2 6)),((3 2,3 1,2 1,2 2,3 3,3 2)),((0 9,1 10,1 9,1 8,0 8,0 9)))";
91 // Segment-intersection problem (nearly collinear not reported as collinear), fixed
92 static std::string
const rt_l
93 = "MULTIPOLYGON(((2 5,2 6,3 5,2 5)),((6 1,6 2,7 1,6 1)))";
95 // Segment-intersection problem (missed touch because of robustness) (with 4), fixed
96 static std::string
const rt_m1
97 = "MULTIPOLYGON(((4 2,4 3,5 2,4 2)),((1 2,2 3,2 2,1 2)))";
100 static std::string
const rt_m2
101 = "MULTIPOLYGON(((0 3,1 4,1 3,0 3)),((3 6,4 7,4 6,4 5,3 5,3 6)))";
103 // Segment-intersection problem (disjoint nearly collinear segments were reported as intersecting), fixed.
104 static std::string
const rt_n
105 = "MULTIPOLYGON(((0 0,1 1,1 0,0 0)),((3 3,4 4,4 3,3 3)))";
107 // Segment intersection of 3 pieces in one point, plus all intersection points are within the other piece (due to precision)
108 static std::string
const rt_o1
109 = "MULTIPOLYGON(((8 4,8 5,9 5,8 4)),((9 4,10 5,10 4,9 4)),((6 2,6 3,7 3,6 2)))";
111 static std::string
const rt_o2
112 = "MULTIPOLYGON(((8 4,8 5,9 5,8 4)),((6 5,7 4,6 4,6 5)),((9 4,10 5,10 4,9 4)),((6 2,6 3,7 3,6 2)))";
114 static std::string
const rt_o3
115 = "MULTIPOLYGON(((8 4,8 5,9 5,8 4)),((6.5 5,7.5 4,6.5 4,6.5 5)),((8.5 4,9.5 5,9.5 4,8.5 4)),((6 2,6 3,7 3,6 2)),((10 4,11 5,11 4,10 4)))";
117 static std::string
const rt_o4
118 = "MULTIPOLYGON(((8 4,8 5,9 5,8 4)),((6.5 5,7.5 4,6.5 4,6.5 5)),((8.5 4,9.5 5,9.5 4,8.5 4)),((6 2,6 3,7 3,6 2)),((10 4,11 5,11 4,10 4)),((10 3,11 3,11 2,10 3)))";
120 // Occupied - intersection
121 static std::string
const rt_p1
122 = "MULTIPOLYGON(((5 2,5 3,6 3,6 2,5 2)),((8 0,8 1,9 0,8 0)),((8 2,9 3,9 2,8 2)))";
124 static std::string
const rt_p2
125 = "MULTIPOLYGON(((9 3,9 4,10 3,9 3)),((9 4,9 5,10 5,9 4)),((8 6,9 7,9 6,8 6)))";
127 static std::string
const rt_p3
128 = "MULTIPOLYGON(((3 8,3 9,4 9,3 8)),((3 7,3 8,4 8,3 7)),((0 8,0 9,1 8,0 8)))";
130 // Occupation map: robustness, nearly collinear, both incoming
131 static std::string
const rt_p4
132 = "MULTIPOLYGON(((8 8,9 9,9 8,8 8)),((5 8,5 9,6 9,5 8)),((6 5,6 6,7 6,6 5)),((4 7,4 8,5 8,4 7)))";
134 // Occupation map: Two collinear segments intersecting one segment
135 static std::string
const rt_p5
136 = "MULTIPOLYGON(((3 2,4 3,4 2,3 2)),((2 2,2 3,3 3,3 2,2 2)),((4 3,5 4,5 3,4 3)))";
138 // Occupied map: only two pieces involved so leave early
139 static std::string
const rt_p6
140 = "MULTIPOLYGON(((7 3,7 4,8 3,7 3)),((7 6,8 7,8 6,7 6)))";
142 // Occupation map: needing relaxed_less for map
143 static std::string
const rt_p7
144 = "MULTIPOLYGON(((6 6,7 7,7 6,6 6)),((3 4,3 5,4 4,3 4)),((2 6,3 7,3 6,2 6)))";
146 // Occupation map: needing relaxed_less PLUS relaxed_equals for map
147 static std::string
const rt_p8
148 = "MULTIPOLYGON(((4 7,4 8,5 7,4 7)),((5 3,6 4,6 3,5 3)),((8 5,8 6,9 6,8 5)))";
150 // Occupation map: needing go back for extra outgoing vectors too
151 static std::string
const rt_p9
152 = "MULTIPOLYGON(((1 6,1 7,2 6,1 6)),((4 3,4 4,5 3,4 3)),((3 4,2 3,2 4,3 5,3 4)))";
154 static std::string
const rt_p10
155 = "MULTIPOLYGON(((6 6,7 7,7 6,6 6)),((4 6,5 7,5 6,4 6)),((8 8,9 9,9 8,8 8)))";
157 // Occupation map, multiple back/forward cases and combinations
158 static std::string
const rt_p11
159 = "MULTIPOLYGON(((0 8,0 9,1 9,1 8,0 8)),((2 8,2 9,3 9,3 8,2 8)),((3 8,4 9,4 8,3 8)),((4 1,4 2,5 2,4 1)))";
161 // Occupation map - incoming angle, non-zero
162 static std::string
const rt_p12
163 = "MULTIPOLYGON(((8 4,9 5,9 4,8 4)),((5 5,5 6,6 6,6 5,5 5)),((8 4,8 3,7 3,8 4)))";
165 // Occupation map - outgoing angle, 1
166 static std::string
const rt_p13
167 = "MULTIPOLYGON(((5 2,6 3,6 2,5 2)),((3 0,4 1,4 0,3 0)),((3 1,3 2,4 2,4 1,3 1)))";
169 // Occupation map - touch which was originally in other segment-id
170 static std::string
const rt_p14
171 = "MULTIPOLYGON(((9 9,10 10,10 9,9 9)),((7 7,8 8,8 7,7 7)),((6 6,6 7,7 7,7 6,6 6)))";
173 // Occupation map - needing measuring sides from original point and not center point
174 static std::string
const rt_p15
175 = "MULTIPOLYGON(((5 2,5 3,6 3,6 2,5 2)),((4 1,5 2,5 1,4 1)),((8 5,9 6,9 5,8 5)))";
177 // Occupation map - needing other approach w.r.t. discarding (collinear) segments
178 static std::string
const rt_p16
179 = "MULTIPOLYGON(((5 7,5 8,6 7,5 7)),((9 3,9 4,10 3,9 3)),((6 7,7 8,7 7,6 7)))";
181 // Occupation map - outputting two valid turns (resulting in the wrong choice in the end)
182 static std::string
const rt_p17
183 = "MULTIPOLYGON(((4 8,5 9,5 8,4 8)),((1 8,2 9,2 8,1 8)),((2 6,3 7,3 6,2 6)))";
185 // Occupation map - outputting no valid turns (needing to take other turns into account)
186 static std::string
const rt_p18
187 = "MULTIPOLYGON(((7 6,8 7,8 6,7 6)),((7 3,7 4,8 3,7 3)),((5 4,6 5,6 4,5 4)))";
189 // Occupation map - showing wrong approach in p17/p18, now new approach with keep_indices
190 static std::string
const rt_p19
191 = "MULTIPOLYGON(((0 5,1 6,1 5,0 5)),((0 7,0 8,1 7,0 7)),((3 4,3 5,4 4,3 4)))";
193 // Occupation map: two non-collinear segments non-intersecting, needing relaxed_equal
194 static std::string
const rt_p20
195 = "MULTIPOLYGON(((2 3,2 4,3 4,3 3,2 3)),((0 5,0 6,1 6,0 5)),((2 7,2 8,3 8,2 7)))";
197 // Occupation map: turn more right should still be included
198 static std::string
const rt_p21
199 = "MULTIPOLYGON(((4 2,4 3,5 3,4 2)),((4 1,5 2,5 1,4 1)),((5 2,6 3,6 2,5 2)))";
201 static std::string
const rt_p22
202 = "MULTIPOLYGON(((4 8,5 9,5 8,4 8)),((5 9,6 10,6 9,5 9)),((1 7,1 8,2 8,2 7,1 7)),((2 6,3 7,3 6,2 6)))";
204 // Occupation map with a uu-turn
205 static std::string
const rt_q1
206 = "MULTIPOLYGON(((4 6,4 7,5 7,5 6,4 6)),((1 6,1 7,2 7,2 6,1 6)),((1 9,1 10,2 10,2 9,1 9)))";
208 // Occupation map with twice a uu-turn
209 static std::string
const rt_q2
210 = "MULTIPOLYGON(((0 6,0 7,1 6,0 6)),((2 6,2 7,3 6,2 6)),((4 5,3 5,3 6,4 6,5 6,5 5,4 4,4 5)))";
212 // Robustness issue related to collinear correction (meeting) and selecting the right axis (x/y)
213 static std::string
const rt_r
214 = "MULTIPOLYGON(((3 1,2 0,1 1,2 2,3 1)),((5 3,4 2,3 2,4 4,5 3)))";
216 // Robustness - flagged by "meeting"
217 static std::string
const rt_s1
218 = "MULTIPOLYGON(((4 1,5 2,5 1,4 1)),((5 2,6 3,6 2,5 2)),((7 1,7 2,8 1,7 1)))";
220 // Robustness - flagged by "disjoint"
221 static std::string
const rt_s2
222 = "MULTIPOLYGON(((0 0,1 1,1 0,0 0)),((2 4,2 5,3 4,2 4)),((3.5 3.5,4 4,4 3,3 3,3 4,3.5 3.5)))";
224 // Robustness issue in get_turn_info (touch, collinear, blocking q)
225 static std::string
const rt_t
226 = "MULTIPOLYGON(((1 3,1 4,2 3,1 3)),((1 4,0 3,0 4,0 5,1 4)))";
228 // Created traversed ring
229 static std::string
const rt_u1
230 = "MULTIPOLYGON(((7 6,8 7,8 6,7 6)),((8 9,9 10,9 9,8 9)),((2 8,3 9,3 8,2 8)),((6 5,6 6,7 6,6 5)),((6 7,7 7,6 6,5 6,6 7)),((7 7,7 8,8 7,7 7)),((6 7,6 8,7 8,6 7)),((8 7,8 8,9 8,9 7,8 7)))";
232 static std::string
const rt_u2
233 = "MULTIPOLYGON(((4 2,5 3,5 2,4 2)),((6 4,6 5,7 5,6 4)),((7 4,7 5,8 5,7 4)),((7 3,7 4,8 3,7 3)),((7 10,8 10,7 9,6 9,7 10)),((0 7,0 8,1 7,0 7)),((6 1,6 2,7 2,7 1,6 1)),((5 7,5 8,6 9,6 8,7 9,7 8,7 7,6 6,6 7,5 7)),((5 4,6 4,6 3,5 3,4 3,4 4,5 4)),((5 2,6 2,5 1,4 0,3 0,4 1,3 1,3 2,3 3,4 3,4 2,4.5 1.5,5 2)),((5 6,5 5,4 5,4 6,4 7,5 7,5 6)),((5 0,5 1,5.5 0.5,6 1,6 0,5 0)),((5 9,5 8,4 8,3 8,2 8,1 8,0 8,1 9,1 10,2 9,2 10,3 10,4 10,5 10,5 9)),((4 5,4 4,3 4,3 3,2 3,1 3,0 3,0 4,0 5,0 6,1 6,2 5,1 5,1 4,2 4,3 5,2 5,2 6,2.5 5.5,3 6,4 5)),((3 2,2 2,2 3,3 2)),((2 0,1 0,2 1,3 0,2 0)),((1 1,0 1,0 2,0 3,1 2,1.5 1.5,2 2,3 1,2 1,1 1)),((2 6,1 6,1 7,2 7,3 7,2 6)),((4 8,4 7,3 7,4 8)),((9 6,8 6,7 6,7 7,8 7,8.5 6.5,9 7,8 7,8 8,8.5 7.5,9 8,8 8,8 9,9 9,9 10,10 10,10 9,10 8,10 7,10 6,10 5,9 4,9 5,8 5,9 6)),((7 0,6 0,7 1,8 1,7 0)),((8 3,9 2,8 2,7 2,8 3)),((10 2,10 1,10 0,9 0,9 1,8 1,8 2,8.5 1.5,9 2,9 3,10 4,10 3,10 2)),((9 4,9 3,8 3,8 4,9 4)))";
235 static std::string
const rt_u3
236 = "MULTIPOLYGON(((3 0,4 1,4 0,3 0)),((2 0,2 1,3 1,2 0)),((6 7,7 8,7 7,6 7)),((1 2,2 3,2 2,1 2)),((9 1,10 2,10 1,9 1)),((0 2,0 3,1 3,1 2,0 2)),((5 0,5 1,6 1,6 0,5 0)),((1 1,2 2,2 1,1 1)),((0 7,0 8,1 7,0 7)),((9 0,10 1,10 0,9 0)),((0 5,0 6,1 6,1 5,0 5)),((1 6,2 7,2 6,1 6)),((7 0,8 1,8 0,7 0)),((8 6,9 7,9 6,8 6)),((9 6,10 7,10 6,9 6)),((1 4,1 5,2 5,1 4)),((5 6,4 5,4 6,5 7,5 6)),((5 4,4.5 3.5,5 3,4 3,4 2,3 1,3 2,3 3,2 3,2 4,3 4,4 4,5 5,5 4)),((4 7,3 7,3 8,4 9,5 10,6 10,6 9,5 9,4 8,5 8,4 7)),((6 3,5 3,5 4,5.5 3.5,6 4,7 4,7 3,8 3,8 2,8 1,7 1,6 1,6 2,6 3)),((3 5,2 4,2 5,2 6,3 5)),((1 1,1 0,0 0,0 1,1 2,1 1)),((2 9,2 8,1 8,0 8,1 9,1 10,1.5 9.5,2 10,2.5 9.5,3 10,3 9,2 9)),((6 5,6 6,7 7,8 7,8 6,7 6,7 5,6 4,6 5)),((7 8,6 8,6 9,7 9,8 8,7 8)),((9 10,10 10,10 9,10 8,9 7,9 8,8 8,9 9,8 9,8 10,9 10)))";
238 static std::string
const rt_u4
239 = "MULTIPOLYGON(((5 0,6 1,6 0,5 0)),((6 1,6 2,7 2,7 1,6 1)),((6 6,7 7,7 6,6 6)),((4 7,4 8,5 8,4 7)),((1 6,1 7,2 7,1 6)),((3 4,3 5,4 5,3 4)),((2 0,2 1,3 0,2 0)),((7 2,7 3,8 3,7 2)),((3 3,4 4,4 3,3 3)),((5 9,5 10,6 10,7 10,6 9,5 8,5 9)),((5 4,5 5,6 4,5 4)),((3 1,4 2,4 1,3 1)),((3 0,3 1,4 0,3 0)),((2 7,2 8,3 8,3 7,2 7)),((9 2,9 3,10 2,9 2)),((6 2,6 3,7 3,6 2)),((8 8,9 9,9 8,8 8)),((2 1,2 2,3 2,3 1,2 1)),((4 3,5 4,5 3,4 3)),((4 6,5 7,5 6,4 6)),((1 8,1 9,2 8,1 7,1 8)),((8 8,9 7,8 7,7 7,7 8,8 8)),((8 1,8 2,9 2,9 1,10 1,9 0,8 0,8 1)),((5 2,4 2,4 3,5 2)),((2 5,1 5,1 6,2 6,3 5,2 5)),((1 3,2 4,2 3,2 2,1 1,0 1,1 2,1 3)),((1 0,0 0,1 1,2 1,1.5 0.5,2 0,1 0)),((2 10,3 10,4 10,4 9,3 9,2 8,2 9,1 9,0 9,1 10,2 10)),((9 5,9 6,10 6,10 5,10 4,9 4,8.5 3.5,9 3,8 3,8 4,7 4,7 5,8 5,9 5)),((7 0,6 0,7 1,8 1,7 0)),((7 9,7 8,6 8,6 9,7 9)))";
241 static std::string
const rt_u5
242 = "MULTIPOLYGON(((4 3,4 4,5 4,5 3,4 3)),((6 5,6 6,7 6,6 5)),((5 4,6 5,6 4,5 4)),((4 0,4 1,5 1,5 0,4 0)),((7 8,8 9,8 8,7 8)),((8 2,8 3,9 3,8 2)),((2 1,2 2,3 1,2 1)),((5 7,5 8,6 8,5 7)),((4 5,4 6,5 5,4 5)),((7 0,8 1,8 0,7 0)),((7 2,8 1,7 1,6 1,7 2)),((3 3,4 3,4 2,3 2,3 3)),((3 9,3 10,4 9,3 9)),((1 2,2 3,2 2,1 2)),((2 4,2 5,3 4,2 3,2 4)),((3 7,4 7,3 6,2 6,3 7)))";
244 static std::string
const rt_u6
245 = "MULTIPOLYGON(((2 2,3 3,3 2,2 2)),((9 8,9 9,10 9,10 8,9 8)),((5 3,6 4,6 3,5 3)),((5 5,5 6,6 6,5 5)),((5 1,6 2,6 1,5 1)),((6 5,7 6,7 5,6 5)),((3 0,4 1,4 0,3 0)),((6 6,6 7,7 6,6 6)),((9 2,10 2,10 1,9 1,9 2)),((6 8,6 9,7 9,7 8,6 8)),((7 0,7 1,8 0,7 0)),((4 4,4 5,5 5,4 4)),((0 7,0 8,1 8,0 7)),((5 9,6 10,6 9,5 9)),((4 9,4 10,5 10,5 9,4 9)),((3 7,4 7,3 6,2 6,3 7)),((9 7,10 6,9 6,8 6,9 7)),((5 3,5 2,4 2,4 3,4 4,5 4,5 3)),((1 1,2 0,1 0,0 0,1 1)),((2 10,3 10,3 9,2 9,1 9,1 10,2 10)),((8.5 4.5,9 4,8 4,7 4,8 5,9 5,8.5 4.5)),((8 3,9 3,9 2,8 2,8 3)))";
247 // This case has colocated intersection points and is fixed by specific sorting in enrich_intersection_points
248 static std::string
const rt_u7
249 = "MULTIPOLYGON(((4 5,4 6,5 5,4 5)),((9 2,9 3,10 3,10 2,9 2)),((7 3,7 4,8 4,8 3,7 3)),((5 5,6 6,6 5,5 5)),((3 6,4 7,4 6,3 6)),((0 5,0 6,1 5,0 5)))";
251 // This case is also fixed by sorting order in enrich_intersection_points. It also has IP's between piece and original (due to rounding/rescaling pieces but not original) but that is not problematic
252 // anymore by the fix in sorting
253 static std::string
const rt_u8
254 = "MULTIPOLYGON(((4 3,4 4,5 4,5 3,4 3)),((6 3,6 4,7 4,7 3,6 3)),((9 0,9 1,10 0,9 0)),((9 3,9 4,10 4,10 3,9 3)),((8 2,9 2,9 1,8 1,8 2)),((8 4,8 5,9 4,8 4)),((9 1,10 2,10 1,9 1)),((6 7,7 8,7 7,6 7)),((4 6,4 7,5 7,4 6)),((8 8,8 9,9 9,8 8)),((3 2,3 3,4 3,4 2,3 2)),((7 1,8 1,8 0,7 0,6 0,6 1,7 1)))";
256 // Fixed by checking IP's between piece and original (using robust represention of original)
257 static std::string
const rt_u9
258 = "MULTIPOLYGON(((2 3,2 4,3 4,2 3)),((9 8,9 9,10 9,10 8,9 8)),((6 3,6 4,7 4,6 3)),((5 8,5 9,6 9,5 8)),((9 5,9 6,10 6,9 5)),((4 4,4 5,5 5,5 4,4 4)),((7 7,7 8,8 8,7 7)),((8 6,8 7,9 6,8 6)),((6 7,7 7,6 6,5 6,5 7,6 7)))";
260 // Fixed by fixing border check for IP's
261 static std::string
const rt_u10
262 = "MULTIPOLYGON(((7 5,8 6,8 5,7 5)),((4 5,5 6,5 5,5 4,4 4,4 5)),((9 5,10 5,10 4,9 4,8 4,9 5)),((1 2,1 1,0 1,1 2)),((6 6,6 7,7 7,7 6,6 6)),((3 6,3 7,4 6,3 6)),((8 6,8 7,9 6,8 6)),((1 3,1 4,2 3,1 3)),((9 9,10 8,9 8,9 7,8 7,8 8,9 9)),((9 2,10 3,10 2,9 2)),((2 5,2 6,3 6,2 5)),((1 9,1 10,2 10,2 9,1 9)),((4 6,4 7,5 7,5 6,4 6)),((6 0,6 1,7 1,7 0,6 0)),((0 9,0 10,1 10,0 9)),((3.5 5.5,4 6,4 5,3 5,3 6,3.5 5.5)),((9 3,9 4,10 3,9 3)),((9 9,10 10,10 9,9 9)),((1 6,2 7,2 6,1 6)),((4 2,4 3,5 2,4 2)),((5 10,4 9,4 10,5 10)),((0 3,1 2,0 2,0 3)),((5 8,4 8,5 9,6 10,6 9,7 9,7 8,6 8,5 7,5 8)),((6 2,5 2,5 3,5.5 2.5,6 3,6 4,7 4,8 4,8 3,7 3,7 2,6 2)),((4 0,3 0,3 1,2.5 0.5,3 0,2 0,2 1,2 2,3 3,3 2,4 2,4 1,5 0,4 0)),((3 5,4 4,3 4,2 4,3 5)),((0 6,0 7,1 7,1 6,1 5,0 5,0 6)),((2 8,3 8,3 7,2 7,1 7,1 8,2 8)),((9 1,9 0,8 0,8 1,8 2,9 1)),((7 10,8 10,8 9,7 9,7 10)))";
264 static std::string
const rt_u10_c
265 = "MULTIPOLYGON(((7 5,8 6,8 5,7 5)),"
266 "((6 6,6 7,7 7,7 6,6 6)),"
267 "((8 6,8 7,9 6,8 6)),"
268 "((9 9,10 8,9 8,9 7,8 7,8 8,9 9)),"
269 "((9 9,10 10,10 9,9 9)),"
270 "((5 8,4 8,5 9,6 10,6 9,7 9,7 8,6 8,5 7,5 8)),"
271 "((7 10,8 10,8 9,7 9,7 10)))";
273 // Fixed by blocking IP's instead of discarding them
274 static std::string
const rt_u11
275 = "MULTIPOLYGON(((7 3,8 4,8 3,7 3)),((4 8,5 9,5 8,4 8)),((7 1,8 2,8 1,7 1)),((7 2,8 3,8 2,7 2)),((0 1,0 2,1 2,0 1)),((8 1,9 2,9 1,8 1)),((6 9,6 8,5 8,6 9)),((7 9,7 10,8 10,7 9)),((0 7,1 8,1 7,0 7)),((6 4,6 5,7 5,7 4,6 4)),((7 4,8 5,8 4,7 4)),((4 2,4 3,5 3,5 2,4 2)),((5 5,5 6,6 6,6 5,5 5)),((5 9,6 10,6 9,5 9)),((4 8,4 7,3 7,3 8,4 8)),((5 5,6 4,5 4,4 4,4 5,5 5)),((4.5 0.5,5 0,4 0,4 1,5 2,6 2,6 3,7 4,7 3,7 2,7 1,6 1,6 0,5 0,5 1,4.5 0.5)),((4 6,3 5,3 6,4 7,5 7,5 6,4 6)),((2 3,1 3,0 3,1 4,1 5,1 6,2 6,2 5,2 4,2 3)),((3 4,4 4,3 3,2 3,3 4)),((3 9,4 9,3 8,2 8,2 9,3 9)),((1 9,1 8,0 8,0 9,1 10,2 9,1 9)),((3 7,3 6,2 6,2 7,3 7)),((8 6,8 7,9 7,9 6,9 5,8 5,8 6)),((9 1,10 2,10 1,10 0,9 0,9 1)),((8 8,8 7,7 7,7 8,8 8)),((6 8,7 9,7 8,6 7,6 8)),((10 9,10 8,10 7,9 7,9 8,9 9,9 10,10 10,10 9)))";
277 static std::string
const rt_u12
278 = "MULTIPOLYGON(((9 0,9 1,10 0,9 0)),((1 0,1 1,2 1,2 0,1 0)),((4 0,4 1,5 0,4 0)),((1 2,1 3,2 2,1 2)),((3 7,4 8,4 7,3 7)),((3 6,4 7,4 6,3 6)),((6 9,7 10,7 9,6 9)),((5 6,5 7,6 7,5 6)),((7 6,7 7,8 7,7 6)),((7 3,7 4,8 3,7 3)),((8 7,8 8,9 7,8 6,8 7)),((8 5,8 6,9 6,8 5)),((6 4,6 5,7 5,6 4)),((2 9,2 10,3 10,2 9)),((1 4,2 5,2 4,1 4)),((2 2,2 3,3 3,2 2)),((3 2,3 3,4 3,3 2)),((9 5,10 6,10 5,9 5)),((4 4,5 5,5 4,4 4)),((5 10,6 10,6 9,5 9,4 9,4 10,5 10)),((5 3,5 4,6 4,6 3,6 2,6 1,5 1,5 2,4 2,4 3,5 3)),((0 6,1 6,1 5,0 5,0 6)),((3 5,4 6,4 5,4 4,3 4,3 5)),((2 2,3 2,4 2,4 1,3 1,2 1,2 2)),((2 8,1 8,2 9,3 9,2 8)),((2 6,1 6,2 7,3 6,2 6)),((0 9,1 10,1 9,0 8,0 9)),((1 8,1 7,0 7,1 8)),((9 5,10 4,9 4,8 4,8 5,9 5)),((6 1,7 1,6.5 0.5,7 0,6 0,6 1)),((8 1,9 1,8.5 0.5,9 0,8 0,8 1)),((6 7,7 7,6.5 6.5,7 6,6 6,6 7)),((6.5 8.5,7 9,7 8,6 8,6 9,6.5 8.5)),((9 9,10 10,10 9,9 8,9 9)))";
280 static std::string
const rt_u13
281 = "MULTIPOLYGON(((6 4,6 5,7 5,6 4)),((3 2,3 3,4 3,3 2)),((7 8,7 9,8 9,8 8,7 8)),((4 9,4 10,5 10,4 9)),((7 7,7 8,8 7,7 7)),((2 6,2 7,3 7,2 6)),((0 1,1 2,1 1,0 1)),((3 1,4 2,4 1,3 1)),((2 5,2 6,3 6,2 5)),((3 5,4 4,3 4,2 4,3 5)),((4 1,5 2,5 1,4 1)),((2 0,2 1,3 1,2 0)),((5 7,5 8,6 7,5 7)),((0 2,0 3,1 3,0 2)),((9 8,9 9,10 9,10 8,9 8)),((7 5,7 6,8 5,7 5)),((5 6,5 7,6 6,5 6)),((0 6,0 7,1 7,1 6,0 6)),((5 0,5 1,6 1,5 0)),((8 7,8 8,9 8,8 7)),((4.5 4.5,5 4,4 4,4 5,5 5,4.5 4.5)),((6 2,5 2,5 3,6 3,7 3,8 2,7 2,6 2)),((8 6,8 7,9 7,9 6,9 5,8 5,8 6)),((8 1,9 0,8 0,7 0,8 1)))";
283 static std::string
const rt_v1
284 = "MULTIPOLYGON(((2 8,2 9,3 9,2 8)),((3 6,3 7,4 7,3 6)),((9 9,9 10,10 10,10 9,9 9)),((0 7,1 8,1 7,0 7)))";
286 static std::string
const rt_v2
287 = "MULTIPOLYGON(((8 4,8 5,9 5,9 4,8 4)),((2 5,2 6,3 5,2 5)),((9 7,9 8,10 8,10 7,9 7)),((2 2,2 3,3 2,2 2)),((6 6,7 5,6 5,6 6)),((6 6,6 7,7 7,7 6,6 6)),((8 9,9 9,8 8,8 9)),((8 9,7 9,8 10,8 9)))";
289 static std::string
const rt_v3
290 = "MULTIPOLYGON(((7 0,7 1,8 1,8 0,7 0)),((6 2,6 3,7 2,6 2)),((9 3,8 3,8 4,9 3)),((9 3,9 4,10 3,9 3)))";
292 static std::string
const rt_v4
293 = "MULTIPOLYGON(((5 4,5 5,6 5,6 4,5 4)),((7 1,6 1,7 2,7 1)),((7 1,8 1,8 0,7 0,7 1)),((6 1,5 1,5 2,6 1)))";
295 // From 2020 runs of robustness test recursive_polygons_buffer, without rescaling
296 // For the same problem there can be multiple cases, but details differ
298 // Cases missing a turn, or needing a start turn
299 static std::string
const nores_mt_1
300 = "MULTIPOLYGON(((4 8,4 9,5 9,4 8)),((3 6,3 7,4 6,3 6)))";
302 static std::string
const nores_mt_2
303 = "MULTIPOLYGON(((5 3,6 4,6 3,5 3)),((4 4,3 4,4 5,5 5,4 4)),((4 5,3 5,3 6,4 5)))";
305 static std::string
const nores_mt_3
306 = "MULTIPOLYGON(((7 4,7 5,8 5,8 4,7 4)),((2 6,2 7,3 6,2 6)),((3 10,4 10,4 9,4 8,3 8,3 10)))";
308 static std::string
const nores_mt_4
309 = "MULTIPOLYGON(((6 8,6 9,7 9,6 8)),((1 5,1 6,2 6,1 5)),((7 7,8 8,8 7,7 7)),((0 3,0 4,1 3,0 3)))";
311 static std::string
const nores_mt_5
312 = "MULTIPOLYGON(((4 3,4 4,5 4,5 3,4 3)),((3 1,3 2,4 1,3 1)),((1 6,2 7,2 6,1 6)),((3 6,4 5,3 4,3 6)))";
314 static std::string
const nores_mt_6
315 = "MULTIPOLYGON(((5 7,5 6,4 6,4 5,4 4,3 4,3 6,3 7,5 7)))";
317 // Cases generating an extra turn, and/or a cluster not yet handled correctly
318 static std::string
const nores_et_1
319 = "MULTIPOLYGON(((5 7,5 8,6 8,5 7)),((5 4,5 5,6 4,5 4)),((3 6,4 7,4 6,3 6)))";
321 static std::string
const nores_et_2
322 = "MULTIPOLYGON(((4 2,5 3,5 2,4 2)),((6 3,6 4,7 4,7 3,6 3)),((7 2,8 3,8 2,7 2)),((4 4,4 5,5 5,5 4,4 4)))";
324 static std::string
const nores_et_3
325 = "MULTIPOLYGON(((3 1,3 2,4 2,4 1,3 1)),((5 4,5 3,4 3,5 4)),((5 3,6 2,5 2,5 3)),((8 1,7 1,6 1,7 2,7 3,7.5 2.5,8 3,8 1)))";
327 static std::string
const nores_et_4
328 = "MULTIPOLYGON(((4 7,4 8,5 8,5 7,4 7)),((3 5,3 6,4 5,3 5)),((1 6,2 7,2 6,1 6)))";
330 static std::string
const nores_et_5
331 = "MULTIPOLYGON(((3 2,3 3,4 3,4 2,3 2)),((0 3,0 4,1 3,0 3)),((2 2,2 1,1 1,2 2)))";
333 static std::string
const nores_et_6
334 = "MULTIPOLYGON(((0 5,0 6,1 5,0 5)),((3 5,4 6,4 5,3 5)),((2 0,2 1,3 0,2 0)),((5 2,4 1,4 4,5 5,5 2)),((0 9,1 9,1 8,0 8,0 9)),((1 8,1 7,0 7,1 8)),((7 4,7 3,6 3,7 4)),((7 4,7 6,8 6,8 5,7 4)),((7 3,8 3,8 2,7 2,6 2,7 3)),((7 9,8 9,7.5 8.5,8 8,8 7,7 7,7 9)),((8 9,9 9,9 8,8 8,8 9)),((8 3,8 4,9 4,8 3)),((10 3,9 2,9 4,10 4,10 3)),((5 2,6 1,5 1,5 2)),((4 8,4.5 7.5,5 8,5 7,4 7,4 8)),((4 8,3 8,4 9,4 8)),((4 9,3 9,4 10,4 9)),((9 2,9 1,8 1,9 2)))";
336 static std::string
const nores_et_7
337 = "MULTIPOLYGON(((4 0,5 1,5 0,4 0)),((5 4,6 5,6 4,5 4)),((3 6,4 6,4 5,3 5,3 6)),((0 6,1 7,1 6,0 6)),((2 9,2 10,3 10,2 9)),((2 2,3 3,3 2,2 2)),((5 9,4 8,4 9,5 10,6 10,6 9,5 9)),((4 8,3 7,3 8,3 9,4 8)),((6 2,6 3,7 3,7 2,6 2)),((6 2,5 2,5 3,6 2)),((6 7,5 7,5 8,6 8,6 7)),((6 7,6 6,5 6,6 7)),((6 7,7 8,7 7,6 7)),((9 5,9 6,10 6,9.5 5.5,10 5,9 5)),((9 5,9 4,8 4,9 5)),((9 4,10 5,10 4,9 4)),((9 1,8 1,7 1,8 2,8 3,9 3,9 1)),((9 1,10 1,9 0,8 0,9 1)),((7 3,7 4,8 4,8 3,7 3)),((9 10,10 10,10 9,9 9,9 10)),((9 10,8 9,7 9,7 10,9 10)))";
339 // Cases having wrong next turn information, somehow, taking the "i" (intersection),
340 // which is wrong for buffer (it should take the "u" like union)
341 static std::string
const nores_wn_1
342 = "MULTIPOLYGON(((8 3,8 4,9 4,9 3,8 3)),((9 5,9 6,10 5,9 5)),((8 8,9 9,9 8,8 8)),((8 8,8 7,7 7,8 8)))";
343 static std::string
const nores_wn_2
344 = "MULTIPOLYGON(((9 5,9 6,10 5,9 5)),((8 8,8 7,7 7,7 8,8 8)),((8 8,9 9,9 8,8 8)))";
346 // Other cases with wrong turn information
347 static std::string
const nores_wt_1
348 = "MULTIPOLYGON(((0 4,0 5,1 4,0 4)),((9 3,9 4,10 4,9 3)),((9 7,10 8,10 7,9 7)),((6 7,7 8,7 7,6 7)),((0 7,0 8,1 8,0 7)),((3 6,4 6,4 5,3 4,3 6)),((3 7,2 6,2 7,3 7)),((3 7,3 8,4 8,4 7,3 7)),((3 3,4 4,4 3,3 3)),((3 3,3 2,2 2,2 3,3 3)),((2 6,2 5,1 5,1 6,2 6)),((6 4,6 3,5 3,5 4,6 4)),((6 4,7 5,7 4,6 4)),((5 1,4 0,4 1,5 1)),((5 1,5 2,6 2,6 1,5 1)))";
349 static std::string
const nores_wt_2
350 = "MULTIPOLYGON(((1 1,2 2,2 1,1 1)),((0 2,0 3,1 3,0 2)),((4 3,5 4,5 3,4 3)),((4 3,3 3,4 4,4 3)))";
352 static std::string
const nores_b8e6
353 = "MULTIPOLYGON(((4 4,5 5,5 4,4 4)),((4 2,5 2,5 1,3 1,4 2)),((3 1,4 0,3 0,3 1)))";
354 static std::string
const nores_2881
355 = "MULTIPOLYGON(((2 5,2 6,3 5,2 5)),((1 7,0 7,0 8,1 8,1 7)),((1 7,1 6,0 6,1 7)))";
356 // The same but with an extra unrelated polygon, still influencing order of turns and behavior
357 static std::string
const nores_2881b
358 = "MULTIPOLYGON(((5 7,5 8,6 8,6 7,5 7)),((2 5,2 6,3 5,2 5)),((1 7,0 7,0 8,1 8,1 7)),((1 7,1 6,0 6,1 7)))";
360 static std::string
const nores_3af0
361 = "MULTIPOLYGON(((1 8,0 8,0 9,1 9,1 8)),((1 8,1 7,0 7,1 8)),((2 4,3 5,3 4,2 4)),((2 6,2 7,3 6,2 6)))";
363 static std::string
const nores_5318
364 = "MULTIPOLYGON(((3 8,3 9,4 9,3 8)),((3 4,4 5,4 4,3 4)),((2 7,1 6,1 7,2 7)),((2 7,3 6,2 6,2 7)))";
366 static std::string
const nores_6061
367 = "MULTIPOLYGON(((2 8,2 9,3 8,2 8)),((4 3,4 4,5 4,4 3)),((7 2,7 3,8 2,7 2)),((5 3,6 4,6 3,5 3)),((2 6,3 7,3 6,2 6)),((2 3,3 2,3 1,2 1,2 3)),((2 3,3 4,3 3,2 3)))";
369 static std::string
const nores_1ea1
370 = "MULTIPOLYGON(((2 0,2 1,3 0,2 0)),((7 5,6 4,5 3,5 4,5 5,7 5)),((2 3,1 3,1 4,2 3)),((2 3,2 4,3 3,2 3)))";
372 // Related to discarding start turns
373 static std::string
const nores_804e
374 = "MULTIPOLYGON(((4 8,4 9,5 8,4 8)),((3 9,3 10,4 10,3 9)),((0 7,0 8,1 7,0 7)),((4 6,3 6,3 7,4 6)),((4 6,4 7,5 7,4 6)))";
375 static std::string
const nores_51c6
376 = "MULTIPOLYGON(((3 6,4 7,4 6,3 6)),((5 7,5 8,6 8,5 7)),((6 7,7 6,7 5,6 5,6 7)))";
377 static std::string
const nores_e5f3
378 = "MULTIPOLYGON(((5 1,6 2,6 1,5 1)),((4 2,3 2,4 3,4 2)),((4 2,5 3,5 2,4 2)))";
380 static std::string
const nores_37f6
381 = "MULTIPOLYGON(((4 1,5 2,5 1,4 1)),((1 0,1 1,2 1,2 0,1 0)),((0 3,0 4,1 4,1 3,0 3)),((2 2,2 3,3 2,2 2)))";
383 static std::string
const nores_495d
384 = "MULTIPOLYGON(((2 0,2 1,3 0,2 0)),((2 3,3 4,3 3,2 3)),((5 1,5 2,6 2,5 1)),((4 3,4 2,3 2,4 3)))";
386 static std::string
const nores_e402
387 = "MULTIPOLYGON(((3 1,4 2,4 1,3 1)),((3 1,4 0,3 0,3 1)))";
390 static std::string
const res_ebc4
391 = "MULTIPOLYGON(((3 9,3 10,4 9,3 9)),((9 5,9 6,10 6,10 5,9 5)),((8 8,8 9,9 9,8 8)),((4 8,3 7,3 8,4 8)),((4 8,5 9,6 9,6 8,4 8)),((4 5,3 4,3 5,4 5)),((4 5,5 6,5 5,4 5)))";
392 static std::string
const res_8618
393 = "MULTIPOLYGON(((6 2,7 3,7 2,6 2)),((4 3,5 4,5 3,4 3)),((3 0,3 1,4 0,3 0)),((8 7,8 8,9 8,8 7)),((0 7,0 8,1 8,1 7,0 7)),((2 2,1 2,1 3,1 4,2 4,2 2)),((2 2,2 1,1 1,2 2)))";
394 static std::string
const res_3b4d
395 = "MULTIPOLYGON(((8 0,9 1,9 0,8 0)),((3 4,2 4,2 5,2 6,3 6,3 4)),((3 4,4 3,3 3,3 4)),((3 8,3 9,4 9,3 8)),((0 5,0 6,1 6,0 5)),((7 3,8 4,8 3,7 3)),((5 5,6 6,6 5,5 5)))";
398 static std::string
const neighbouring
399 = "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10)))";
401 static std::string
const neighbouring_with_holes
402 = "MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0),(4 4,4 6,6 6,6 4,4 4)),((10 10,10 20,20 20,20 10,10 10),(14 14,14 16,16 16,16 14,14 14)))";
405 // MultiPolygons causing assertion failure
406 static std::string
const mysql_report_2015_07_05_1
407 = "MULTIPOLYGON(((44 25,2.68435e+08 1.75922e+13,-6.87195e+10 -6.87195e+10,44 25),(-9704 8028,1.01776e+308 4.42027e+307,1.34218e+08 7.20576e+16,-9704 8028),(27945 15972,13 24,18 34,27945 15972),(3.3444e+307 1.47467e+308,1.22536e+38 1.42547e+38,10 -88,-28578 24802,3.3444e+307 1.47467e+308)))";
408 static std::string
const mysql_report_2015_07_05_2
409 = "MULTIPOLYGON(((19777 -21893,3.22595e+307 6.86823e+307,-40 -13,19777 -21893)),((-1322 4851,8.49998e+307 3.94481e+307,75 -69,8.64636e+307 3.94909e+307,-1.15292e+18 7.20576e+16,-1322 4851)))";
411 template <bool Clockwise
, typename P
>
414 typedef bg::model::polygon
<P
, Clockwise
> polygon_type
;
415 typedef bg::model::multi_polygon
<polygon_type
> multi_polygon_type
;
416 typedef typename
bg::coordinate_type
<P
>::type coor_type
;
418 bg::strategy::buffer::join_miter join_miter
;
419 bg::strategy::buffer::join_round
join_round(100);
420 bg::strategy::buffer::join_round
join_round_rough(12);
421 bg::strategy::buffer::end_flat end_flat
;
423 bg::strategy::buffer::join_round
join_round32(32);
424 bg::strategy::buffer::end_round
end_round32(32);
426 test_one
<multi_polygon_type
, polygon_type
>("triangles424", triangles
, join_miter
, end_flat
, 417.910, 4.24);
427 test_one
<multi_polygon_type
, polygon_type
>("triangles425", triangles
, join_miter
, end_flat
, 418.918, 4.25);
428 test_one
<multi_polygon_type
, polygon_type
>("triangles426", triangles
, join_miter
, end_flat
, 419.927, 4.26);
429 test_one
<multi_polygon_type
, polygon_type
>("zonethru_10", zonethru
, join_miter
, end_flat
, 96.0000, 1.0);
431 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_05", simplex
, join_round
, end_flat
, 23.7030, 0.5);
432 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_05", simplex
, join_miter
, end_flat
, 24.5965, 0.5);
433 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_10", simplex
, join_round
, end_flat
, 34.2532, 1.0);
434 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_10", simplex
, join_miter
, end_flat
, 38.1379, 1.0);
435 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_20", simplex
, join_round
, end_flat
, 59.9159, 2.0);
436 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_20", simplex
, join_miter
, end_flat
, 77.7060, 2.0);
437 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_50", simplex
, join_round
, end_flat
, 174.46, 5.0);
438 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_50", simplex
, join_miter
, end_flat
, 298.797, 5.0);
440 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_01", simplex
, join_round
, end_flat
, 9.7514, -0.1);
441 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_05", simplex
, join_round
, end_flat
, 3.2019, -0.5);
442 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_10", simplex
, join_round
, end_flat
, 0.20116, -1.0);
443 test_one
<multi_polygon_type
, polygon_type
>("multi_simplex_12", simplex
, join_round
, end_flat
, 0.0, -1.2);
445 test_one
<multi_polygon_type
, polygon_type
>("zonethru_05", zonethru
, join_round
, end_flat
, 67.4627, 0.5);
446 test_one
<multi_polygon_type
, polygon_type
>("zonethru_05", zonethru
, join_miter
, end_flat
, 68.0000, 0.5);
447 test_one
<multi_polygon_type
, polygon_type
>("zonethru_10", zonethru
, join_round
, end_flat
, 93.8508, 1.0);
448 test_one
<multi_polygon_type
, polygon_type
>("zonethru_10", zonethru
, join_miter
, end_flat
, 96.0000, 1.0);
449 test_one
<multi_polygon_type
, polygon_type
>("zonethru_15", zonethru
, join_round
, end_flat
, 114.584, 1.5);
450 test_one
<multi_polygon_type
, polygon_type
>("zonethru_15", zonethru
, join_miter
, end_flat
, 117.000, 1.5);
452 test_one
<multi_polygon_type
, polygon_type
>("wrapped_05", wrapped
, join_round
, end_flat
, 104.570, 0.5);
453 test_one
<multi_polygon_type
, polygon_type
>("wrapped_05", wrapped
, join_miter
, end_flat
, 105.000, 0.5);
454 test_one
<multi_polygon_type
, polygon_type
>("wrapped_10", wrapped
, join_round
, end_flat
, 142.281, 1.0);
455 test_one
<multi_polygon_type
, polygon_type
>("wrapped_10", wrapped
, join_miter
, end_flat
, 144.000, 1.0);
456 test_one
<multi_polygon_type
, polygon_type
>("wrapped_15", wrapped
, join_round
, end_flat
, 167.066, 1.5);
457 test_one
<multi_polygon_type
, polygon_type
>("wrapped_15", wrapped
, join_miter
, end_flat
, 169.000, 1.5);
459 test_one
<multi_polygon_type
, polygon_type
>("wrapped_05", wrapped
, join_round
, end_flat
, 33.215, -0.5);
460 test_one
<multi_polygon_type
, polygon_type
>("wrapped_05", wrapped
, join_miter
, end_flat
, 33.000, -0.5);
461 test_one
<multi_polygon_type
, polygon_type
>("wrapped_15", wrapped
, join_round
, end_flat
, 0.0, -1.5);
462 test_one
<multi_polygon_type
, polygon_type
>("wrapped_15", wrapped
, join_miter
, end_flat
, 0.0, -1.5);
463 test_one
<multi_polygon_type
, polygon_type
>("wrapped_25", wrapped
, join_round
, end_flat
, 0.0, -2.5);
464 test_one
<multi_polygon_type
, polygon_type
>("wrapped_25", wrapped
, join_miter
, end_flat
, 0.0, -2.5);
465 test_one
<multi_polygon_type
, polygon_type
>("wrapped_50", wrapped
, join_round
, end_flat
, 0.0, -5.0);
466 test_one
<multi_polygon_type
, polygon_type
>("wrapped_50", wrapped
, join_miter
, end_flat
, 0.0, -5.0);
468 test_one
<multi_polygon_type
, polygon_type
>("nested_05", nested
, join_round
, end_flat
, 191.570, 0.5);
469 test_one
<multi_polygon_type
, polygon_type
>("nested_05", nested
, join_round
, end_flat
, 64.430, -0.5);
470 test_one
<multi_polygon_type
, polygon_type
>("nested_10", nested
, join_round
, end_flat
, 254.279, 1.0);
471 test_one
<multi_polygon_type
, polygon_type
>("nested_10", nested
, join_round
, end_flat
, 1.721, -1.0);
472 test_one
<multi_polygon_type
, polygon_type
>("nested_25", nested
, join_round
, end_flat
, 355.622, 2.5);
473 test_one
<multi_polygon_type
, polygon_type
>("nested_25", nested
, join_round
, end_flat
, 0.0, -2.5);
474 // 3.0 is exactly touching (for the deflate case)
475 test_one
<multi_polygon_type
, polygon_type
>("nested_30", nested
, join_round
, end_flat
, 392.256, 3.0);
476 test_one
<multi_polygon_type
, polygon_type
>("nested_30", nested
, join_round
, end_flat
, 0.0, -3.0);
477 test_one
<multi_polygon_type
, polygon_type
>("nested_29", nested
, join_round
, end_flat
, 384.803, 2.9);
478 test_one
<multi_polygon_type
, polygon_type
>("nested_29", nested
, join_round
, end_flat
, 0.0, -2.9);
479 test_one
<multi_polygon_type
, polygon_type
>("nested_31", nested
, join_round
, end_flat
, 399.771, 3.1);
480 test_one
<multi_polygon_type
, polygon_type
>("nested_31", nested
, join_round
, end_flat
, 0.0, -3.1);
482 test_one
<multi_polygon_type
, polygon_type
>("degenerate0", degenerate0
, join_round
, end_flat
, 0.0, 1.0);
483 test_one
<multi_polygon_type
, polygon_type
>("degenerate1", degenerate1
, join_round
, end_flat
, 5.708, 1.0);
484 test_one
<multi_polygon_type
, polygon_type
>("degenerate2", degenerate2
, join_round
, end_flat
, 133.0166, 0.75);
486 test_one
<multi_polygon_type
, polygon_type
>("rt_a", rt_a
, join_round
, end_flat
, 34.53437, 1.0);
487 test_one
<multi_polygon_type
, polygon_type
>("rt_a", rt_a
, join_miter
, end_flat
, 36.0, 1.0);
488 test_one
<multi_polygon_type
, polygon_type
>("rt_b", rt_b
, join_round
, end_flat
, 31.4186, 1.0);
489 test_one
<multi_polygon_type
, polygon_type
>("rt_b", rt_b
, join_miter
, end_flat
, 34.0, 1.0);
490 test_one
<multi_polygon_type
, polygon_type
>("rt_c", rt_c
, join_round
, end_flat
, 14.7093, 1.0);
491 test_one
<multi_polygon_type
, polygon_type
>("rt_c", rt_c
, join_miter
, end_flat
, 16.0, 1.0);
492 test_one
<multi_polygon_type
, polygon_type
>("rt_d", rt_d
, join_round
, end_flat
, 18.8726, 0.3);
493 test_one
<multi_polygon_type
, polygon_type
>("rt_e", rt_e
, join_round
, end_flat
, 14.1866, 0.3);
495 test_one
<multi_polygon_type
, polygon_type
>("rt_g1", rt_g1
, join_round
, end_flat
, 24.719, 1.0);
496 test_one
<multi_polygon_type
, polygon_type
>("rt_g3", rt_g3
, join_miter
, end_flat
, 16.5711, 1.0);
498 test_one
<multi_polygon_type
, polygon_type
>("rt_d", rt_d
, join_miter
, end_flat
, 19.8823, 0.3);
499 test_one
<multi_polygon_type
, polygon_type
>("rt_e", rt_e
, join_miter
, end_flat
, 15.1198, 0.3);
500 test_one
<multi_polygon_type
, polygon_type
>("rt_f", rt_f
, join_miter
, end_flat
, 4.60853, 0.3);
501 test_one
<multi_polygon_type
, polygon_type
>("rt_g1", rt_g1
, join_miter
, end_flat
, 30.3137, 1.0);
502 test_one
<multi_polygon_type
, polygon_type
>("rt_g2", rt_g2
, join_miter
, end_flat
, 18.5711, 1.0);
504 test_one
<multi_polygon_type
, polygon_type
>("rt_h", rt_h
, join_round
, end_flat
, 47.6012, 1.0);
505 test_one
<multi_polygon_type
, polygon_type
>("rt_h", rt_h
, join_miter
, end_flat
, 61.7058, 1.0);
506 test_one
<multi_polygon_type
, polygon_type
>("rt_i", rt_i
, join_round
, end_flat
, 10.7528, 1.0);
507 test_one
<multi_polygon_type
, polygon_type
>("rt_i", rt_i
, join_miter
, end_flat
, 13.6569, 1.0);
508 test_one
<multi_polygon_type
, polygon_type
>("rt_j", rt_j
, join_round
, end_flat
, 28.7309, 1.0);
509 test_one
<multi_polygon_type
, polygon_type
>("rt_j", rt_j
, join_miter
, end_flat
, 35.1421, 1.0);
510 test_one
<multi_polygon_type
, polygon_type
>("rt_k", rt_k
, join_round
, end_flat
, 42.0092, 1.0);
511 test_one
<multi_polygon_type
, polygon_type
>("rt_k", rt_k
, join_miter
, end_flat
, 48.0563, 1.0);
513 test_one
<multi_polygon_type
, polygon_type
>("rt_l", rt_l
, join_miter
, end_flat
, 19.3995, 1.0);
515 test_one
<multi_polygon_type
, polygon_type
>("rt_m1", rt_m1
, join_round
, end_flat
, 14.1074, 1.0);
516 test_one
<multi_polygon_type
, polygon_type
>("rt_m1", rt_m1
, join_miter
, end_flat
, 19.4853, 1.0);
517 test_one
<multi_polygon_type
, polygon_type
>("rt_m2", rt_m2
, join_miter
, end_flat
, 21.4853, 1.0);
519 test_one
<multi_polygon_type
, polygon_type
>("rt_n", rt_n
, join_miter
, end_flat
, 18.4853, 1.0);
521 test_one
<multi_polygon_type
, polygon_type
>("rt_o1", rt_o1
, join_round
, end_flat
, 17.536, 1.0);
522 test_one
<multi_polygon_type
, polygon_type
>("rt_o1", rt_o1
, join_miter
, end_flat
, 20.9142, 1.0);
523 test_one
<multi_polygon_type
, polygon_type
>("rt_o2", rt_o2
, join_miter
, end_flat
, 25.7426, 1.0);
524 test_one
<multi_polygon_type
, polygon_type
>("rt_o3", rt_o3
, join_miter
, end_flat
, 28.8247, 1.0);
525 test_one
<multi_polygon_type
, polygon_type
>("rt_o4", rt_o4
, join_miter
, end_flat
, 34.6532, 1.0);
527 test_one
<multi_polygon_type
, polygon_type
>("rt_p1", rt_p1
, join_miter
, end_flat
, 24.8211, 1.0);
528 test_one
<multi_polygon_type
, polygon_type
>("rt_p2", rt_p2
, join_miter
, end_flat
, 21.4853, 1.0);
529 test_one
<multi_polygon_type
, polygon_type
>("rt_p3", rt_p3
, join_miter
, end_flat
, 22.3995, 1.0);
530 test_one
<multi_polygon_type
, polygon_type
>("rt_p4", rt_p4
, join_miter
, end_flat
, 33.0563, 1.0);
531 test_one
<multi_polygon_type
, polygon_type
>("rt_p5", rt_p5
, join_miter
, end_flat
, 17.0, 1.0);
532 test_one
<multi_polygon_type
, polygon_type
>("rt_p6", rt_p6
, join_miter
, end_flat
, 18.4853, 1.0);
533 test_one
<multi_polygon_type
, polygon_type
>("rt_p7", rt_p7
, join_miter
, end_flat
, 26.2279, 1.0);
534 test_one
<multi_polygon_type
, polygon_type
>("rt_p8", rt_p8
, join_miter
, end_flat
, 29.0563, 1.0);
535 test_one
<multi_polygon_type
, polygon_type
>("rt_p9", rt_p9
, join_miter
, end_flat
, 26.1421, 1.0);
536 test_one
<multi_polygon_type
, polygon_type
>("rt_p10", rt_p10
, join_miter
, end_flat
, 23.3995, 1.0);
538 test_one
<multi_polygon_type
, polygon_type
>("rt_p11", rt_p11
, join_miter
, end_flat
, 28.7426, 1.0);
539 test_one
<multi_polygon_type
, polygon_type
>("rt_p12", rt_p12
, join_miter
, end_flat
, 22.5711, 1.0);
540 test_one
<multi_polygon_type
, polygon_type
>("rt_p13", rt_p13
, join_miter
, end_flat
, 19.9142, 1.0);
541 test_one
<multi_polygon_type
, polygon_type
>("rt_p14", rt_p14
, join_miter
, end_flat
, 20.8284, 1.0);
542 test_one
<multi_polygon_type
, polygon_type
>("rt_p15", rt_p15
, join_miter
, end_flat
, 23.6569, 1.0);
543 test_one
<multi_polygon_type
, polygon_type
>("rt_p16", rt_p16
, join_miter
, end_flat
, 23.4853, 1.0);
545 test_one
<multi_polygon_type
, polygon_type
>("rt_p17", rt_p17
, join_miter
, end_flat
, 25.3137, 1.0);
546 test_one
<multi_polygon_type
, polygon_type
>("rt_p18", rt_p18
, join_miter
, end_flat
, 23.3137, 1.0);
547 test_one
<multi_polygon_type
, polygon_type
>("rt_p19", rt_p19
, join_miter
, end_flat
, 25.5637, 1.0);
548 test_one
<multi_polygon_type
, polygon_type
>("rt_p20", rt_p20
, join_miter
, end_flat
, 25.4853, 1.0);
549 test_one
<multi_polygon_type
, polygon_type
>("rt_p21", rt_p21
, join_miter
, end_flat
, 17.1716, 1.0);
550 test_one
<multi_polygon_type
, polygon_type
>("rt_p22", rt_p22
, join_miter
, end_flat
, 26.5711, 1.0);
552 test_one
<multi_polygon_type
, polygon_type
>("rt_q1", rt_q1
, join_miter
, end_flat
, 27, 1.0);
553 test_one
<multi_polygon_type
, polygon_type
>("rt_q2", rt_q2
, join_miter
, end_flat
, 26.4853, 1.0);
554 test_one
<multi_polygon_type
, polygon_type
>("rt_q2", rt_q2
, join_miter
, end_flat
, 0.9697, -0.25);
556 test_one
<multi_polygon_type
, polygon_type
>("rt_r", rt_r
, join_miter
, end_flat
, 21.0761, 1.0);
557 test_one
<multi_polygon_type
, polygon_type
>("rt_s1", rt_s1
, join_miter
, end_flat
, 20.4853, 1.0);
559 test_one
<multi_polygon_type
, polygon_type
>("rt_s2", rt_s2
, join_miter
, end_flat
, 24.6495, 1.0);
561 test_one
<multi_polygon_type
, polygon_type
>("rt_t1", rt_t
, join_miter
, end_flat
, 15.6569, 1.0);
562 test_one
<multi_polygon_type
, polygon_type
>("rt_t2", rt_t
, join_miter
, end_flat
, 0.1679, -0.25);
564 test_one
<multi_polygon_type
, polygon_type
>("rt_u1", rt_u1
, join_round
, end_flat
, 33.2032, 1.0);
565 test_one
<multi_polygon_type
, polygon_type
>("rt_u1_rough", rt_u1
, join_round32
, end_flat
, 33.1470, 1.0);
566 test_one
<multi_polygon_type
, polygon_type
>("rt_u2", rt_u2
, join_round
, end_flat
, 138.8001, 1.0);
567 test_one
<multi_polygon_type
, polygon_type
>("rt_u3", rt_u3
, join_round
, end_flat
, 133.4526, 1.0);
568 test_one
<multi_polygon_type
, polygon_type
>("rt_u4", rt_u4
, join_round
, end_flat
, 126.9268, 1.0);
569 test_one
<multi_polygon_type
, polygon_type
>("rt_u5", rt_u5
, join_round
, end_flat
, 78.4906, 1.0);
570 test_one
<multi_polygon_type
, polygon_type
>("rt_u6", rt_u6
, join_round
, end_flat
, 115.4461, 1.0);
572 test_one
<multi_polygon_type
, polygon_type
>("rt_u7", rt_u7
, join_miter
, end_flat
, 42.6421, 1.0);
573 test_one
<multi_polygon_type
, polygon_type
>("rt_u7", rt_u7
, join_round
, end_flat
, 35.6233, 1.0);
574 test_one
<multi_polygon_type
, polygon_type
>("rt_u7_rough", rt_u7
, join_round_rough
, end_flat
, {35.1675, 35.2290}, 1.0);
576 test_one
<multi_polygon_type
, polygon_type
>("rt_u8", rt_u8
, join_miter
, end_flat
, 70.9142, 1.0);
577 test_one
<multi_polygon_type
, polygon_type
>("rt_u9", rt_u9
, join_miter
, end_flat
, 59.3063, 1.0);
578 test_one
<multi_polygon_type
, polygon_type
>("rt_u10", rt_u10
, join_miter
, end_flat
, 144.0858, 1.0);
579 test_one
<multi_polygon_type
, polygon_type
>("rt_u10_51", rt_u10
, join_miter
, end_flat
, 0.16738, -0.51);
580 test_one
<multi_polygon_type
, polygon_type
>("rt_u10_c_51", rt_u10_c
, join_miter
, end_flat
, 0.066952, -0.51);
582 // TODO: invalid - making a bow-tie
583 test_one
<multi_polygon_type
, polygon_type
>("rt_u10_50", rt_u10
, join_miter
, end_flat
, 0.214466, -0.50, ut_settings::ignore_validity());
584 test_one
<multi_polygon_type
, polygon_type
>("rt_u10_45", rt_u10
, join_miter
, end_flat
, 1.3000, -0.45);
585 test_one
<multi_polygon_type
, polygon_type
>("rt_u10_25", rt_u10
, join_miter
, end_flat
, 9.6682, -0.25);
587 test_one
<multi_polygon_type
, polygon_type
>("rt_u11", rt_u11
, join_miter
, end_flat
, 131.3995, 1.0);
588 test_one
<multi_polygon_type
, polygon_type
>("rt_u11_50", rt_u11
, join_miter
, end_flat
, 0.04289, -0.50);
589 test_one
<multi_polygon_type
, polygon_type
>("rt_u11_25", rt_u11
, join_miter
, end_flat
, 10.1449, -0.25);
591 test_one
<multi_polygon_type
, polygon_type
>("rt_u12", rt_u12
, join_miter
, end_flat
, 142.1348, 1.0);
592 #if ! defined(BOOST_GEOMETRY_USE_RESCALING) || defined(BOOST_GEOMETRY_TEST_FAILURES)
593 // Fails if rescaling is used in combination with get_clusters
594 test_one
<multi_polygon_type
, polygon_type
>("rt_u13", rt_u13
, join_miter
, end_flat
, 115.4853, 1.0);
597 test_one
<multi_polygon_type
, polygon_type
>("rt_v1", rt_v1
, join_round32
, end_flat
, 26.9994, 1.0);
598 test_one
<multi_polygon_type
, polygon_type
>("rt_v2", rt_v2
, join_round32
, end_flat
, 47.3510, 1.0);
599 test_one
<multi_polygon_type
, polygon_type
>("rt_v3", rt_v3
, join_round32
, end_flat
, 22.9158, 1.0);
600 test_one
<multi_polygon_type
, polygon_type
>("rt_v4", rt_v4
, join_round32
, end_flat
, 23.4146, 1.0);
602 test_one
<multi_polygon_type
, polygon_type
>("nores_mt_1", nores_mt_1
, join_round32
, end_flat
, 13.4113, 1.0);
603 test_one
<multi_polygon_type
, polygon_type
>("nores_mt_2", nores_mt_2
, join_round32
, end_flat
, 17.5265, 1.0);
604 test_one
<multi_polygon_type
, polygon_type
>("nores_mt_3", nores_mt_3
, join_round32
, end_flat
, 25.6091, 1.0);
605 test_one
<multi_polygon_type
, polygon_type
>("nores_mt_4", nores_mt_4
, join_round32
, end_flat
, 26.0946, 1.0);
606 test_one
<multi_polygon_type
, polygon_type
>("nores_mt_5", nores_mt_5
, join_round32
, end_flat
, 26.4375, 1.0);
607 test_one
<multi_polygon_type
, polygon_type
>("nores_mt_6", nores_mt_6
, join_round32
, end_flat
, 16.9018, 1.0);
609 test_one
<multi_polygon_type
, polygon_type
>("nores_et_1", nores_et_1
, join_round32
, end_flat
, 18.9866, 1.0);
610 test_one
<multi_polygon_type
, polygon_type
>("nores_et_2", nores_et_2
, join_round32
, end_flat
, 23.8389, 1.0);
611 test_one
<multi_polygon_type
, polygon_type
>("nores_et_3", nores_et_3
, join_round32
, end_flat
, 26.9030, 1.0);
612 test_one
<multi_polygon_type
, polygon_type
>("nores_et_4", nores_et_4
, join_round32
, end_flat
, 19.9626, 1.0);
613 test_one
<multi_polygon_type
, polygon_type
>("nores_et_5", nores_et_5
, join_round32
, end_flat
, 19.9615, 1.0);
614 test_one
<multi_polygon_type
, polygon_type
>("nores_et_6", nores_et_6
, join_round32
, end_flat
, 96.1795, 1.0);
615 test_one
<multi_polygon_type
, polygon_type
>("nores_et_7", nores_et_7
, join_round32
, end_flat
, 105.9577, 1.0);
617 test_one
<multi_polygon_type
, polygon_type
>("nores_wn_1", nores_wn_1
, join_round32
, end_flat
, 23.7659, 1.0);
618 test_one
<multi_polygon_type
, polygon_type
>("nores_wn_2", nores_wn_2
, join_round32
, end_flat
, {18.2669, 18.2691}, 1.0);
620 test_one
<multi_polygon_type
, polygon_type
>("nores_wt_1", nores_wt_1
, join_round32
, end_flat
, 80.1609, 1.0);
621 test_one
<multi_polygon_type
, polygon_type
>("nores_wt_2", nores_wt_2
, join_round32
, end_flat
, 22.1102, 1.0);
622 test_one
<multi_polygon_type
, polygon_type
>("nores_b8e6", nores_b8e6
, join_round32
, end_flat
, 19.8528, 1.0);
624 test_one
<multi_polygon_type
, polygon_type
>("nores_2881", nores_2881
, join_round32
, end_flat
, 16.5510, 1.0);
625 test_one
<multi_polygon_type
, polygon_type
>("nores_6061", nores_6061
, join_round32
, end_flat
, 39.7371, 1.0);
626 test_one
<multi_polygon_type
, polygon_type
>("nores_37f6", nores_37f6
, join_round32
, end_flat
, 26.5339, 1.0);
628 test_one
<multi_polygon_type
, polygon_type
>("nores_1ea1", nores_1ea1
, join_round32
, end_flat
, 28.9755, 1.0);
629 test_one
<multi_polygon_type
, polygon_type
>("nores_804e", nores_804e
, join_round32
, end_flat
, 26.4503, 1.0);
630 test_one
<multi_polygon_type
, polygon_type
>("nores_51c6", nores_51c6
, join_round32
, end_flat
, 20.2419, 1.0);
631 test_one
<multi_polygon_type
, polygon_type
>("nores_e5f3", nores_e5f3
, join_round32
, end_flat
, 14.5503, 1.0);
633 test_one
<multi_polygon_type
, polygon_type
>("nores_3af0", nores_3af0
, join_round32
, end_flat
, {22.0991, 22.1008}, 1.0);
634 test_one
<multi_polygon_type
, polygon_type
>("nores_2881b", nores_2881b
, join_round32
, end_flat
, 24.6731, 1.0);
635 test_one
<multi_polygon_type
, polygon_type
>("nores_5318", nores_5318
, join_round32
, end_flat
, 22.7311, 1.0);
636 test_one
<multi_polygon_type
, polygon_type
>("nores_495d", nores_495d
, join_round32
, end_flat
, 23.4376, 1.0);
637 test_one
<multi_polygon_type
, polygon_type
>("nores_e402", nores_e402
, join_round32
, end_flat
, {9.9888, 9.9898}, 1.0);
639 #if ! defined(BOOST_GEOMETRY_USE_RESCALING) || defined(BOOST_GEOMETRY_TEST_FAILURES)
640 // Erroneous cases with rescaling (out of 8)
641 test_one
<multi_polygon_type
, polygon_type
>("res_ebc4", res_ebc4
, join_round32
, end_flat
, 43.8877, 1.0);
642 test_one
<multi_polygon_type
, polygon_type
>("res_8618", res_8618
, join_round32
, end_flat
, 48.1085, 1.0);
643 test_one
<multi_polygon_type
, polygon_type
>("res_3b4d", res_3b4d
, join_round32
, end_flat
, 48.4739, 1.0);
646 test_one
<multi_polygon_type
, polygon_type
>("neighbouring_small",
648 join_round32
, end_round32
, 128.0, -1.0);
649 test_one
<multi_polygon_type
, polygon_type
>("neighbouring_with_holes_small",
650 neighbouring_with_holes
,
651 join_round32
, end_round32
, 97.757, -1.0);
652 test_one
<multi_polygon_type
, polygon_type
>("neighbouring_large",
654 join_round32
, end_round32
, 0.0, -10.0);
655 test_one
<multi_polygon_type
, polygon_type
>("neighbouring_with_holes_large",
656 neighbouring_with_holes
,
657 join_round32
, end_round32
, 0.0, -10.0);
659 // Check cases with extreme coordinates on assertions
660 if (BOOST_GEOMETRY_CONDITION((std::is_same
<coor_type
, double>::value
)))
662 test_one
<multi_polygon_type
, polygon_type
>("mysql_report_2015_07_05_1",
663 mysql_report_2015_07_05_1
,
664 join_round32
, end_round32
, ut_settings::ignore_area(), 5526.0,
665 ut_settings::assertions_only());
667 test_one
<multi_polygon_type
, polygon_type
>("mysql_report_2015_07_05_2",
668 mysql_report_2015_07_05_2
,
669 join_round32
, end_round32
, ut_settings::ignore_area(), 948189399.0,
670 ut_settings::assertions_only());
674 int test_main(int, char* [])
676 BoostGeometryWriteTestConfiguration();
678 test_all
<true, bg::model::point
<default_test_type
, 2, bg::cs::cartesian
> >();
680 #if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_ORDER)
681 test_all
<false, bg::model::point
<default_test_type
, 2, bg::cs::cartesian
> >();
684 #if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
685 test_all
<true, bg::model::point
<mp_test_type
, 2, bg::cs::cartesian
> >();
688 #if defined(BOOST_GEOMETRY_TEST_FAILURES)
689 BoostGeometryWriteExpectedFailures(3, 1, 3, 3);