summaryrefslogtreecommitdiff
path: root/libs/geometry/test/algorithms/test_distance_common.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/geometry/test/algorithms/test_distance_common.hpp')
-rw-r--r--libs/geometry/test/algorithms/test_distance_common.hpp600
1 files changed, 0 insertions, 600 deletions
diff --git a/libs/geometry/test/algorithms/test_distance_common.hpp b/libs/geometry/test/algorithms/test_distance_common.hpp
deleted file mode 100644
index 31159e08b..000000000
--- a/libs/geometry/test/algorithms/test_distance_common.hpp
+++ /dev/null
@@ -1,600 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Unit Test
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_TEST_DISTANCE_COMMON_HPP
-#define BOOST_GEOMETRY_TEST_DISTANCE_COMMON_HPP
-
-#include <iostream>
-#include <string>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/geometries/point.hpp>
-#include <boost/geometry/geometries/point_xy.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-#include <boost/geometry/geometries/linestring.hpp>
-#include <boost/geometry/geometries/polygon.hpp>
-#include <boost/geometry/geometries/ring.hpp>
-#include <boost/geometry/geometries/box.hpp>
-#include <boost/geometry/multi/geometries/multi_point.hpp>
-#include <boost/geometry/multi/geometries/multi_linestring.hpp>
-#include <boost/geometry/multi/geometries/multi_polygon.hpp>
-
-#include <boost/geometry/io/wkt/write.hpp>
-#include <boost/geometry/multi/io/wkt/write.hpp>
-
-#include <boost/geometry/io/dsv/write.hpp>
-#include <boost/geometry/multi/io/dsv/write.hpp>
-
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-#include <boost/geometry/algorithms/distance.hpp>
-#include <boost/geometry/algorithms/comparable_distance.hpp>
-
-#include "from_wkt.hpp"
-
-#include <string_from_type.hpp>
-
-
-#ifndef BOOST_GEOMETRY_TEST_DISTANCE_HPP
-
-namespace bg = ::boost::geometry;
-
-// function copied from BG's test_distance.hpp
-
-template <typename Geometry1, typename Geometry2>
-void test_empty_input(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- try
- {
- bg::distance(geometry1, geometry2);
- }
- catch(bg::empty_input_exception const& )
- {
- return;
- }
- BOOST_CHECK_MESSAGE(false, "A empty_input_exception should have been thrown" );
-}
-#endif // BOOST_GEOMETRY_TEST_DISTANCE_HPP
-
-
-
-//========================================================================
-
-
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-// pretty print geometry -- START
-template <typename Geometry, typename GeometryTag>
-struct pretty_print_geometry_dispatch
-{
- template <typename Stream>
- static inline Stream& apply(Geometry const& geometry, Stream& os)
- {
- os << bg::wkt(geometry);
- return os;
- }
-};
-
-template <typename Geometry>
-struct pretty_print_geometry_dispatch<Geometry, bg::segment_tag>
-{
- template <typename Stream>
- static inline Stream& apply(Geometry const& geometry, Stream& os)
- {
- os << "SEGMENT" << bg::dsv(geometry);
- return os;
- }
-};
-
-template <typename Geometry>
-struct pretty_print_geometry_dispatch<Geometry, bg::box_tag>
-{
- template <typename Stream>
- static inline Stream& apply(Geometry const& geometry, Stream& os)
- {
- os << "BOX" << bg::dsv(geometry);
- return os;
- }
-};
-
-
-template <typename Geometry>
-struct pretty_print_geometry
-{
- template <typename Stream>
- static inline Stream& apply(Geometry const& geometry, Stream& os)
- {
- return pretty_print_geometry_dispatch
- <
- Geometry, typename bg::tag<Geometry>::type
- >::apply(geometry, os);
- }
-};
-// pretty print geometry -- END
-#endif // BOOST_GEOMETRY_TEST_DEBUG
-
-
-//========================================================================
-
-
-template <typename T>
-struct check_equal
-{
- static inline void apply(T const& value1, T const& value2)
- {
- BOOST_CHECK( value1 == value2 );
- }
-};
-
-template <>
-struct check_equal<double>
-{
- static inline void apply(double value1, double value2)
- {
- BOOST_CHECK_CLOSE( value1, value2, 0.0001 );
- }
-};
-
-
-//========================================================================
-
-template
-<
- typename Geometry1, typename Geometry2,
- int id1 = bg::geometry_id<Geometry1>::value,
- int id2 = bg::geometry_id<Geometry2>::value
->
-struct test_distance_of_geometries
- : public test_distance_of_geometries<Geometry1, Geometry2, 0, 0>
-{};
-
-
-template <typename Geometry1, typename Geometry2>
-struct test_distance_of_geometries<Geometry1, Geometry2, 0, 0>
-{
- template
- <
- typename DistanceType,
- typename ComparableDistanceType,
- typename Strategy
- >
- static inline
- void apply(std::string const& wkt1,
- std::string const& wkt2,
- DistanceType const& expected_distance,
- ComparableDistanceType const& expected_comparable_distance,
- Strategy const& strategy,
- bool test_reversed = true)
- {
- Geometry1 geometry1 = from_wkt<Geometry1>(wkt1);
- Geometry2 geometry2 = from_wkt<Geometry2>(wkt2);
-
- apply(geometry1, geometry2,
- expected_distance, expected_comparable_distance,
- strategy, test_reversed);
- }
-
-
- template
- <
- typename DistanceType,
- typename ComparableDistanceType,
- typename Strategy
- >
- static inline
- void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- DistanceType const& expected_distance,
- ComparableDistanceType const& expected_comparable_distance,
- Strategy const& strategy,
- bool test_reversed = true)
- {
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
- typedef pretty_print_geometry<Geometry1> PPG1;
- typedef pretty_print_geometry<Geometry2> PPG2;
- PPG1::apply(geometry1, std::cout);
- std::cout << " - ";
- PPG2::apply(geometry2, std::cout);
- std::cout << std::endl;
-#endif
- typedef typename bg::default_distance_result
- <
- Geometry1, Geometry2
- >::type default_distance_result;
-
- typedef typename bg::strategy::distance::services::return_type
- <
- Strategy, Geometry1, Geometry2
- >::type distance_result_from_strategy;
-
- static const bool same_regular = boost::is_same
- <
- default_distance_result,
- distance_result_from_strategy
- >::type::value;
-
- BOOST_CHECK( same_regular );
-
-
- typedef typename bg::default_comparable_distance_result
- <
- Geometry1, Geometry2
- >::type default_comparable_distance_result;
-
- typedef typename bg::strategy::distance::services::return_type
- <
- typename bg::strategy::distance::services::comparable_type
- <
- Strategy
- >::type,
- Geometry1,
- Geometry2
- >::type comparable_distance_result_from_strategy;
-
- static const bool same_comparable = boost::is_same
- <
- default_comparable_distance_result,
- comparable_distance_result_from_strategy
- >::type::value;
-
- BOOST_CHECK( same_comparable );
-
-
- // check distance with default strategy
- default_distance_result dist_def = bg::distance(geometry1, geometry2);
-
- check_equal
- <
- default_distance_result
- >::apply(dist_def, expected_distance);
-
-
- // check distance with passed strategy
- distance_result_from_strategy dist =
- bg::distance(geometry1, geometry2, strategy);
-
- check_equal
- <
- default_distance_result
- >::apply(dist, expected_distance);
-
-
- // check comparable distance with default strategy
- default_comparable_distance_result cdist_def =
- bg::comparable_distance(geometry1, geometry2);
-
- check_equal
- <
- default_comparable_distance_result
- >::apply(cdist_def, expected_comparable_distance);
-
-
- // check comparable distance with passed strategy
- comparable_distance_result_from_strategy cdist =
- bg::comparable_distance(geometry1, geometry2, strategy);
-
- check_equal
- <
- default_comparable_distance_result
- >::apply(cdist, expected_comparable_distance);
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
- std::cout << string_from_type<typename bg::coordinate_type<Geometry1>::type>::name()
- << string_from_type<typename bg::coordinate_type<Geometry2>::type>::name()
- << " -> "
- << string_from_type<default_distance_result>::name()
- << string_from_type<default_comparable_distance_result>::name()
- << std::endl;
- std::cout << "distance (default strategy) = " << dist_def << " ; "
- << "distance (passed strategy) = " << dist << " ; "
- << "comp. distance (default strategy) = "
- << cdist_def << " ; "
- << "comp. distance (passed strategy) = "
- << cdist << std::endl;
-
- if ( !test_reversed )
- {
- std::cout << std::endl;
- }
-#endif
-
- if ( test_reversed )
- {
- // check distance with default strategy
- dist_def = bg::distance(geometry2, geometry1);
-
- check_equal
- <
- default_distance_result
- >::apply(dist_def, expected_distance);
-
-
- // check distance with given strategy
- dist = bg::distance(geometry2, geometry1, strategy);
-
- check_equal
- <
- default_distance_result
- >::apply(dist, expected_distance);
-
-
- // check comparable distance with default strategy
- cdist_def = bg::comparable_distance(geometry2, geometry1);
-
- check_equal
- <
- default_comparable_distance_result
- >::apply(cdist_def, expected_comparable_distance);
-
- // check comparable distance with given strategy
- cdist = bg::comparable_distance(geometry2, geometry1, strategy);
-
- check_equal
- <
- default_comparable_distance_result
- >::apply(cdist, expected_comparable_distance);
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
- std::cout << "distance[reversed args] (def. startegy) = "
- << dist_def << " ; "
- << "distance[reversed args] (passed startegy) = "
- << dist << " ; "
- << "comp. distance[reversed args] (def. strategy) = "
- << cdist_def << " ; "
- << "comp. distance[reversed args] (passed strategy) = "
- << cdist << std::endl;
- std::cout << std::endl;
-#endif
- }
- }
-};
-
-
-//========================================================================
-
-template <typename Segment, typename Polygon>
-struct test_distance_of_geometries
-<
- Segment, Polygon,
- 92 /* segment */, 3 /* polygon */
->
- : public test_distance_of_geometries<Segment, Polygon, 0, 0>
-{
- typedef test_distance_of_geometries<Segment, Polygon, 0, 0> base;
-
- typedef typename bg::ring_type<Polygon>::type ring_type;
-
- template
- <
- typename DistanceType,
- typename ComparableDistanceType,
- typename Strategy
- >
- static inline
- void apply(std::string const& wkt_segment,
- std::string const& wkt_polygon,
- DistanceType const& expected_distance,
- ComparableDistanceType const& expected_comparable_distance,
- Strategy const& strategy)
- {
- Segment segment = from_wkt<Segment>(wkt_segment);
- Polygon polygon = from_wkt<Polygon>(wkt_polygon);
- apply(segment,
- polygon,
- expected_distance,
- expected_comparable_distance,
- strategy);
- }
-
-
- template
- <
- typename DistanceType,
- typename ComparableDistanceType,
- typename Strategy
- >
- static inline
- void apply(Segment const& segment,
- Polygon const& polygon,
- DistanceType const& expected_distance,
- ComparableDistanceType const& expected_comparable_distance,
- Strategy const& strategy)
- {
- base::apply(segment, polygon, expected_distance,
- expected_comparable_distance, strategy);
- if ( bg::num_interior_rings(polygon) == 0 ) {
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
- std::cout << "... testing also exterior ring ..." << std::endl;
-#endif
- test_distance_of_geometries
- <
- Segment, ring_type
- >::apply(segment,
- bg::exterior_ring(polygon),
- expected_distance,
- expected_comparable_distance,
- strategy);
- }
- }
-};
-
-//========================================================================
-
-template <typename Box, typename Segment>
-struct test_distance_of_geometries
-<
- Box, Segment,
- 94 /* box */, 92 /* segment */
->
-{
- template
- <
- typename DistanceType,
- typename ComparableDistanceType,
- typename Strategy
- >
- static inline
- void apply(std::string const& wkt_box,
- std::string const& wkt_segment,
- DistanceType const& expected_distance,
- ComparableDistanceType const& expected_comparable_distance,
- Strategy const& strategy)
- {
- test_distance_of_geometries
- <
- Segment, Box, 92, 94
- >::apply(wkt_segment,
- wkt_box,
- expected_distance,
- expected_comparable_distance,
- strategy);
- }
-};
-
-
-template <typename Segment, typename Box>
-struct test_distance_of_geometries
-<
- Segment, Box,
- 92 /* segment */, 94 /* box */
->
- : public test_distance_of_geometries<Segment, Box, 0, 0>
-{
- typedef test_distance_of_geometries<Segment, Box, 0, 0> base;
-
- template
- <
- typename DistanceType,
- typename ComparableDistanceType,
- typename Strategy
- >
- static inline
- void apply(std::string const& wkt_segment,
- std::string const& wkt_box,
- DistanceType const& expected_distance,
- ComparableDistanceType const& expected_comparable_distance,
- Strategy const& strategy)
- {
- Segment segment = from_wkt<Segment>(wkt_segment);
- Box box = from_wkt<Box>(wkt_box);
- apply(segment,
- box,
- expected_distance,
- expected_comparable_distance,
- strategy);
- }
-
-
- template
- <
- typename DistanceType,
- typename ComparableDistanceType,
- typename Strategy
- >
- static inline
- void apply(Segment const& segment,
- Box const& box,
- DistanceType const& expected_distance,
- ComparableDistanceType const& expected_comparable_distance,
- Strategy const& strategy)
- {
- typedef typename bg::strategy::distance::services::return_type
- <
- Strategy, Segment, Box
- >::type distance_result_type;
-
- typedef typename bg::strategy::distance::services::comparable_type
- <
- Strategy
- >::type comparable_strategy;
-
- typedef typename bg::strategy::distance::services::return_type
- <
- comparable_strategy, Segment, Box
- >::type comparable_distance_result_type;
-
-
- base::apply(segment, box, expected_distance,
- expected_comparable_distance, strategy);
-
- comparable_strategy cstrategy =
- bg::strategy::distance::services::get_comparable
- <
- Strategy
- >::apply(strategy);
-
- distance_result_type distance_generic =
- bg::detail::distance::segment_to_box_2D_generic
- <
- Segment, Box, Strategy
- >::apply(segment, box, strategy);
-
- comparable_distance_result_type comparable_distance_generic =
- bg::detail::distance::segment_to_box_2D_generic
- <
- Segment, Box, comparable_strategy
- >::apply(segment, box, cstrategy);
-
-
- check_equal
- <
- distance_result_type
- >::apply(distance_generic, expected_distance);
-
- check_equal
- <
- comparable_distance_result_type
- >::apply(comparable_distance_generic, expected_comparable_distance);
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
- std::cout << "... testing with naive seg-box distance algorithm..."
- << std::endl;
- std::cout << "distance (generic algorithm) = "
- << distance_generic << " ; "
- << "comp. distance (generic algorithm) = "
- << comparable_distance_generic
- << std::endl;
- std::cout << std::endl << std::endl;
-#endif
- }
-};
-
-//========================================================================
-
-
-template <typename Geometry1, typename Geometry2, typename Strategy>
-void test_empty_input(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- try
- {
- bg::distance(geometry1, geometry2, strategy);
- }
- catch(bg::empty_input_exception const& )
- {
- return;
- }
- BOOST_CHECK_MESSAGE(false, "A empty_input_exception should have been thrown" );
-
- try
- {
- bg::distance(geometry2, geometry1, strategy);
- }
- catch(bg::empty_input_exception const& )
- {
- return;
- }
- BOOST_CHECK_MESSAGE(false, "A empty_input_exception should have been thrown" );
-}
-
-#endif // BOOST_GEOMETRY_TEST_DISTANCE_COMMON_HPP