]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/geometry/test/strategies/segment_intersection_geo.hpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / libs / geometry / test / strategies / segment_intersection_geo.hpp
CommitLineData
b32b8144
FG
1// Boost.Geometry
2// Unit Test
3
11fdf7f2
TL
4// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
5
b32b8144
FG
6// Copyright (c) 2016, Oracle and/or its affiliates.
7// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
8
9// Use, modification and distribution is subject to the Boost Software License,
10// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
11// http://www.boost.org/LICENSE_1_0.txt)
12
13#ifndef BOOST_GEOMETRY_TEST_STRATEGIES_SEGMENT_INTERSECTION_GEO_HPP
14#define BOOST_GEOMETRY_TEST_STRATEGIES_SEGMENT_INTERSECTION_GEO_HPP
15
16
17#include "segment_intersection_sph.hpp"
18
19#include <boost/geometry/strategies/geographic/intersection.hpp>
20#include <boost/geometry/strategies/geographic/intersection_elliptic.hpp>
21
22
23template <typename S, typename P>
24void test_default_strategy(std::string const& s1_wkt, std::string const& s2_wkt,
25 char m, std::size_t expected_count,
26 std::string const& ip0_wkt = "", std::string const& ip1_wkt = "",
27 int opposite_id = -1)
28{
29 typename bg::strategy::intersection::services::default_strategy
30 <
31 bg::geographic_tag
32 >::type strategy;
33
34 test_strategy<S, S, P>(s1_wkt, s2_wkt, strategy, m, expected_count, ip0_wkt, ip1_wkt, opposite_id);
35}
36
37template <typename S, typename P>
38void test_great_elliptic(std::string const& s1_wkt, std::string const& s2_wkt,
39 char m, std::size_t expected_count,
40 std::string const& ip0_wkt = "", std::string const& ip1_wkt = "",
41 int opposite_id = -1)
42{
43 bg::strategy::intersection::great_elliptic_segments<> strategy;
44
45 test_strategy<S, S, P>(s1_wkt, s2_wkt, strategy, m, expected_count, ip0_wkt, ip1_wkt, opposite_id);
46}
47/*
48template <typename S, typename P>
49void test_experimental_elliptic(std::string const& s1_wkt, std::string const& s2_wkt,
50 char m, std::size_t expected_count,
51 std::string const& ip0_wkt = "", std::string const& ip1_wkt = "",
52 int opposite_id = -1)
53{
54 bg::strategy::intersection::experimental_elliptic_segments<> strategy;
55
56 test_strategy<S, S, P>(s1_wkt, s2_wkt, strategy, m, expected_count, ip0_wkt, ip1_wkt, opposite_id);
57}
58*/
59template <typename S, typename P>
60void test_geodesic_vincenty(std::string const& s1_wkt, std::string const& s2_wkt,
61 char m, std::size_t expected_count,
62 std::string const& ip0_wkt = "", std::string const& ip1_wkt = "",
63 int opposite_id = -1)
64{
65 bg::strategy::intersection::geographic_segments<bg::strategy::vincenty, 4> strategy;
66
67 test_strategy<S, S, P>(s1_wkt, s2_wkt, strategy, m, expected_count, ip0_wkt, ip1_wkt, opposite_id);
68}
69
70template <typename S, typename P>
71void test_geodesic_thomas(std::string const& s1_wkt, std::string const& s2_wkt,
72 char m, std::size_t expected_count,
73 std::string const& ip0_wkt = "", std::string const& ip1_wkt = "",
74 int opposite_id = -1)
75{
76 bg::strategy::intersection::geographic_segments<bg::strategy::thomas, 2> strategy;
77
78 test_strategy<S, S, P>(s1_wkt, s2_wkt, strategy, m, expected_count, ip0_wkt, ip1_wkt, opposite_id);
79}
80
81template <typename S, typename P>
82void test_geodesic_andoyer(std::string const& s1_wkt, std::string const& s2_wkt,
83 char m, std::size_t expected_count,
84 std::string const& ip0_wkt = "", std::string const& ip1_wkt = "",
85 int opposite_id = -1)
86{
87 bg::strategy::intersection::geographic_segments<bg::strategy::andoyer, 1> strategy;
88
89 test_strategy<S, S, P>(s1_wkt, s2_wkt, strategy, m, expected_count, ip0_wkt, ip1_wkt, opposite_id);
90}
91
92
93struct strategy_base
94{
95 strategy_base(char m_)
96 : m(m_), expected_count(0), opposite(-1)
97 {}
98 strategy_base(char m_, std::string const& wkt1_)
99 : m(m_), expected_count(1), wkt1(wkt1_), opposite(-1)
100 {}
101 strategy_base(char m_, std::string const& wkt1_, std::string const& wkt2_, bool opposite_)
11fdf7f2 102 : m(m_), expected_count(1), wkt1(wkt1_), wkt2(wkt2_), opposite(opposite_ ? 1 : 0)
b32b8144
FG
103 {}
104
105 char m;
106 std::size_t expected_count;
107 std::string wkt1, wkt2;
108 int opposite;
109};
110struct strategy_default : strategy_base
111{
112 strategy_default(char m)
113 : strategy_base(m)
114 {}
115 strategy_default(char m, std::string const& wkt1)
116 : strategy_base(m, wkt1)
117 {}
118 strategy_default(char m, std::string const& wkt1, std::string const& wkt2, bool opposite)
119 : strategy_base(m, wkt1, wkt2, opposite)
120 {}
121};
122struct geodesic_vincenty : strategy_base
123{
124 geodesic_vincenty(char m)
125 : strategy_base(m)
126 {}
127 geodesic_vincenty(char m, std::string const& wkt1)
128 : strategy_base(m, wkt1)
129 {}
130 geodesic_vincenty(char m, std::string const& wkt1, std::string const& wkt2, bool opposite)
131 : strategy_base(m, wkt1, wkt2, opposite)
132 {}
133};
134struct geodesic_thomas : strategy_base
135{
136 geodesic_thomas(char m)
137 : strategy_base(m)
138 {}
139 geodesic_thomas(char m, std::string const& wkt1)
140 : strategy_base(m, wkt1)
141 {}
142 geodesic_thomas(char m, std::string const& wkt1, std::string const& wkt2, bool opposite)
143 : strategy_base(m, wkt1, wkt2, opposite)
144 {}
145};
146struct geodesic_andoyer : strategy_base
147{
148 geodesic_andoyer(char m)
149 : strategy_base(m)
150 {}
151 geodesic_andoyer(char m, std::string const& wkt1)
152 : strategy_base(m, wkt1)
153 {}
154 geodesic_andoyer(char m, std::string const& wkt1, std::string const& wkt2, bool opposite)
155 : strategy_base(m, wkt1, wkt2, opposite)
156 {}
157};
158struct great_elliptic : strategy_base
159{
160 great_elliptic(char m)
161 : strategy_base(m)
162 {}
163 great_elliptic(char m, std::string const& wkt1)
164 : strategy_base(m, wkt1)
165 {}
166 great_elliptic(char m, std::string const& wkt1, std::string const& wkt2, bool opposite)
167 : strategy_base(m, wkt1, wkt2, opposite)
168 {}
169};
170
171
172template <typename S, typename P>
173void test_strategy(std::string const& s1_wkt, std::string const& s2_wkt,
174 strategy_default const& s)
175{
176 test_default_strategy<S, P>(s1_wkt, s2_wkt, s.m, s.expected_count, s.wkt1, s.wkt2);
177}
178
179template <typename S, typename P>
180void test_strategy(std::string const& s1_wkt, std::string const& s2_wkt,
181 great_elliptic const& s)
182{
183 test_great_elliptic<S, P>(s1_wkt, s2_wkt, s.m, s.expected_count, s.wkt1, s.wkt2);
184}
185
186template <typename S, typename P>
187void test_strategy(std::string const& s1_wkt, std::string const& s2_wkt,
188 geodesic_vincenty const& s)
189{
190 test_geodesic_vincenty<S, P>(s1_wkt, s2_wkt, s.m, s.expected_count, s.wkt1, s.wkt2);
191}
192
193template <typename S, typename P>
194void test_strategy(std::string const& s1_wkt, std::string const& s2_wkt,
195 geodesic_thomas const& s)
196{
197 test_geodesic_thomas<S, P>(s1_wkt, s2_wkt, s.m, s.expected_count, s.wkt1, s.wkt2);
198}
199
200template <typename S, typename P>
201void test_strategy(std::string const& s1_wkt, std::string const& s2_wkt,
202 geodesic_andoyer const& s)
203{
204 test_geodesic_andoyer<S, P>(s1_wkt, s2_wkt, s.m, s.expected_count, s.wkt1, s.wkt2);
205}
206
207
208template <typename S, typename P, typename SR1>
209void test_strategies(std::string const& s1_wkt, std::string const& s2_wkt,
210 SR1 const& sr1)
211{
212 test_strategy<S, P>(s1_wkt, s2_wkt, sr1);
213}
214template <typename S, typename P, typename SR1, typename SR2>
215void test_strategies(std::string const& s1_wkt, std::string const& s2_wkt,
216 SR1 const& sr1, SR2 const& sr2)
217{
218 test_strategy<S, P>(s1_wkt, s2_wkt, sr1);
219 test_strategy<S, P>(s1_wkt, s2_wkt, sr2);
220}
221template <typename S, typename P, typename SR1, typename SR2, typename SR3>
222void test_strategies(std::string const& s1_wkt, std::string const& s2_wkt,
223 SR1 const& sr1, SR2 const& sr2, SR3 const& sr3)
224{
225 test_strategy<S, P>(s1_wkt, s2_wkt, sr1);
226 test_strategy<S, P>(s1_wkt, s2_wkt, sr2);
227 test_strategy<S, P>(s1_wkt, s2_wkt, sr3);
228}
229template <typename S, typename P, typename SR1, typename SR2, typename SR3, typename SR4>
230void test_strategies(std::string const& s1_wkt, std::string const& s2_wkt,
231 SR1 const& sr1, SR2 const& sr2, SR3 const& sr3, SR4 const& sr4)
232{
233 test_strategy<S, P>(s1_wkt, s2_wkt, sr1);
234 test_strategy<S, P>(s1_wkt, s2_wkt, sr2);
235 test_strategy<S, P>(s1_wkt, s2_wkt, sr3);
236 test_strategy<S, P>(s1_wkt, s2_wkt, sr4);
237}
238
239
240template <typename S, typename P>
241void test_all_strategies(std::string const& s1_wkt, std::string const& s2_wkt,
242 char m, std::string const& ip0_wkt = "")
243{
244 std::size_t expected_count = ip0_wkt.empty() ? 0 : 1;
245
246 test_default_strategy<S, P>(s1_wkt, s2_wkt, m, expected_count, ip0_wkt);
247 test_great_elliptic<S, P>(s1_wkt, s2_wkt, m, expected_count, ip0_wkt);
248 //test_experimental_elliptic<S, P>(s1_wkt, s2_wkt, m, expected_count, ip0_wkt);
249 test_geodesic_vincenty<S, P>(s1_wkt, s2_wkt, m, expected_count, ip0_wkt);
250 test_geodesic_thomas<S, P>(s1_wkt, s2_wkt, m, expected_count, ip0_wkt);
251 test_geodesic_andoyer<S, P>(s1_wkt, s2_wkt, m, expected_count, ip0_wkt);
252}
253
254template <typename S, typename P>
255void test_all_strategies(std::string const& s1_wkt, std::string const& s2_wkt,
256 char m,
257 std::string const& ip0_wkt, std::string const& ip1_wkt,
258 bool opposite)
259{
260 int opposite_id = opposite ? 1 : 0;
261
262 test_default_strategy<S, P>(s1_wkt, s2_wkt, m, 2, ip0_wkt, ip1_wkt, opposite_id);
263 test_great_elliptic<S, P>(s1_wkt, s2_wkt, m, 2, ip0_wkt, ip1_wkt, opposite_id);
264 //test_experimental_elliptic<S, P>(s1_wkt, s2_wkt, m, 2, ip0_wkt, ip1_wkt, opposite_id);
265 test_geodesic_vincenty<S, P>(s1_wkt, s2_wkt, m, 2, ip0_wkt, ip1_wkt, opposite_id);
266 test_geodesic_thomas<S, P>(s1_wkt, s2_wkt, m, 2, ip0_wkt, ip1_wkt, opposite_id);
267 test_geodesic_andoyer<S, P>(s1_wkt, s2_wkt, m, 2, ip0_wkt, ip1_wkt, opposite_id);
268}
269
270#endif // BOOST_GEOMETRY_TEST_STRATEGIES_SEGMENT_INTERSECTION_GEO_HPP