1 // Boost.Geometry (aka GGL, Generic Geometry Library)
4 // Copyright (c) 2014-2021, Oracle and/or its affiliates.
5 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
6 // Contributed and/or modified by Adam Wulkiewicz, 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/geometry/util/calculation_type.hpp>
22 #include <boost/geometry/geometries/point.hpp>
23 #include <boost/geometry/geometries/segment.hpp>
24 #include <boost/geometry/geometries/box.hpp>
26 #include <boost/geometry/strategies/strategies.hpp>
27 #include <boost/geometry/strategies/default_distance_result.hpp>
28 #include <boost/geometry/strategies/default_comparable_distance_result.hpp>
30 namespace bg
= ::boost::geometry
;
33 template <typename DefaultResult
, typename ExpectedResult
>
34 inline void assert_equal_types()
36 BOOST_GEOMETRY_STATIC_ASSERT(
37 (std::is_same
<DefaultResult
, ExpectedResult
>::value
),
38 "Wrong default distance result",
39 DefaultResult
, ExpectedResult
);
42 //=========================================================================
48 typename ExpectedResult
,
49 typename ExpectedComparableResult
51 inline void test_distance_result()
53 typedef typename
bg::default_distance_result
58 typedef typename
bg::default_distance_result
63 typedef typename
bg::default_comparable_distance_result
66 >::type comparable_result12
;
68 typedef typename
bg::default_comparable_distance_result
71 >::type comparable_result21
;
73 assert_equal_types
<result12
, ExpectedResult
>();
74 assert_equal_types
<result21
, ExpectedResult
>();
75 assert_equal_types
<comparable_result12
, ExpectedComparableResult
>();
76 assert_equal_types
<comparable_result21
, ExpectedComparableResult
>();
79 //=========================================================================
83 typename CoordinateType1
,
84 typename CoordinateType2
,
85 std::size_t Dimension
,
86 typename CoordinateSystem
,
87 typename ExpectedResult
,
88 typename ExpectedComparableResult
= ExpectedResult
90 struct test_distance_result_segment
92 test_distance_result_segment()
94 typedef typename
bg::model::point
96 CoordinateType1
, Dimension
, CoordinateSystem
99 typedef typename
bg::model::point
101 CoordinateType2
, Dimension
, CoordinateSystem
104 typedef typename
bg::model::segment
<point1
> segment1
;
105 typedef typename
bg::model::segment
<point2
> segment2
;
109 point1
, point2
, ExpectedResult
, ExpectedComparableResult
114 point1
, segment2
, ExpectedResult
, ExpectedComparableResult
119 point2
, segment1
, ExpectedResult
, ExpectedComparableResult
124 //=========================================================================
128 typename CoordinateType1
,
129 typename CoordinateType2
,
130 std::size_t Dimension
,
131 typename ExpectedResult
,
132 typename ExpectedComparableResult
= ExpectedResult
134 struct test_distance_result_box
136 test_distance_result_box()
138 typedef typename
bg::model::point
140 CoordinateType1
, Dimension
, bg::cs::cartesian
143 typedef typename
bg::model::point
145 CoordinateType2
, Dimension
, bg::cs::cartesian
148 typedef typename
bg::model::box
<point1
> box1
;
149 typedef typename
bg::model::box
<point2
> box2
;
153 point1
, box2
, ExpectedResult
, ExpectedComparableResult
158 point2
, box1
, ExpectedResult
, ExpectedComparableResult
163 box1
, box2
, ExpectedResult
, ExpectedComparableResult
168 //=========================================================================
170 template <std::size_t D
, typename CoordinateSystem
>
171 inline void test_segment_all()
173 using fp_return_type
= std::conditional_t
175 std::is_same
<CoordinateSystem
, bg::cs::cartesian
>::value
,
180 test_distance_result_segment
<short, short, D
, CoordinateSystem
, double>();
181 test_distance_result_segment
<int, int, D
, CoordinateSystem
, double>();
182 test_distance_result_segment
<int, long, D
, CoordinateSystem
, double>();
183 test_distance_result_segment
<long, long, D
, CoordinateSystem
, double>();
185 test_distance_result_segment
<int, float, D
, CoordinateSystem
, fp_return_type
>();
186 test_distance_result_segment
<float, float, D
, CoordinateSystem
, fp_return_type
>();
188 test_distance_result_segment
<int, double, D
, CoordinateSystem
, double>();
189 test_distance_result_segment
<double, int, D
, CoordinateSystem
, double>();
190 test_distance_result_segment
<float, double, D
, CoordinateSystem
, double>();
191 test_distance_result_segment
<double, float, D
, CoordinateSystem
, double>();
192 test_distance_result_segment
<double, double, D
, CoordinateSystem
, double>();
195 //=========================================================================
197 template <std::size_t D
>
198 inline void test_box_all()
200 typedef bg::util::detail::default_integral::type default_integral
;
202 test_distance_result_box
<short, short, D
, double, default_integral
>();
203 test_distance_result_box
<int, int, D
, double, default_integral
>();
204 test_distance_result_box
<int, long, D
, double, default_integral
>();
205 test_distance_result_box
<long, long, D
, double, default_integral
>();
207 test_distance_result_box
<int, float, D
, double>();
208 test_distance_result_box
<float, float, D
, double>();
210 test_distance_result_box
<int, double, D
, double>();
211 test_distance_result_box
<double, int, D
, double>();
212 test_distance_result_box
<float, double, D
, double>();
213 test_distance_result_box
<double, float, D
, double>();
214 test_distance_result_box
<double, double, D
, double>();
217 //=========================================================================
219 BOOST_AUTO_TEST_CASE( test_point_point_or_point_segment
)
221 test_segment_all
<2, bg::cs::cartesian
>();
222 test_segment_all
<3, bg::cs::cartesian
>();
223 test_segment_all
<4, bg::cs::cartesian
>();
224 test_segment_all
<2, bg::cs::spherical_equatorial
<bg::degree
> >();
227 BOOST_AUTO_TEST_CASE( test_point_box_or_box
)