// Boost.Geometry (aka GGL, Generic Geometry Library) // Unit test // 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_equals_on_spheroid #endif #include #include #include "test_equals.hpp" #include #include namespace bgm = bg::model; template struct test_point_point { static inline void apply(std::string const& header) { std::string const str = header + "-"; test_geometry(str + "pp_01", "POINT(0 0)", "POINT(0 0)", true); test_geometry(str + "pp_02", "POINT(0 0)", "POINT(10 0)", false); // points whose longitudes differ by 360 degrees test_geometry(str + "pp_03", "POINT(0 0)", "POINT(360 0)", true); test_geometry(str + "pp_04", "POINT(10 0)", "POINT(370 0)", true); test_geometry(str + "pp_05", "POINT(10 0)", "POINT(-350 0)", true); test_geometry(str + "pp_06", "POINT(180 10)", "POINT(-180 10)", true); test_geometry(str + "pp_06a", "POINT(540 10)", "POINT(-540 10)", true); #ifdef BOOST_GEOMETRY_NORMALIZE_LATITUDE test_geometry(str + "pp_06b", "POINT(540 370)", "POINT(-540 -350)", true); test_geometry(str + "pp_06c", "POINT(1260 370)", "POINT(-1260 -350)", true); test_geometry(str + "pp_06d", "POINT(2340 370)", "POINT(-2340 -350)", true); #endif test_geometry(str + "pp_06e", "POINT(-180 10)", "POINT(-540 10)", true); test_geometry(str + "pp_06f", "POINT(180 10)", "POINT(-540 10)", true); // north & south pole test_geometry(str + "pp_07", "POINT(0 90)", "POINT(0 90)", true); #ifdef BOOST_GEOMETRY_NORMALIZE_LATITUDE test_geometry(str + "pp_07a", "POINT(0 450)", "POINT(10 -270)", true); test_geometry(str + "pp_07b", "POINT(0 270)", "POINT(10 90)", false); test_geometry(str + "pp_07c", "POINT(0 -450)", "POINT(10 90)", false); #endif test_geometry(str + "pp_08", "POINT(0 90)", "POINT(10 90)", true); test_geometry(str + "pp_09", "POINT(0 90)", "POINT(0 -90)", false); test_geometry(str + "pp_10", "POINT(0 -90)", "POINT(0 -90)", true); test_geometry(str + "pp_11", "POINT(0 -90)", "POINT(10 -90)", true); test_geometry(str + "pp_11a", "POINT(0 -90)", "POINT(10 90)", false); test_geometry(str + "pp_12", "POINT(0 -90)", "POINT(0 -85)", false); test_geometry(str + "pp_13", "POINT(0 90)", "POINT(0 85)", false); test_geometry(str + "pp_14", "POINT(0 90)", "POINT(10 85)", false); // symmetric wrt prime meridian test_geometry(str + "pp_15", "POINT(-10 45)", "POINT(10 45)", false); test_geometry(str + "pp_16", "POINT(-170 45)", "POINT(170 45)", false); // other points test_geometry(str + "pp_17", "POINT(-10 45)", "POINT(10 -45)", false); test_geometry(str + "pp_18", "POINT(-10 -45)", "POINT(10 45)", false); test_geometry(str + "pp_19", "POINT(10 -135)", "POINT(10 45)", false); #ifdef BOOST_GEOMETRY_NORMALIZE_LATITUDE test_geometry(str + "pp_20", "POINT(190 135)", "POINT(10 45)", true); test_geometry(str + "pp_21", "POINT(190 150)", "POINT(10 30)", true); test_geometry(str + "pp_21a", "POINT(-170 150)", "POINT(10 30)", true); test_geometry(str + "pp_22", "POINT(190 -135)", "POINT(10 -45)", true); test_geometry(str + "pp_23", "POINT(190 -150)", "POINT(10 -30)", true); test_geometry(str + "pp_23a", "POINT(-170 -150)", "POINT(10 -30)", true); #endif } }; template struct test_point_point_with_height { static inline void apply(std::string const& header) { std::string const str = header + "-"; test_geometry(str + "pp_01", "POINT(0 0 10)", "POINT(0 0 20)", true); test_geometry(str + "pp_02", "POINT(0 0 10)", "POINT(10 0 10)", false); // points whose longitudes differ by 360 degrees test_geometry(str + "pp_03", "POINT(0 0 10)", "POINT(360 0 10)", true); // points whose longitudes differ by 360 degrees test_geometry(str + "pp_04", "POINT(10 0 10)", "POINT(370 0 10)", true); test_geometry(str + "pp_05", "POINT(10 0 10)", "POINT(10 0 370)", false); } }; template void test_segment_segment(std::string const& header) { typedef bgm::segment

seg; std::string const str = header + "-"; test_geometry(str + "ss_01", "SEGMENT(10 0,180 0)", "SEGMENT(10 0,-180 0)", true); test_geometry(str + "ss_02", "SEGMENT(0 90,180 0)", "SEGMENT(10 90,-180 0)", true); test_geometry(str + "ss_03", "SEGMENT(0 90,0 -90)", "SEGMENT(10 90,20 -90)", true); test_geometry(str + "ss_04", "SEGMENT(10 80,10 -80)", "SEGMENT(10 80,20 -80)", false); test_geometry(str + "ss_05", "SEGMENT(170 10,-170 10)", "SEGMENT(170 10,350 10)", false); } BOOST_AUTO_TEST_CASE( equals_point_point_se ) { typedef bg::cs::spherical_equatorial cs_type; test_point_point >::apply("se"); test_point_point >::apply("se"); test_point_point >::apply("se"); // mixed point types test_point_point < bgm::point, bgm::point >::apply("se"); test_point_point < bgm::point, bgm::point >::apply("se"); #if defined(HAVE_TTMATH) test_point_point >::apply("se"); #endif } BOOST_AUTO_TEST_CASE( equals_point_point_with_height_se ) { typedef bg::cs::spherical_equatorial cs_type; test_point_point >::apply("seh"); test_point_point >::apply("seh"); test_point_point >::apply("seh"); // mixed point types test_point_point < bgm::point, bgm::point >::apply("seh"); test_point_point < bgm::point, bgm::point >::apply("seh"); #if defined(HAVE_TTMATH) test_point_point >::apply("seh"); #endif } BOOST_AUTO_TEST_CASE( equals_point_point_geo ) { typedef bg::cs::geographic cs_type; test_point_point >::apply("geo"); test_point_point >::apply("geo"); test_point_point >::apply("geo"); // mixed point types test_point_point < bgm::point, bgm::point >::apply("se"); test_point_point < bgm::point, bgm::point >::apply("se"); #if defined(HAVE_TTMATH) test_point_point >::apply("geo"); #endif } BOOST_AUTO_TEST_CASE( equals_segment_segment_se ) { typedef bg::cs::spherical_equatorial cs_type; test_segment_segment >("se"); test_segment_segment >("se"); test_segment_segment >("se"); #if defined(HAVE_TTMATH) test_segment_segment >("se"); #endif } BOOST_AUTO_TEST_CASE( equals_segment_segment_geo ) { typedef bg::cs::geographic cs_type; test_segment_segment >("geo"); test_segment_segment >("geo"); test_segment_segment >("geo"); #if defined(HAVE_TTMATH) test_segment_segment >("geo"); #endif }