]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/geometry/test/strategies/distance_default_result.cpp
bump version to 18.2.4-pve3
[ceph.git] / ceph / src / boost / libs / geometry / test / strategies / distance_default_result.cpp
CommitLineData
7c673cae
FG
1// Boost.Geometry (aka GGL, Generic Geometry Library)
2// Unit Test
3
1e59de90 4// Copyright (c) 2014-2021, Oracle and/or its affiliates.
7c673cae 5// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
1e59de90 6// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
7c673cae
FG
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
7c673cae
FG
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
7c673cae
FG
30namespace bg = ::boost::geometry;
31
32
33template <typename DefaultResult, typename ExpectedResult>
1e59de90 34inline void assert_equal_types()
7c673cae 35{
1e59de90
TL
36 BOOST_GEOMETRY_STATIC_ASSERT(
37 (std::is_same<DefaultResult, ExpectedResult>::value),
38 "Wrong default distance result",
39 DefaultResult, ExpectedResult);
7c673cae
FG
40};
41
42//=========================================================================
43
44template
45<
46 typename Geometry1,
47 typename Geometry2,
48 typename ExpectedResult,
49 typename ExpectedComparableResult
50>
51inline 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
81template
82<
83 typename CoordinateType1,
84 typename CoordinateType2,
85 std::size_t Dimension,
86 typename CoordinateSystem,
87 typename ExpectedResult,
88 typename ExpectedComparableResult = ExpectedResult
89>
90struct 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
126template
127<
128 typename CoordinateType1,
129 typename CoordinateType2,
130 std::size_t Dimension,
131 typename ExpectedResult,
132 typename ExpectedComparableResult = ExpectedResult
133>
134struct 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
170template <std::size_t D, typename CoordinateSystem>
171inline void test_segment_all()
172{
1e59de90 173 using fp_return_type = std::conditional_t
7c673cae 174 <
1e59de90 175 std::is_same<CoordinateSystem, bg::cs::cartesian>::value,
7c673cae
FG
176 double,
177 float
1e59de90 178 >;
7c673cae
FG
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
1e59de90
TL
185 test_distance_result_segment<int, float, D, CoordinateSystem, fp_return_type>();
186 test_distance_result_segment<float, float, D, CoordinateSystem, fp_return_type>();
7c673cae
FG
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>();
7c673cae
FG
193}
194
195//=========================================================================
196
197template <std::size_t D>
198inline void test_box_all()
199{
7c673cae
FG
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>();
7c673cae
FG
215}
216
217//=========================================================================
218
219BOOST_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
227BOOST_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}