@@ -292,6 +292,52 @@ static std::string const rt_v3
292
292
static std::string const rt_v4
293
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)))" ;
294
294
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
297
+
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)))" ;
301
+
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)))" ;
304
+
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)))" ;
307
+
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)))" ;
310
+
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)))" ;
313
+
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)))" ;
316
+
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)))" ;
320
+
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)))" ;
323
+
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)))" ;
326
+
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)))" ;
329
+
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)))" ;
332
+
333
+
334
+ // Cases having wrong next turn information, somehow, taking the "i" (intersection),
335
+ // which is wrong for buffer (it should take the "u" like union)
336
+ static std::string const nores_wn_1
337
+ = " 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)))" ;
338
+ static std::string const nores_wn_2
339
+ = " 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)))" ;
340
+
295
341
296
342
static std::string const neighbouring
297
343
= " MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10)))" ;
@@ -498,6 +544,23 @@ void test_all()
498
544
test_one<multi_polygon_type, polygon_type>(" rt_v3" , rt_v3, join_round32, end_flat, 22.9158 , 1.0 );
499
545
test_one<multi_polygon_type, polygon_type>(" rt_v4" , rt_v4, join_round32, end_flat, 23.4146 , 1.0 );
500
546
547
+ test_one<multi_polygon_type, polygon_type>(" nores_mt_1" , nores_mt_1, join_round32, end_flat, 13.4113 , 1.0 );
548
+ test_one<multi_polygon_type, polygon_type>(" nores_mt_2" , nores_mt_2, join_round32, end_flat, 17.5265 , 1.0 );
549
+ test_one<multi_polygon_type, polygon_type>(" nores_mt_3" , nores_mt_3, join_round32, end_flat, 25.6091 , 1.0 );
550
+ test_one<multi_polygon_type, polygon_type>(" nores_mt_4" , nores_mt_4, join_round32, end_flat, 26.0946 , 1.0 );
551
+ test_one<multi_polygon_type, polygon_type>(" nores_mt_5" , nores_mt_5, join_round32, end_flat, 26.4375 , 1.0 );
552
+ test_one<multi_polygon_type, polygon_type>(" nores_mt_6" , nores_mt_6, join_round32, end_flat, 16.9018 , 1.0 );
553
+
554
+ #if defined(BOOST_GEOMETRY_USE_RESCALING) || defined(BOOST_GEOMETRY_TEST_FAILURES)
555
+ test_one<multi_polygon_type, polygon_type>(" nores_et_1" , nores_et_1, join_round32, end_flat, 18.9866 , 1.0 );
556
+ test_one<multi_polygon_type, polygon_type>(" nores_et_2" , nores_et_2, join_round32, end_flat, 23.8389 , 1.0 );
557
+ test_one<multi_polygon_type, polygon_type>(" nores_et_3" , nores_et_3, join_round32, end_flat, 26.9030 , 1.0 );
558
+ test_one<multi_polygon_type, polygon_type>(" nores_et_4" , nores_et_4, join_round32, end_flat, 19.9626 , 1.0 );
559
+ test_one<multi_polygon_type, polygon_type>(" nores_et_5" , nores_et_5, join_round32, end_flat, 19.9615 , 1.0 );
560
+ test_one<multi_polygon_type, polygon_type>(" nores_wn_1" , nores_wn_1, join_round32, end_flat, 23.7659 , 1.0 );
561
+ test_one<multi_polygon_type, polygon_type>(" nores_wn_2" , nores_wn_2, join_round32, end_flat, 18.2669 , 1.0 );
562
+ #endif
563
+
501
564
test_one<multi_polygon_type, polygon_type>(" neighbouring_small" ,
502
565
neighbouring,
503
566
join_round32, end_round32, 128.0 , -1.0 );
@@ -541,7 +604,7 @@ int test_main(int, char* [])
541
604
#endif
542
605
543
606
#if defined(BOOST_GEOMETRY_TEST_FAILURES)
544
- BoostGeometryWriteExpectedFailures (1 , 1 , 2 , 3 );
607
+ BoostGeometryWriteExpectedFailures (1 , 14 , 2 , 11 );
545
608
#endif
546
609
547
610
return 0 ;
0 commit comments