// Boost.Geometry (aka GGL, Generic Geometry Library) // Unit Test // Copyright (c) 2007-2022 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2015 Bruno Lalande, Paris, France. // Copyright (c) 2009-2015 Mateusz Loskot, London, UK. // This file was modified by Oracle on 2014, 2015. // Modifications copyright (c) 2014-2015 Oracle and/or its affiliates. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) //#include #include #include #include #include #include #include #include #include template void test_all(); // Include the single test #define GEOMETRY_TEST_MULTI #include "io/wkt/wkt.cpp" template void test_order_closure() { using namespace boost::geometry; typedef bg::model::point Pt; typedef bg::model::polygon PCWC; typedef bg::model::polygon PCWO; typedef bg::model::polygon PCCWC; typedef bg::model::polygon PCCWO; typedef bg::model::multi_polygon MPCWC; typedef bg::model::multi_polygon MPCWO; typedef bg::model::multi_polygon MPCCWC; typedef bg::model::multi_polygon MPCCWO; std::string wkt_cwc = "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0)),((0 0,0 -3,-3 -3,-3 0,0 0),(-1 -1,-2 -1,-2 -2,-1 -2,-1 -1)))"; std::string wkt_cwo = "MULTIPOLYGON(((0 0,0 2,2 2,2 0)),((0 0,0 -3,-3 -3,-3 0),(-1 -1,-2 -1,-2 -2,-1 -2)))"; std::string wkt_ccwc = "MULTIPOLYGON(((0 0,2 0,2 2,0 2,0 0)),((0 0,-3 0,-3 -3,0 -3,0 0),(-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))"; std::string wkt_ccwo = "MULTIPOLYGON(((0 0,2 0,2 2,0 2)),((0 0,-3 0,-3 -3,0 -3),(-1 -1,-1 -2,-2 -2,-2 -1)))"; test_wkt(wkt_cwc, wkt_cwc, 15, 0, 12, 24); test_wkt(wkt_cwc, wkt_cwc, 12, 0, 12, 24); test_wkt(wkt_cwo, wkt_cwc, 12, 0, 12, 24); test_wkt(wkt_ccwc, wkt_ccwc, 15, 0, 12, 24); test_wkt(wkt_ccwc, wkt_ccwc, 12, 0, 12, 24); test_wkt(wkt_ccwo, wkt_ccwc, 12, 0, 12, 24); } template void test_all() { using namespace boost::geometry; typedef bg::model::point P; test_wkt >("multipoint((1 2),(3 4))", 2); test_wkt > >("multilinestring((1 1,2 2,3 3),(4 4,5 5,6 6))", 6, 4 * sqrt(2.0)); test_wkt > >("multipolygon(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),((0 0,0 4,4 4,4 0,0 0)))", 15, 0, 21, 28); // Support tabs, and new lines. test_relaxed_wkt >("multipoint((1\t2),\n(3\r4))", "multipoint((1 2),(3 4))"); // Verify empty multi geometries test_relaxed_wkt >("multipoint()", "multipoint()"); test_relaxed_wkt >>("multilinestring()", "multilinestring()"); test_relaxed_wkt > >("multipolygon()", "multipolygon()"); test_relaxed_wkt >("multipoint empty", "multipoint()"); test_relaxed_wkt >>("multilinestring empty", "multilinestring()"); test_relaxed_wkt > >("multipolygon empty", "multipolygon()"); // Support for the official alternative syntax for multipoint // (provided by Aleksey Tulinov): test_relaxed_wkt >("multipoint(1 2,3 4)", "multipoint((1 2),(3 4))"); test_wrong_wkt > >( "MULTIPOLYGON(((0 0,0 2,2 2,2 0,0 0),(1 1,1 2,2 2,2 1,1 1)),(0 0,0 4,4 4,4 0,0 0)))", "expected '('"); test_wrong_wkt > >( "MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10)), (0 0, 1 1)", "too many tokens at ','"); test_wrong_wkt >( "MULTIPOINT((8 9), 10 11)", "expected '(' at '10'"); test_wrong_wkt >( "MULTIPOINT(12 13, (14 15))", "bad lexical cast: source type value could not be interpreted as target at '(' in 'multipoint(12 13, (14 15))'"); test_wrong_wkt >( "MULTIPOINT((16 17), (18 19)", "expected ')' in 'multipoint((16 17), (18 19)'"); test_wrong_wkt >( "MULTIPOINT(16 17), (18 19)", "too many tokens at ',' in 'multipoint(16 17), (18 19)'"); test_order_closure(); }