@@ -349,6 +349,34 @@ static std::string const nores_wt_1
349349static std::string const nores_wt_2
350350 = " 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)))" ;
351351
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+ static std::string const nores_3af0
357+ = " 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)))" ;
358+ static std::string const nores_6061
359+ = " 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)))" ;
360+
361+ static std::string const nores_1ea1
362+ = " 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)))" ;
363+ static std::string const nores_804e
364+ = " 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)))" ;
365+ static std::string const nores_37f6
366+ = " 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)))" ;
367+
368+ static std::string const nores_495d
369+ = " 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)))" ;
370+
371+ // rescaled
372+ static std::string const res_ebc4
373+ = " 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)))" ;
374+ static std::string const res_8618
375+ = " 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)))" ;
376+ static std::string const res_3b4d
377+ = " 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)))" ;
378+
379+
352380static std::string const neighbouring
353381 = " MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)),((10 10,10 20,20 20,20 10,10 10)))" ;
354382
@@ -483,7 +511,6 @@ void test_all()
483511 test_one<multi_polygon_type, polygon_type>(" rt_p3" , rt_p3, join_miter, end_flat, 22.3995 , 1.0 );
484512 test_one<multi_polygon_type, polygon_type>(" rt_p4" , rt_p4, join_miter, end_flat, 33.0563 , 1.0 );
485513 test_one<multi_polygon_type, polygon_type>(" rt_p5" , rt_p5, join_miter, end_flat, 17.0 , 1.0 );
486-
487514 test_one<multi_polygon_type, polygon_type>(" rt_p6" , rt_p6, join_miter, end_flat, 18.4853 , 1.0 );
488515 test_one<multi_polygon_type, polygon_type>(" rt_p7" , rt_p7, join_miter, end_flat, 26.2279 , 1.0 );
489516 test_one<multi_polygon_type, polygon_type>(" rt_p8" , rt_p8, join_miter, end_flat, 29.0563 , 1.0 );
@@ -571,6 +598,26 @@ void test_all()
571598
572599 test_one<multi_polygon_type, polygon_type>(" nores_wt_1" , nores_wt_1, join_round32, end_flat, 80.1609 , 1.0 );
573600 test_one<multi_polygon_type, polygon_type>(" nores_wt_2" , nores_wt_2, join_round32, end_flat, 22.1102 , 1.0 );
601+ test_one<multi_polygon_type, polygon_type>(" nores_b8e6" , nores_b8e6, join_round32, end_flat, 19.8528 , 1.0 );
602+
603+ test_one<multi_polygon_type, polygon_type>(" nores_2881" , nores_2881, join_round32, end_flat, 16.5517 , 1.0 );
604+ test_one<multi_polygon_type, polygon_type>(" nores_6061" , nores_6061, join_round32, end_flat, 39.7371 , 1.0 );
605+ test_one<multi_polygon_type, polygon_type>(" nores_37f6" , nores_37f6, join_round32, end_flat, 26.5339 , 1.0 );
606+
607+ #if defined(BOOST_GEOMETRY_USE_RESCALING) || defined(BOOST_GEOMETRY_TEST_FAILURES)
608+ // Cases not yet solved without rescaling (out of 241)
609+ test_one<multi_polygon_type, polygon_type>(" nores_1ea1" , nores_1ea1, join_round32, end_flat, 28.9755 , 1.0 );
610+ test_one<multi_polygon_type, polygon_type>(" nores_804e" , nores_804e, join_round32, end_flat, 26.4503 , 1.0 );
611+ test_one<multi_polygon_type, polygon_type>(" nores_3af0" , nores_3af0, join_round32, end_flat, 22.1008 , 1.0 );
612+ test_one<multi_polygon_type, polygon_type>(" nores_495d" , nores_495d, join_round32, end_flat, 23.4376 , 1.0 );
613+ #endif
614+
615+ #if ! defined(BOOST_GEOMETRY_USE_RESCALING) || defined(BOOST_GEOMETRY_TEST_FAILURES)
616+ // Erroneous cases with rescaling (out of 8)
617+ test_one<multi_polygon_type, polygon_type>(" res_ebc4" , res_ebc4, join_round32, end_flat, 43.8877 , 1.0 );
618+ test_one<multi_polygon_type, polygon_type>(" res_8618" , res_8618, join_round32, end_flat, 48.1085 , 1.0 );
619+ test_one<multi_polygon_type, polygon_type>(" res_3b4d" , res_3b4d, join_round32, end_flat, 48.4739 , 1.0 );
620+ #endif
574621
575622 test_one<multi_polygon_type, polygon_type>(" neighbouring_small" ,
576623 neighbouring,
@@ -615,7 +662,7 @@ int test_main(int, char* [])
615662#endif
616663
617664#if defined(BOOST_GEOMETRY_TEST_FAILURES)
618- BoostGeometryWriteExpectedFailures (1 , 1 , 2 , 3 );
665+ BoostGeometryWriteExpectedFailures (4 , 6 , 3 , 8 );
619666#endif
620667
621668 return 0 ;
0 commit comments