diff --git a/test/algorithms/relational_operations/equals_on_spheroid.cpp b/test/algorithms/relational_operations/equals_on_spheroid.cpp index 80c8593e8..5e24fdfab 100644 --- a/test/algorithms/relational_operations/equals_on_spheroid.cpp +++ b/test/algorithms/relational_operations/equals_on_spheroid.cpp @@ -40,17 +40,25 @@ struct test_point_point 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); @@ -68,12 +76,52 @@ struct test_point_point 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); } }; @@ -132,6 +180,30 @@ BOOST_AUTO_TEST_CASE( equals_point_point_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;