// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2015, Oracle and/or its affiliates. // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle #ifndef BOOST_TEST_MODULE #define BOOST_TEST_MODULE test_intersection_pointlike_linear #endif #include #include #include #include "../test_set_ops_pointlike.hpp" #include #include #include #include #include typedef bg::model::point point_type; typedef bg::model::segment segment_type; typedef bg::model::linestring linestring_type; typedef bg::model::multi_point multi_point_type; typedef bg::model::multi_linestring multi_linestring_type; //=========================================================================== //=========================================================================== //=========================================================================== BOOST_AUTO_TEST_CASE( test_intersection_point_segment ) { #ifdef BOOST_GEOMETRY_TEST_DEBUG std::cout << std::endl << std::endl << std::endl; std::cout << "*** POINT / SEGMENT INTERSECTION ***" << std::endl; std::cout << std::endl; #endif typedef point_type P; typedef segment_type S; typedef multi_point_type MP; typedef test_set_op_of_pointlike_geometries < P, S, MP, bg::overlay_intersection > tester; tester::apply ("psi01", from_wkt

("POINT(0 0)"), from_wkt("SEGMENT(1 1,2 2)"), from_wkt("MULTIPOINT()") ); tester::apply ("psi02", from_wkt

("POINT(0 0)"), from_wkt("SEGMENT(0 0,1 1)"), from_wkt("MULTIPOINT(0 0)") ); tester::apply ("psi03", from_wkt

("POINT(1 1)"), from_wkt("SEGMENT(0 0,2 2)"), from_wkt("MULTIPOINT(1 1)") ); tester::apply ("psi04", from_wkt

("POINT(3 3)"), from_wkt("SEGMENT(0 0,2 2)"), from_wkt("MULTIPOINT()") ); } BOOST_AUTO_TEST_CASE( test_intersection_point_linestring ) { #ifdef BOOST_GEOMETRY_TEST_DEBUG std::cout << std::endl << std::endl << std::endl; std::cout << "*** POINT / LINESTRING INTERSECTION ***" << std::endl; std::cout << std::endl; #endif typedef point_type P; typedef linestring_type L; typedef multi_point_type MP; typedef test_set_op_of_pointlike_geometries < P, L, MP, bg::overlay_intersection > tester; tester::apply ("pli01", from_wkt

("POINT(0 0)"), from_wkt("LINESTRING(1 1,2 2)"), from_wkt("MULTIPOINT()") ); tester::apply ("pli02", from_wkt

("POINT(0 0)"), from_wkt("LINESTRING(0 0,1 1)"), from_wkt("MULTIPOINT(0 0)") ); tester::apply ("pli03", from_wkt

("POINT(1 1)"), from_wkt("LINESTRING(0 0,2 2)"), from_wkt("MULTIPOINT(1 1)") ); tester::apply ("pli04", from_wkt

("POINT(3 3)"), from_wkt("LINESTRING(0 0,2 2)"), from_wkt("MULTIPOINT()") ); // linestrings with more than two points tester::apply ("pli05", from_wkt

("POINT(1 1)"), from_wkt("LINESTRING(0 0,1 1,2 2)"), from_wkt("MULTIPOINT(1 1)") ); tester::apply ("pli06", from_wkt

("POINT(2 2)"), from_wkt("LINESTRING(0 0,1 1,4 4)"), from_wkt("MULTIPOINT(2 2)") ); tester::apply ("pli07", from_wkt

("POINT(10 10)"), from_wkt("LINESTRING(0 0,1 1,4 4)"), from_wkt("MULTIPOINT()") ); tester::apply ("pli08", from_wkt

("POINT(0 1)"), from_wkt("LINESTRING(0 0,1 1,4 4)"), from_wkt("MULTIPOINT()") ); tester::apply ("pli09", from_wkt

("POINT(4 4)"), from_wkt("LINESTRING(0 0,1 1,4 4)"), from_wkt("MULTIPOINT(4 4)") ); tester::apply ("pli10", from_wkt

("POINT(0 0)"), from_wkt("LINESTRING(0 0,1 1,4 4)"), from_wkt("MULTIPOINT(0 0)") ); } BOOST_AUTO_TEST_CASE( test_intersection_point_multilinestring ) { #ifdef BOOST_GEOMETRY_TEST_DEBUG std::cout << std::endl << std::endl << std::endl; std::cout << "*** POINT / MULTILINESTRING INTERSECTION ***" << std::endl; std::cout << std::endl; #endif typedef point_type P; typedef multi_linestring_type ML; typedef multi_point_type MP; typedef test_set_op_of_pointlike_geometries < P, ML, MP, bg::overlay_intersection > tester; tester::apply ("pmli01", from_wkt

("POINT(0 0)"), from_wkt("MULTILINESTRING((1 1,2 2))"), from_wkt("MULTIPOINT()") ); tester::apply ("pmli02", from_wkt

("POINT(0 0)"), from_wkt("MULTILINESTRING((0 0,1 1))"), from_wkt("MULTIPOINT(0 0)") ); tester::apply ("pmli03", from_wkt

("POINT(1 1)"), from_wkt("MULTILINESTRING((0 0,2 2))"), from_wkt("MULTIPOINT(1 1)") ); tester::apply ("pmli04", from_wkt

("POINT(3 3)"), from_wkt("MULTILINESTRING((0 0,2 2))"), from_wkt("MULTIPOINT()") ); // linestrings with more than two points tester::apply ("pmli05", from_wkt

("POINT(1 1)"), from_wkt("MULTILINESTRING((0 0,1 1,2 2))"), from_wkt("MULTIPOINT(1 1)") ); tester::apply ("pmli06", from_wkt

("POINT(2 2)"), from_wkt("MULTILINESTRING((0 0,1 1,4 4))"), from_wkt("MULTIPOINT(2 2)") ); tester::apply ("pmli07", from_wkt

("POINT(10 10)"), from_wkt("MULTILINESTRING((0 0,1 1,4 4))"), from_wkt("MULTIPOINT()") ); tester::apply ("pmli08", from_wkt

("POINT(0 1)"), from_wkt("MULTILINESTRING((0 0,1 1,4 4))"), from_wkt("MULTIPOINT()") ); tester::apply ("pmli09", from_wkt

("POINT(4 4)"), from_wkt("MULTILINESTRING((0 0,1 1,4 4))"), from_wkt("MULTIPOINT(4 4)") ); tester::apply ("pmli10", from_wkt

("POINT(0 0)"), from_wkt("MULTILINESTRING((0 0,1 1,4 4))"), from_wkt("MULTIPOINT(0 0)") ); // multilinestrings with more than one linestring tester::apply ("pmli11", from_wkt

("POINT(0 0)"), from_wkt("MULTILINESTRING((-10,-10),(0 0,1 1,4 4))"), from_wkt("MULTIPOINT(0 0)") ); tester::apply ("pmli12", from_wkt

("POINT(0 0)"), from_wkt("MULTILINESTRING((-10 0,0 0,10 0),(0 0,1 1,4 4))"), from_wkt("MULTIPOINT(0 0)") ); tester::apply ("pmli13", from_wkt

("POINT(0 0)"), from_wkt("MULTILINESTRING((-10 0,10 0),(0 0,1 1,4 4))"), from_wkt("MULTIPOINT(0 0)") ); tester::apply ("pmli14", from_wkt

("POINT(-20 0)"), from_wkt("MULTILINESTRING((-10 0,10 0),(0 0,1 1,4 4))"), from_wkt("MULTIPOINT()") ); tester::apply ("pmli15", from_wkt

("POINT(0 1)"), from_wkt("MULTILINESTRING((-10 0,10 0),(0 0,1 1,4 4))"), from_wkt("MULTIPOINT()") ); tester::apply ("pmli16", from_wkt

("POINT(1 0)"), from_wkt("MULTILINESTRING((-10 0,10 0),(-1 0,2 0,20 0))"), from_wkt("MULTIPOINT(1 0)") ); tester::apply ("pmli17", from_wkt

("POINT(1 0)"), from_wkt("MULTILINESTRING((-10 0,10 0),(0 -1,0 2,0 4))"), from_wkt("MULTIPOINT(1 0)") ); } BOOST_AUTO_TEST_CASE( test_intersection_multipoint_segment ) { #ifdef BOOST_GEOMETRY_TEST_DEBUG std::cout << std::endl << std::endl << std::endl; std::cout << "*** MULTIPOINT / SEGMENT INTERSECTION ***" << std::endl; std::cout << std::endl; #endif typedef multi_point_type MP; typedef segment_type S; typedef test_set_op_of_pointlike_geometries < MP, S, MP, bg::overlay_intersection > tester; tester::apply ("mpsi01", from_wkt("MULTIPOINT(0 0)"), from_wkt("SEGMENT(1 1,2 2)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsi02", from_wkt("MULTIPOINT(0 0)"), from_wkt("SEGMENT(0 0,1 1)"), from_wkt("MULTIPOINT(0 0)") ); tester::apply ("mpsi03", from_wkt("MULTIPOINT(0 0,0 0)"), from_wkt("SEGMENT(1 1,2 2)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsi04", from_wkt("MULTIPOINT(0 0,0 0)"), from_wkt("SEGMENT(0 0,1 1)"), from_wkt("MULTIPOINT(0 0,0 0)") ); tester::apply ("mpsi05", from_wkt("MULTIPOINT(0 0,0 0,1 0)"), from_wkt("SEGMENT(1 1,2 2)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsf06", from_wkt("MULTIPOINT(0 0,0 0,1 0)"), from_wkt("SEGMENT(1 0,2 0)"), from_wkt("MULTIPOINT(1 0)") ); tester::apply ("mpsi07", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("SEGMENT(0 0,1 0)"), from_wkt("MULTIPOINT(0 0,0 0)") ); tester::apply ("mpsi07a", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("SEGMENT(0 0,3 0)"), from_wkt("MULTIPOINT(0 0,0 0,2 0)") ); tester::apply ("mpsi08", from_wkt("MULTIPOINT()"), from_wkt("SEGMENT(0 0,1 1)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsi09", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("SEGMENT(-1 0,1 0)"), from_wkt("MULTIPOINT(0 0,0 0)") ); tester::apply ("mpsi10", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("SEGMENT(1 0,3 0)"), from_wkt("MULTIPOINT(2 0)") ); tester::apply ("mpsi11", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("SEGMENT(-1 0,3 0)"), from_wkt("MULTIPOINT(0 0,0 0,2 0)") ); tester::apply ("mpsi12", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("SEGMENT(3 0,3 0)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsi12a", from_wkt("MULTIPOINT(0 0,2 0,0 0)"), from_wkt("SEGMENT(3 0,3 0)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsi12b", from_wkt("MULTIPOINT(0 0,2 0,0 0,2 0)"), from_wkt("SEGMENT(3 0,3 0)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsi12c", from_wkt("MULTIPOINT(0 0,2 0,0 0,2 0,0 0)"), from_wkt("SEGMENT(3 0,3 0)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsi13", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("SEGMENT(2 0,2 0)"), from_wkt("MULTIPOINT(2 0)") ); tester::apply ("mpsi14", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("SEGMENT(0 0,0 0)"), from_wkt("MULTIPOINT(0 0,0 0)") ); tester::apply ("mpsi15", from_wkt("MULTIPOINT()"), from_wkt("SEGMENT(0 0,1 0)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpsi16", from_wkt("MULTIPOINT(0 0,2 0,0 0,2 0,0 0)"), from_wkt("SEGMENT(-1 0,10 0)"), from_wkt("MULTIPOINT(0 0,0 0,0 0,2 0,2 0)") ); } BOOST_AUTO_TEST_CASE( test_intersection_multipoint_linestring ) { #ifdef BOOST_GEOMETRY_TEST_DEBUG std::cout << std::endl << std::endl << std::endl; std::cout << "*** MULTIPOINT / LINESTRING INTERSECTION ***" << std::endl; std::cout << std::endl; #endif typedef multi_point_type MP; typedef linestring_type L; typedef test_set_op_of_pointlike_geometries < MP, L, MP, bg::overlay_intersection > tester; tester::apply ("mpli01", from_wkt("MULTIPOINT(0 0)"), from_wkt("LINESTRING(1 1,2 2,3 3,4 4,5 5)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpli02", from_wkt("MULTIPOINT(0 0)"), from_wkt("LINESTRING(0 0,1 1)"), from_wkt("MULTIPOINT(0 0)") ); tester::apply ("mpli03", from_wkt("MULTIPOINT(0 0,0 0)"), from_wkt("LINESTRING(1 1,2 2)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpli04", from_wkt("MULTIPOINT(0 0,0 0)"), from_wkt("LINESTRING(0 0,1 1)"), from_wkt("MULTIPOINT(0 0,0 0)") ); tester::apply ("mpli05", from_wkt("MULTIPOINT(0 0,0 0,1 0)"), from_wkt("LINESTRING(1 1,2 2)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpli06", from_wkt("MULTIPOINT(0 0,0 0,1 0)"), from_wkt("LINESTRING(1 0,2 0)"), from_wkt("MULTIPOINT(1 0)") ); tester::apply ("mpli07", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("LINESTRING(0 0,1 0)"), from_wkt("MULTIPOINT(0 0,0 0)") ); tester::apply ("mpli08", from_wkt("MULTIPOINT()"), from_wkt("LINESTRING(0 0,1 1)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpli09", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("LINESTRING(-1 0,1 0)"), from_wkt("MULTIPOINT(0 0,0 0)") ); tester::apply ("mpli10", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("LINESTRING(1 0,3 0)"), from_wkt("MULTIPOINT(2 0)") ); tester::apply ("mpli10a", from_wkt("MULTIPOINT(2 0,0 0,2 0,0 0,2 0)"), from_wkt("LINESTRING(1 0,3 0)"), from_wkt("MULTIPOINT(2 0,2 0,2 0)") ); tester::apply ("mpli11", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("LINESTRING(-1 0,3 0)"), from_wkt("MULTIPOINT(2 0,0 0,0 0)") ); tester::apply ("mpli12", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("LINESTRING(3 0,3 0)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpli13", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("LINESTRING(2 0,2 0)"), from_wkt("MULTIPOINT(2 0)") ); tester::apply ("mpli14", from_wkt("MULTIPOINT(0 0,0 0,2 0)"), from_wkt("LINESTRING(0 0,0 0)"), from_wkt("MULTIPOINT(0 0,0 0)") ); tester::apply ("mpli15", from_wkt("MULTIPOINT()"), from_wkt("LINESTRING(0 0,1 0,2 0,3 0)"), from_wkt("MULTIPOINT()") ); tester::apply ("mpli16", from_wkt("MULTIPOINT()"), from_wkt("LINESTRING()"), from_wkt("MULTIPOINT()") ); } BOOST_AUTO_TEST_CASE( test_intersection_multipoint_multilinestring ) { #ifdef BOOST_GEOMETRY_TEST_DEBUG std::cout << std::endl << std::endl << std::endl; std::cout << "*** MULTIPOINT / MULTILINESTRING INTERSECTION ***" << std::endl; std::cout << std::endl; #endif typedef multi_point_type MP; typedef multi_linestring_type ML; typedef test_set_op_of_pointlike_geometries < MP, ML, MP, bg::overlay_intersection > tester; tester::apply ("mpmli01", from_wkt("MULTIPOINT(0 0,1 0,2 0)"), from_wkt("MULTILINESTRING((1 0,1 1,1 1,4 4))"), from_wkt("MULTIPOINT(1 0)") ); tester::apply ("mpmli02", from_wkt("MULTIPOINT(2 2,3 3,0 0,0 0,2 2,1 1,1 1,1 0,1 0)"), from_wkt("MULTILINESTRING((1 0,1 1,1 1,4 4))"), from_wkt("MULTIPOINT(2 2,2 2,3 3,1 1,1 1,1 0,1 0)") ); tester::apply ("mpmli03", from_wkt("MULTIPOINT(5 5,3 3,0 0,0 0,5 5,1 1,1 1,1 0,1 0)"), from_wkt("MULTILINESTRING((1 0,1 1,1 1,4 4))"), from_wkt("MULTIPOINT(1 0,1 0,3 3,1 1,1 1)") ); tester::apply ("mpmli04", from_wkt("MULTIPOINT(0 0,1 1,1 0,1 1)"), from_wkt("MULTILINESTRING((1 0,0 0,1 1,0 0))"), from_wkt("MULTIPOINT(1 0,0 0,1 1,1 1)") ); tester::apply ("mpmli05", from_wkt("MULTIPOINT(0 0,1 0,2 0,5 0)"), from_wkt("MULTILINESTRING((0 1,0 0,1 2,1 0),\ (0 1,2 0,0 10,2 0,2 10,5 10,5 0,5 10))"), from_wkt("MULTIPOINT(0 0,1 0,2 0,5 0)") ); tester::apply ("mpmli06", from_wkt("MULTIPOINT(0 0,1 1,1 0,1 1)"), from_wkt("MULTILINESTRING(())"), from_wkt("MULTIPOINT()") ); tester::apply ("mpmli07", from_wkt("MULTIPOINT()"), from_wkt("MULTILINESTRING(())"), from_wkt("MULTIPOINT()") ); tester::apply ("mpmli08", from_wkt("MULTIPOINT()"), from_wkt("MULTILINESTRING((0 0,1 0),(9 0,10 0))"), from_wkt("MULTIPOINT()") ); tester::apply ("mpmli09", from_wkt("MULTIPOINT(0 0,1 1,0 0,0 0,0 0,0 0,0 0,0 0,\ 0 0,0 0,0 0,0 0,0 0)"), from_wkt("MULTILINESTRING((0 0,0 1),(0 0,2 0),(0 0,0 3),\ (0 0,4 0),(0 0,0 5),(0 0,6 0),(0 0,7 0),(0 0,8 0))"), from_wkt("MULTIPOINT(0 0,0 0,0 0,0 0,0 0,0 0,0 0,\ 0 0,0 0,0 0,0 0,0 0)") ); tester::apply ("mpmli09a", from_wkt("MULTIPOINT(0 0,1 1,0 0)"), from_wkt("MULTILINESTRING((0 0,0 1),(0 0,2 0),(0 0,0 3),\ (0 0,4 0),(0 0,0 5),(0 0,6 0),(0 0,7 0),(0 0,8 0))"), from_wkt("MULTIPOINT(0 0,0 0)") ); }