1 // Boost.Geometry (aka GGL, Generic Geometry Library)
4 // Copyright (c) 2007-2016 Barend Gehrels, Amsterdam, the Netherlands.
5 // Copyright (c) 2008-2016 Bruno Lalande, Paris, France.
6 // Copyright (c) 2009-2016 Mateusz Loskot, London, UK.
8 // This file was modified by Oracle on 2016,2017.
9 // Modifications copyright (c) 2016-2017, Oracle and/or its affiliates.
10 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
12 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
13 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
15 // Use, modification and distribution is subject to the Boost Software License,
16 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
17 // http://www.boost.org/LICENSE_1_0.txt)
22 #include "test_union.hpp"
23 #include <algorithms/test_overlay.hpp>
25 #include <algorithms/overlay/overlay_cases.hpp>
26 #include <boost/geometry/geometries/point_xy.hpp>
29 #define TEST_UNION(caseid, clips, holes, points, area) \
30 (test_one<Polygon, Polygon, Polygon>) \
31 ( #caseid, caseid[0], caseid[1], clips, holes, points, area)
33 #define TEST_UNION_WITH(caseid, clips, holes, points, area) \
34 (test_one<Polygon, Polygon, Polygon>) \
35 ( #caseid, caseid[0], caseid[1], clips, holes, points, area, settings)
37 #define TEST_UNION_REV(caseid, clips, holes, points, area) \
38 (test_one<Polygon, Polygon, Polygon>) \
39 ( #caseid "_rev", caseid[1], caseid[0], clips, holes, points, area)
42 template <typename Ring
, typename Polygon
>
45 typedef typename
bg::coordinate_type
<Polygon
>::type ct
;
47 ut_settings ignore_validity_for_float
;
48 if (BOOST_GEOMETRY_CONDITION((boost::is_same
<ct
, float>::value
)) )
50 ignore_validity_for_float
.set_test_validity(false);
53 test_one
<Polygon
, Polygon
, Polygon
>("simplex_normal",
54 simplex_normal
[0], simplex_normal
[1],
57 test_one
<Polygon
, Polygon
, Polygon
>("simplex_with_empty_1",
58 simplex_normal
[0], polygon_empty
,
60 test_one
<Polygon
, Polygon
, Polygon
>("simplex_with_empty_2",
61 polygon_empty
, simplex_normal
[0],
64 test_one
<Polygon
, Polygon
, Polygon
>("star_ring", example_star
, example_ring
,
65 1, 0, 23, 5.67017141);
67 // This sample was selected because of the border case.
68 test_one
<Polygon
, Polygon
, Polygon
>("star_poly", example_star
, example_polygon
,
71 // Pseudo-box as Polygon
72 // (note, internally, the intersection points is different, so yes,
73 // it has to be tested)
74 test_one
<Polygon
, Polygon
, Polygon
>("box_poly3", "POLYGON((1.5 1.5 , 1.5 2.5 , 4.5 2.5 , 4.5 1.5 , 1.5 1.5))",
75 "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
78 test_one
<Polygon
, Polygon
, Polygon
>("first_within_second",
79 first_within_second
[0], first_within_second
[1],
82 test_one
<Polygon
, Polygon
, Polygon
>("second_within_first",
83 first_within_second
[1], first_within_second
[0],
86 test_one
<Polygon
, Polygon
, Polygon
>("first_within_hole_of_second",
87 first_within_hole_of_second
[0], first_within_hole_of_second
[1],
90 test_one
<Polygon
, Polygon
, Polygon
>("new_hole",
91 new_hole
[0], new_hole
[1],
94 test_one
<Polygon
, Polygon
, Polygon
>("side_side",
95 side_side
[0], side_side
[1], 1, 0, 7, 2.0);
97 test_one
<Polygon
, Polygon
, Polygon
>("identical",
98 identical
[0], identical
[1], 1, 0, 5, 1.0);
100 test_one
<Polygon
, Polygon
, Polygon
>("disjoint",
101 disjoint
[0], disjoint
[1], 2, 0, 10, 2.0);
103 test_one
<Polygon
, Polygon
, Polygon
>("intersect_holes_intersect",
104 intersect_holes_intersect
[0], intersect_holes_intersect
[1],
107 test_one
<Polygon
, Polygon
, Polygon
>("intersect_holes_intersect_and_disjoint",
108 intersect_holes_intersect_and_disjoint
[0], intersect_holes_intersect_and_disjoint
[1],
111 test_one
<Polygon
, Polygon
, Polygon
>("intersect_holes_intersect_and_touch",
112 intersect_holes_intersect_and_touch
[0], intersect_holes_intersect_and_touch
[1],
115 test_one
<Polygon
, Polygon
, Polygon
>("intersect_holes_new_ring",
116 intersect_holes_new_ring
[0], intersect_holes_new_ring
[1],
119 test_one
<Polygon
, Polygon
, Polygon
>("intersect_holes_disjoint",
120 intersect_holes_disjoint
[0],
121 intersect_holes_disjoint
[1],
124 test_one
<Polygon
, Polygon
, Polygon
>("within_holes_disjoint",
125 within_holes_disjoint
[0], within_holes_disjoint
[1],
128 test_one
<Polygon
, Polygon
, Polygon
>("winded",
129 winded
[0], winded
[1],
132 test_one
<Polygon
, Polygon
, Polygon
>("two_bends",
133 two_bends
[0], two_bends
[1],
136 test_one
<Polygon
, Polygon
, Polygon
>("star_comb_15",
137 star_comb_15
[0], star_comb_15
[1],
138 1, 27, 204, 898.09693338);
140 test_one
<Polygon
, Polygon
, Polygon
>("equal_holes_disjoint",
141 equal_holes_disjoint
[0], equal_holes_disjoint
[1],
142 1, 1, 10, 81 - 3 * 7);
144 test_one
<Polygon
, Polygon
, Polygon
>("only_hole_intersections1",
145 only_hole_intersections
[0], only_hole_intersections
[1],
146 1, 2, 13, 190.9090909);
147 test_one
<Polygon
, Polygon
, Polygon
>("only_hole_intersections2",
148 only_hole_intersections
[0], only_hole_intersections
[2],
149 1, 2, 13, 190.9090909);
151 test_one
<Polygon
, Polygon
, Polygon
>("intersect_exterior_and_interiors_winded",
152 intersect_exterior_and_interiors_winded
[0], intersect_exterior_and_interiors_winded
[1],
153 1, 1, 26, 66.5333333);
155 test_one
<Polygon
, Polygon
, Polygon
>("crossed",
156 crossed
[0], crossed
[1],
157 1, 3, 17, 23.5); // Area from SQL Server - was somehow wrong before
159 test_one
<Polygon
, Polygon
, Polygon
>("fitting",
160 fitting
[0], fitting
[1],
163 test_one
<Polygon
, Polygon
, Polygon
>("distance_zero",
164 distance_zero
[0], distance_zero
[1],
165 1, 0, -1, 9.0098387);
167 test_one
<Polygon
, Polygon
, Polygon
>("wrapped_a",
168 wrapped
[0], wrapped
[1],
170 test_one
<Polygon
, Polygon
, Polygon
>("wrapped_b",
171 wrapped
[0], wrapped
[2],
174 test_one
<Polygon
, Polygon
, Polygon
>("9",
175 case_9
[0], case_9
[1], 2, 0, 8, 11);
176 test_one
<Polygon
, Polygon
, Polygon
>("22",
177 case_22
[0], case_22
[1], 2, 0, 8, 9.5);
178 test_one
<Polygon
, Polygon
, Polygon
>("25",
179 case_25
[0], case_25
[1], 2, 0, 8, 7);
180 test_one
<Polygon
, Polygon
, Polygon
>("26",
181 case_26
[0], case_26
[1], 2, 0, 9, 7.5);
182 test_one
<Polygon
, Polygon
, Polygon
>("31",
183 case_31
[0], case_31
[1], 2, 0, 8, 4.5);
184 test_one
<Polygon
, Polygon
, Polygon
>("32",
185 case_32
[0], case_32
[1], 2, 0, 8, 4.5);
186 test_one
<Polygon
, Polygon
, Polygon
>("33",
187 case_33
[0], case_33
[1], 2, 0, 8, 4.5);
188 test_one
<Polygon
, Polygon
, Polygon
>("36",
189 case_36
[0], case_36
[1], 1, 1, 10, 14.375);
190 test_one
<Polygon
, Polygon
, Polygon
>("40",
191 case_40
[0], case_40
[1], 2, 0, 18, 11);
193 // Test rings which should be generated by assemble
194 test_one
<Polygon
, Polygon
, Polygon
>("53_iet",
195 case_53
[0], case_53
[2], 1, 1, 16, 16);
196 test_one
<Polygon
, Polygon
, Polygon
>("58_iet",
197 case_58
[0], case_58
[2], 1, 3, 20, 12.16666);
199 test_one
<Polygon
, Polygon
, Polygon
>("59_iet",
200 case_59
[0], case_59
[2], 1, 1, 14, 17.20833);
202 test_one
<Polygon
, Polygon
, Polygon
>("80",
203 case_80
[0], case_80
[1], 2, 2, 18, 129.0);
205 test_one
<Polygon
, Polygon
, Polygon
>("81",
206 case_81
[0], case_81
[1], 1, 2, 15, 163.5);
208 test_one
<Polygon
, Polygon
, Polygon
>("82",
209 case_82
[0], case_82
[1], 1, 1, 21, 19.75);
211 test_one
<Polygon
, Polygon
, Polygon
>("83",
212 case_83
[0], case_83
[1], 1, 0, 7, 20.0);
214 test_one
<Polygon
, Polygon
, Polygon
>("90",
215 case_90
[0], case_90
[1], 1, 2, 17, 221.3688);
217 test_one
<Polygon
, Polygon
, Polygon
>("91",
218 case_91
[0], case_91
[1], 1, 1, 9, 147.5);
220 test_one
<Polygon
, Polygon
, Polygon
>("92",
221 case_92
[0], case_92
[1], 2, 0, 9, 175.0);
223 test_one
<Polygon
, Polygon
, Polygon
>("93",
224 case_93
[0], case_93
[1], 1, 2, 12, 172.9167);
226 test_one
<Polygon
, Polygon
, Polygon
>("94",
227 case_94
[0], case_94
[1], 2, 0, 12, 170.0);
229 // Has two separate but touching interior rings
230 test_one
<Polygon
, Polygon
, Polygon
>("95",
231 case_95
[0], case_95
[1], 1, 2, 15, 1320.0);
233 test_one
<Polygon
, Polygon
, Polygon
>("96",
234 case_96
[0], case_96
[1], 1, 1, 10, 1500.0);
236 test_one
<Polygon
, Polygon
, Polygon
>("97",
237 case_97
[0], case_97
[1], 1, 0, 10, 286.799);
239 test_one
<Polygon
, Polygon
, Polygon
>("98",
240 case_98
[0], case_98
[1], 1, 1, 14, 653.067);
242 test_one
<Polygon
, Polygon
, Polygon
>("99",
243 case_99
[0], case_99
[1], 1, 0, 5, 1600.0);
245 test_one
<Polygon
, Polygon
, Polygon
>("100",
246 case_100
[0], case_100
[1], 1, 1, 13, 19.125);
248 test_one
<Polygon
, Polygon
, Polygon
>("101",
249 case_101
[0], case_101
[1], 1, 0, 9, 21.0);
251 test_one
<Polygon
, Polygon
, Polygon
>("102",
252 case_102
[0], case_102
[1], 1, 1, 17, 8.75);
254 test_one
<Polygon
, Polygon
, Polygon
>("103",
255 case_103
[0], case_103
[1],
257 test_one
<Polygon
, Polygon
, Polygon
>("104",
258 case_104
[0], case_104
[1],
261 test_one
<Polygon
, Polygon
, Polygon
>("105",
262 case_105
[0], case_105
[1], 1, 0, 5, 100);
264 test_one
<Polygon
, Polygon
, Polygon
>("108",
265 case_108
[0], case_108
[1], 1, 0, 13, 5.0);
267 TEST_UNION(case_precision_1
, 1, 0, -1, 22.0);
268 TEST_UNION(case_precision_2
, 1, 0, -1, 22.0);
269 TEST_UNION(case_precision_3
, 1, 0, -1, 22.0);
270 TEST_UNION(case_precision_4
, 1, 0, -1, 22.0);
271 TEST_UNION(case_precision_5
, 1, 0, -1, 22.0);
272 TEST_UNION(case_precision_6
, 1, 0, -1, 71.0);
273 TEST_UNION(case_precision_7
, 1, 0, -1, 22.0);
274 TEST_UNION(case_precision_8
, 1, 1, -1, 73.0);
275 TEST_UNION(case_precision_9
, 1, 1, -1, 73.0);
276 TEST_UNION(case_precision_10
, 1, 1, -1, 73.0);
277 TEST_UNION(case_precision_11
, 1, 1, -1, 73.0);
278 TEST_UNION(case_precision_12
, 1, 0, -1, 14.0);
279 TEST_UNION(case_precision_13
, 1, 0, -1, 14.0);
280 TEST_UNION(case_precision_14
, 1, 0, -1, 22.0);
281 TEST_UNION(case_precision_15
, 1, 1, -1, 73.0);
282 TEST_UNION(case_precision_16
, 1, 1, -1, 73.0);
283 TEST_UNION(case_precision_17
, 1, 1, -1, 73.0);
284 TEST_UNION(case_precision_18
, 1, 1, -1, 73.0);
285 TEST_UNION(case_precision_19
, 1, 1, -1, 73.0);
286 TEST_UNION(case_precision_20
, 1, 0, -1, 22.0);
287 TEST_UNION(case_precision_21
, 1, 0, -1, 22.0);
288 TEST_UNION(case_precision_22
, 1, 1, -1, 73.0);
289 TEST_UNION(case_precision_23
, 1, 1, -1, 73.0);
290 TEST_UNION(case_precision_24
, 1, 0, -1, 22.0);
291 TEST_UNION(case_precision_25
, 1, 0, -1, 22.0);
292 TEST_UNION(case_precision_26
, 1, 1, -1, 73.0);
294 TEST_UNION_REV(case_precision_1
, 1, 0, -1, 22.0);
295 TEST_UNION_REV(case_precision_2
, 1, 0, -1, 22.0);
296 TEST_UNION_REV(case_precision_3
, 1, 0, -1, 22.0);
297 TEST_UNION_REV(case_precision_4
, 1, 0, -1, 22.0);
298 TEST_UNION_REV(case_precision_5
, 1, 0, -1, 22.0);
299 TEST_UNION_REV(case_precision_6
, 1, 0, -1, 71.0);
300 TEST_UNION_REV(case_precision_7
, 1, 0, -1, 22.0);
301 TEST_UNION_REV(case_precision_8
, 1, 1, -1, 73.0);
302 TEST_UNION_REV(case_precision_9
, 1, 1, -1, 73.0);
303 TEST_UNION_REV(case_precision_10
, 1, 1, -1, 73.0);
304 TEST_UNION_REV(case_precision_11
, 1, 1, -1, 73.0);
305 TEST_UNION_REV(case_precision_12
, 1, 0, -1, 14.0);
306 TEST_UNION_REV(case_precision_13
, 1, 0, -1, 14.0);
307 TEST_UNION_REV(case_precision_14
, 1, 0, -1, 22.0);
308 TEST_UNION_REV(case_precision_15
, 1, 1, -1, 73.0);
309 TEST_UNION_REV(case_precision_16
, 1, 1, -1, 73.0);
310 TEST_UNION_REV(case_precision_17
, 1, 1, -1, 73.0);
311 TEST_UNION_REV(case_precision_18
, 1, 1, -1, 73.0);
312 TEST_UNION_REV(case_precision_19
, 1, 1, -1, 73.0);
313 TEST_UNION_REV(case_precision_20
, 1, 0, -1, 22.0);
314 TEST_UNION_REV(case_precision_21
, 1, 0, -1, 22.0);
315 TEST_UNION_REV(case_precision_22
, 1, 1, -1, 73.0);
316 TEST_UNION_REV(case_precision_23
, 1, 1, -1, 73.0);
317 TEST_UNION_REV(case_precision_24
, 1, 0, -1, 22.0);
318 TEST_UNION_REV(case_precision_25
, 1, 0, -1, 22.0);
319 TEST_UNION_REV(case_precision_26
, 1, 1, -1, 73.0);
322 test_one<Polygon, Polygon, Polygon>(102,
323 simplex_normal[0], simplex_reversed[1],
326 test_one<Polygon, Polygon, Polygon>(103,
327 simplex_reversed[0], simplex_normal[1],
330 test_one<Polygon, Polygon, Polygon>(104,
331 simplex_reversed[0], simplex_reversed[1],
334 test_one<Polygon, Polygon, Polygon>(100,
339 // test some other input/output types
342 test_one
<Polygon
, Polygon
, Ring
>("identical_pr", identical
[0], identical
[1], 1, 0, 5, 1.0);
343 test_one
<Polygon
, Ring
, Polygon
>("identical_rp", identical
[0], identical
[1], 1, 0, 5, 1.0);
346 test_one
<Polygon
, Ring
, Ring
>("identical_rr", identical
[0], identical
[1], 1, 0, 5, 1.0);
348 // output is also Ring
349 test_one
<Ring
, Ring
, Ring
>("identical_rrr", identical
[0], identical
[1], 1, 0, 5, 1.0);
351 // "new hole", tested with Ring -> the newly formed hole will be omitted
352 test_one
<Ring
, Ring
, Ring
>("new_hole_discarded", new_hole
[0], new_hole
[1], 1, 0, 9, 24.0);
354 test_one
<Polygon
, Polygon
, Polygon
>("ggl_list_20110306_javier",
355 ggl_list_20110306_javier
[0], ggl_list_20110306_javier
[1],
356 1, 1, 16, 80456.4904910401);
358 test_one
<Polygon
, Polygon
, Polygon
>("ggl_list_20110307_javier",
359 ggl_list_20110307_javier
[0], ggl_list_20110307_javier
[1],
362 test_one
<Polygon
, Polygon
, Polygon
>("ggl_list_20110627_phillip",
363 ggl_list_20110627_phillip
[0], ggl_list_20110627_phillip
[1],
364 1, 0, 8, 14729.07145);
366 test_one
<Polygon
, Polygon
, Polygon
>("ggl_list_20110716_enrico",
367 ggl_list_20110716_enrico
[0], ggl_list_20110716_enrico
[1],
368 1, 1, 15, 129904.197692871);
370 #if defined(BOOST_GEOMETRY_USE_RESCALING) || defined(BOOST_GEOMETRY_TEST_FAILURES)
371 // Either 1 or 2, depending if the intersection/turn point (eps.region) is missed
372 TEST_UNION(ggl_list_20110820_christophe
, count_set(1, 2), 0, -1, 67.3550722317627);
376 // SQL Server gives: 313.360374193241
377 // PostGIS gives: 313.360364623393
378 // Without rescaling, it is creates an invalidity for double
379 ut_settings settings
;
380 settings
.set_test_validity(BG_IF_RESCALED(true, false));
381 TEST_UNION_WITH(isovist
, 1, 0, -1, 313.36036462);
384 TEST_UNION(ggl_list_20190307_matthieu_1
, 1, 1, -1, 0.83773);
385 TEST_UNION(ggl_list_20190307_matthieu_2
, 1, 0, -1, 16.0);
387 // Ticket 5103 https://svn.boost.org/trac/boost/ticket/5103
388 // This ticket was actually reported for Boost.Polygon
389 // We check it for Boost.Geometry as well.
390 // SQL Server gives: 2515271331437.69
391 // PostGIS gives: 2515271327070.52
392 // Boost.Geometry gives: 2515271327070.5237746891 (ttmath)
393 // 2515271327070.5156 (double)
394 // 2515271320603.0000 (int)
395 // Note the int-test was tested outside of this unit test.
396 // It is in two points 0.37 off (logical for an int).
397 // Because of the width of the polygon (400000 meter)
398 // this causes a substantial difference.
399 TEST_UNION(ticket_5103
, 1, 0, 25, 2515271327070.5);
401 TEST_UNION(ticket_8310a
, 1, 0, -1, 10.5000019595);
402 TEST_UNION(ticket_8310b
, 1, 0, -1, 10.5000019595);
403 TEST_UNION(ticket_8310c
, 1, 0, -1, 10.5000019595);
404 TEST_UNION_REV(ticket_8310a
, 1, 0, -1, 10.5000019595);
405 TEST_UNION_REV(ticket_8310b
, 1, 0, -1, 10.5000019595);
406 TEST_UNION_REV(ticket_8310c
, 1, 0, -1, 10.5000019595);
408 TEST_UNION(ticket_9081_15
, 1, 0, -1, 0.0403425433);
410 TEST_UNION(ticket_9563
, 1, 0, -1, 150.0);
412 TEST_UNION(ticket_9756
, 1, 0, 10, expectation_limits(1289.0835, 1290.40625));
414 // Can generate one polygon, or two splitted, both is OK
415 TEST_UNION(ticket_10108_a
, count_set(1, 2), 0, 8, 0.0435229);
416 TEST_UNION(ticket_10108_b
, count_set(1, 2), 0, 10, 2424.3449);
418 TEST_UNION(ticket_10866
, 1, 0, 14, 332760303.5);
420 TEST_UNION(ticket_11725
, 1, 1, 10, 7.5);
422 #if ! defined(BOOST_GEOMETRY_USE_RESCALING) || defined(BOOST_GEOMETRY_TEST_FAILURES)
423 // With rescaling an extra overlapping polygon is generated, which is wrong
424 TEST_UNION(issue_548
, 1, 0, -1, 617382720000);
427 TEST_UNION(issue_566_a
, 1, 0, -1, 214.3728);
428 TEST_UNION(issue_566_b
, 1, 0, -1, 214.3728);
429 TEST_UNION_REV(issue_566_a
, 1, 0, -1, 214.3728);
430 TEST_UNION_REV(issue_566_b
, 1, 0, -1, 214.3728);
433 // Rescaling produces an invalid result
434 ut_settings settings
;
435 settings
.set_test_validity(BG_IF_RESCALED(false, true));
436 TEST_UNION_WITH(geos_1
, 1, 0, -1, expectation_limits(3458.0, 3461.3203125));
438 TEST_UNION(geos_2
, 1, 0, -1, expectation_limits(349.0625, 350.55102539));
439 TEST_UNION(geos_3
, 1, 0, -1, 29391548.4998779);
440 TEST_UNION(geos_4
, 1, 0, -1, 2304.4163115);
442 // Robustness issues, followed out buffer-robustness-tests, test them also reverse
444 // Area can vary depending on joining point of nearly parallel lines
445 ut_settings settings
;
446 settings
.percentage
= 0.01;
447 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_a", buffer_rt_a
[0], buffer_rt_a
[1],
448 1, 0, -1, 19.28, settings
);
449 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_a_rev", buffer_rt_a
[1], buffer_rt_a
[0],
450 1, 0, -1, 19.28, settings
);
452 #if ! defined(BOOST_GEOMETRY_EXCLUDE)
453 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_f", buffer_rt_f
[0], buffer_rt_f
[1],
455 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_f_rev", buffer_rt_f
[1], buffer_rt_f
[0],
458 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_g", buffer_rt_g
[0], buffer_rt_g
[1],
460 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_g_rev", buffer_rt_g
[1], buffer_rt_g
[0],
462 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_i", buffer_rt_i
[0], buffer_rt_i
[1],
464 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_i_rev", buffer_rt_i
[1], buffer_rt_i
[0],
466 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_j", buffer_rt_j
[0], buffer_rt_j
[1],
468 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_j_rev", buffer_rt_j
[1], buffer_rt_j
[0],
471 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_l", buffer_rt_l
[0], buffer_rt_l
[1],
473 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_l_rev", buffer_rt_l
[1], buffer_rt_l
[0],
476 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_m1", buffer_rt_m1
[0], buffer_rt_m1
[1],
478 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_m1_rev", buffer_rt_m1
[1], buffer_rt_m1
[0],
481 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_m2", buffer_rt_m2
[0], buffer_rt_m2
[1],
483 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_m2_rev", buffer_rt_m2
[1], buffer_rt_m2
[0],
486 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_q", buffer_rt_q
[0], buffer_rt_q
[1],
488 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_q_rev", buffer_rt_q
[1], buffer_rt_q
[0],
490 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_r", buffer_rt_r
[0], buffer_rt_r
[1],
492 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_r_rev", buffer_rt_r
[1], buffer_rt_r
[0],
494 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_t", buffer_rt_t
[0], buffer_rt_t
[1],
496 test_one
<Polygon
, Polygon
, Polygon
>("buffer_rt_t_rev", buffer_rt_t
[1], buffer_rt_t
[0],
497 1, 0, -1, 15.6569, ignore_validity_for_float
);
499 test_one
<Polygon
, Polygon
, Polygon
>("buffer_mp1", buffer_mp1
[0], buffer_mp1
[1],
502 test_one
<Polygon
, Polygon
, Polygon
>("buffer_mp2", buffer_mp2
[0], buffer_mp2
[1],
503 1, -1, 217, 36.752837);
505 test_one
<Polygon
, Polygon
, Polygon
>("mysql_21964079_1",
506 mysql_21964079_1
[0], mysql_21964079_1
[1],
508 test_one
<Polygon
, Polygon
, Polygon
>("mysql_21964079_2",
509 mysql_21964079_2
[0], mysql_21964079_2
[1],
512 test_one
<Polygon
, Polygon
, Polygon
>("mysql_23023665_1",
513 mysql_23023665_1
[0], mysql_23023665_1
[1],
514 2, 1, -1, 92.0 + 142.5);
515 test_one
<Polygon
, Polygon
, Polygon
>("mysql_23023665_2",
516 mysql_23023665_2
[0], mysql_23023665_2
[1],
517 2, 1, -1, 96.0 + 16.0);
518 test_one
<Polygon
, Polygon
, Polygon
>("mysql_23023665_3",
519 mysql_23023665_3
[0], mysql_23023665_3
[1],
520 2, 1, -1, 225.0 + 66.0);
521 test_one
<Polygon
, Polygon
, Polygon
>("mysql_21964049",
522 mysql_21964049
[0], mysql_21964049
[1],
526 template <typename P
>
529 typedef bg::model::polygon
<P
> polygon
;
530 typedef bg::model::ring
<P
> ring
;
531 typedef bg::model::box
<P
> box
;
533 test_areal
<ring
, polygon
>();
535 #if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
537 test_areal
<bg::model::ring
<P
, true, false>, bg::model::polygon
<P
, true, false> >();
540 test_areal
<bg::model::ring
<P
, false>, bg::model::polygon
<P
, false> >();
542 // Counter clockwise and open
543 test_areal
<bg::model::ring
<P
, false, false>, bg::model::polygon
<P
, false, false> >();
546 test_one
<polygon
, box
, polygon
>("box_ring", example_box
, example_ring
,
549 test_one
<polygon
, box
, polygon
>("box_poly", example_box
, example_polygon
,
553 test_one
<polygon
, box
, polygon
>("box_poly1", example_box
,
554 "POLYGON((3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2))",
556 test_one
<polygon
, box
, polygon
>("box_poly2", example_box
,
557 "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,5.3 2.5,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3))",
562 test_one
<polygon
, box
, polygon
>("box_poly4", example_box
,
563 "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
566 test_one
<polygon
, box
, polygon
>("box_poly5", example_box
,
567 "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 2.5,4.5 2.3,5.0 2.3,5.0 2.1,4.5 2.1,4.5 1.9,4.0 1.9,4.5 1.2,4.9 0.8,2.9 0.7,2 1.3))",
570 test_one
<polygon
, box
, polygon
>("box_poly6", example_box
,
571 "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 2.5,4.5 1.2,2.9 0.7,2 1.3))",
574 test_one
<polygon
, box
, polygon
>("box_poly7", example_box
,
575 "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.0 3.0,5.0 2.0,2.9 0.7,2 1.3))",
578 test_one
<polygon
, box
, polygon
>("box_poly8", "box(0 0, 3 3)",
579 "POLYGON((2 2, 1 4, 2 4, 3 3, 2 2))",
584 int test_main(int, char* [])
586 BoostGeometryWriteTestConfiguration();
587 test_all
<bg::model::d2::point_xy
<default_test_type
>>();
589 #if ! defined(BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE)
590 test_all
<bg::model::d2::point_xy
<float>>();
591 test_all
<bg::model::d2::point_xy
<long double>>();
592 test_all
<bg::model::d2::point_xy
<mp_test_type
>>();
595 #if defined(BOOST_GEOMETRY_TEST_FAILURES)
596 BoostGeometryWriteExpectedFailures(3, 3, 1, 0);