]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/geometry/test/strategies/distance_default_result.cpp
bump version to 18.2.2-pve1
[ceph.git] / ceph / src / boost / libs / geometry / test / strategies / distance_default_result.cpp
1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2 // Unit Test
3
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
7
8 // Licensed under the Boost Software License version 1.0.
9 // http://www.boost.org/users/license.html
10
11 #ifndef BOOST_TEST_MODULE
12 #define BOOST_TEST_MODULE test_distance_default_result
13 #endif
14
15 #include <cstddef>
16 #include <iostream>
17
18 #include <boost/test/included/unit_test.hpp>
19
20 #include <boost/geometry/util/calculation_type.hpp>
21
22 #include <boost/geometry/geometries/point.hpp>
23 #include <boost/geometry/geometries/segment.hpp>
24 #include <boost/geometry/geometries/box.hpp>
25
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>
29
30 namespace bg = ::boost::geometry;
31
32
33 template <typename DefaultResult, typename ExpectedResult>
34 inline void assert_equal_types()
35 {
36 BOOST_GEOMETRY_STATIC_ASSERT(
37 (std::is_same<DefaultResult, ExpectedResult>::value),
38 "Wrong default distance result",
39 DefaultResult, ExpectedResult);
40 };
41
42 //=========================================================================
43
44 template
45 <
46 typename Geometry1,
47 typename Geometry2,
48 typename ExpectedResult,
49 typename ExpectedComparableResult
50 >
51 inline void test_distance_result()
52 {
53 typedef typename bg::default_distance_result
54 <
55 Geometry1, Geometry2
56 >::type result12;
57
58 typedef typename bg::default_distance_result
59 <
60 Geometry2, Geometry1
61 >::type result21;
62
63 typedef typename bg::default_comparable_distance_result
64 <
65 Geometry1, Geometry2
66 >::type comparable_result12;
67
68 typedef typename bg::default_comparable_distance_result
69 <
70 Geometry2, Geometry1
71 >::type comparable_result21;
72
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>();
77 }
78
79 //=========================================================================
80
81 template
82 <
83 typename CoordinateType1,
84 typename CoordinateType2,
85 std::size_t Dimension,
86 typename CoordinateSystem,
87 typename ExpectedResult,
88 typename ExpectedComparableResult = ExpectedResult
89 >
90 struct test_distance_result_segment
91 {
92 test_distance_result_segment()
93 {
94 typedef typename bg::model::point
95 <
96 CoordinateType1, Dimension, CoordinateSystem
97 > point1;
98
99 typedef typename bg::model::point
100 <
101 CoordinateType2, Dimension, CoordinateSystem
102 > point2;
103
104 typedef typename bg::model::segment<point1> segment1;
105 typedef typename bg::model::segment<point2> segment2;
106
107 test_distance_result
108 <
109 point1, point2, ExpectedResult, ExpectedComparableResult
110 >();
111
112 test_distance_result
113 <
114 point1, segment2, ExpectedResult, ExpectedComparableResult
115 >();
116
117 test_distance_result
118 <
119 point2, segment1, ExpectedResult, ExpectedComparableResult
120 >();
121 }
122 };
123
124 //=========================================================================
125
126 template
127 <
128 typename CoordinateType1,
129 typename CoordinateType2,
130 std::size_t Dimension,
131 typename ExpectedResult,
132 typename ExpectedComparableResult = ExpectedResult
133 >
134 struct test_distance_result_box
135 {
136 test_distance_result_box()
137 {
138 typedef typename bg::model::point
139 <
140 CoordinateType1, Dimension, bg::cs::cartesian
141 > point1;
142
143 typedef typename bg::model::point
144 <
145 CoordinateType2, Dimension, bg::cs::cartesian
146 > point2;
147
148 typedef typename bg::model::box<point1> box1;
149 typedef typename bg::model::box<point2> box2;
150
151 test_distance_result
152 <
153 point1, box2, ExpectedResult, ExpectedComparableResult
154 >();
155
156 test_distance_result
157 <
158 point2, box1, ExpectedResult, ExpectedComparableResult
159 >();
160
161 test_distance_result
162 <
163 box1, box2, ExpectedResult, ExpectedComparableResult
164 >();
165 }
166 };
167
168 //=========================================================================
169
170 template <std::size_t D, typename CoordinateSystem>
171 inline void test_segment_all()
172 {
173 using fp_return_type = std::conditional_t
174 <
175 std::is_same<CoordinateSystem, bg::cs::cartesian>::value,
176 double,
177 float
178 >;
179
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>();
184
185 test_distance_result_segment<int, float, D, CoordinateSystem, fp_return_type>();
186 test_distance_result_segment<float, float, D, CoordinateSystem, fp_return_type>();
187
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>();
193 }
194
195 //=========================================================================
196
197 template <std::size_t D>
198 inline void test_box_all()
199 {
200 typedef bg::util::detail::default_integral::type default_integral;
201
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>();
206
207 test_distance_result_box<int, float, D, double>();
208 test_distance_result_box<float, float, D, double>();
209
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>();
215 }
216
217 //=========================================================================
218
219 BOOST_AUTO_TEST_CASE( test_point_point_or_point_segment )
220 {
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> >();
225 }
226
227 BOOST_AUTO_TEST_CASE( test_point_box_or_box )
228 {
229 test_box_all<2>();
230 test_box_all<3>();
231 test_box_all<4>();
232 }