1 // Boost.Geometry (aka GGL, Generic Geometry Library)
4 // Copyright (c) 2014, Oracle and/or its affiliates.
6 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
8 // Licensed under the Boost Software License version 1.0.
9 // http://www.boost.org/users/license.html
11 #ifndef BOOST_TEST_MODULE
12 #define BOOST_TEST_MODULE test_distance_default_result
18 #include <boost/test/included/unit_test.hpp>
20 #include <boost/mpl/assert.hpp>
21 #include <boost/mpl/if.hpp>
22 #include <boost/type_traits/is_same.hpp>
24 #include <boost/geometry/util/calculation_type.hpp>
26 #include <boost/geometry/geometries/point.hpp>
27 #include <boost/geometry/geometries/segment.hpp>
28 #include <boost/geometry/geometries/box.hpp>
30 #include <boost/geometry/strategies/strategies.hpp>
31 #include <boost/geometry/strategies/default_distance_result.hpp>
32 #include <boost/geometry/strategies/default_comparable_distance_result.hpp>
34 namespace bg
= ::boost::geometry
;
37 template <typename DefaultResult
, typename ExpectedResult
>
38 struct assert_equal_types
42 static const bool are_same
=
43 boost::is_same
<DefaultResult
, ExpectedResult
>::type::value
;
45 BOOST_MPL_ASSERT_MSG((are_same
),
46 WRONG_DEFAULT_DISTANCE_RESULT
,
47 (types
<DefaultResult
, ExpectedResult
>));
51 //=========================================================================
57 typename ExpectedResult
,
58 typename ExpectedComparableResult
60 inline void test_distance_result()
62 typedef typename
bg::default_distance_result
67 typedef typename
bg::default_distance_result
72 typedef typename
bg::default_comparable_distance_result
75 >::type comparable_result12
;
77 typedef typename
bg::default_comparable_distance_result
80 >::type comparable_result21
;
82 assert_equal_types
<result12
, ExpectedResult
>();
83 assert_equal_types
<result21
, ExpectedResult
>();
84 assert_equal_types
<comparable_result12
, ExpectedComparableResult
>();
85 assert_equal_types
<comparable_result21
, ExpectedComparableResult
>();
88 //=========================================================================
92 typename CoordinateType1
,
93 typename CoordinateType2
,
94 std::size_t Dimension
,
95 typename CoordinateSystem
,
96 typename ExpectedResult
,
97 typename ExpectedComparableResult
= ExpectedResult
99 struct test_distance_result_segment
101 test_distance_result_segment()
103 typedef typename
bg::model::point
105 CoordinateType1
, Dimension
, CoordinateSystem
108 typedef typename
bg::model::point
110 CoordinateType2
, Dimension
, CoordinateSystem
113 typedef typename
bg::model::segment
<point1
> segment1
;
114 typedef typename
bg::model::segment
<point2
> segment2
;
118 point1
, point2
, ExpectedResult
, ExpectedComparableResult
123 point1
, segment2
, ExpectedResult
, ExpectedComparableResult
128 point2
, segment1
, ExpectedResult
, ExpectedComparableResult
133 //=========================================================================
137 typename CoordinateType1
,
138 typename CoordinateType2
,
139 std::size_t Dimension
,
140 typename ExpectedResult
,
141 typename ExpectedComparableResult
= ExpectedResult
143 struct test_distance_result_box
145 test_distance_result_box()
147 typedef typename
bg::model::point
149 CoordinateType1
, Dimension
, bg::cs::cartesian
152 typedef typename
bg::model::point
154 CoordinateType2
, Dimension
, bg::cs::cartesian
157 typedef typename
bg::model::box
<point1
> box1
;
158 typedef typename
bg::model::box
<point2
> box2
;
162 point1
, box2
, ExpectedResult
, ExpectedComparableResult
167 point2
, box1
, ExpectedResult
, ExpectedComparableResult
172 box1
, box2
, ExpectedResult
, ExpectedComparableResult
177 //=========================================================================
179 template <std::size_t D
, typename CoordinateSystem
>
180 inline void test_segment_all()
182 typedef typename
boost::mpl::if_
184 typename
boost::is_same
<CoordinateSystem
, bg::cs::cartesian
>::type
,
187 >::type float_return_type
;
189 test_distance_result_segment
<short, short, D
, CoordinateSystem
, double>();
190 test_distance_result_segment
<int, int, D
, CoordinateSystem
, double>();
191 test_distance_result_segment
<int, long, D
, CoordinateSystem
, double>();
192 test_distance_result_segment
<long, long, D
, CoordinateSystem
, double>();
194 test_distance_result_segment
<int, float, D
, CoordinateSystem
, float_return_type
>();
195 test_distance_result_segment
<float, float, D
, CoordinateSystem
, float_return_type
>();
197 test_distance_result_segment
<int, double, D
, CoordinateSystem
, double>();
198 test_distance_result_segment
<double, int, D
, CoordinateSystem
, double>();
199 test_distance_result_segment
<float, double, D
, CoordinateSystem
, double>();
200 test_distance_result_segment
<double, float, D
, CoordinateSystem
, double>();
201 test_distance_result_segment
<double, double, D
, CoordinateSystem
, double>();
204 //=========================================================================
206 template <std::size_t D
>
207 inline void test_box_all()
209 typedef bg::util::detail::default_integral::type default_integral
;
211 test_distance_result_box
<short, short, D
, double, default_integral
>();
212 test_distance_result_box
<int, int, D
, double, default_integral
>();
213 test_distance_result_box
<int, long, D
, double, default_integral
>();
214 test_distance_result_box
<long, long, D
, double, default_integral
>();
216 test_distance_result_box
<int, float, D
, double>();
217 test_distance_result_box
<float, float, D
, double>();
219 test_distance_result_box
<int, double, D
, double>();
220 test_distance_result_box
<double, int, D
, double>();
221 test_distance_result_box
<float, double, D
, double>();
222 test_distance_result_box
<double, float, D
, double>();
223 test_distance_result_box
<double, double, D
, double>();
226 //=========================================================================
228 BOOST_AUTO_TEST_CASE( test_point_point_or_point_segment
)
230 test_segment_all
<2, bg::cs::cartesian
>();
231 test_segment_all
<3, bg::cs::cartesian
>();
232 test_segment_all
<4, bg::cs::cartesian
>();
233 test_segment_all
<2, bg::cs::spherical_equatorial
<bg::degree
> >();
236 BOOST_AUTO_TEST_CASE( test_point_box_or_box
)