]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/geometry/test/algorithms/set_operations/union/union_linear_linear.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / geometry / test / algorithms / set_operations / union / union_linear_linear.cpp
1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2
3 // Copyright (c) 2014-2015, Oracle and/or its affiliates.
4
5 // Licensed under the Boost Software License version 1.0.
6 // http://www.boost.org/users/license.html
7
8 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
9
10 #include <iostream>
11
12 #ifndef BOOST_TEST_MODULE
13 #define BOOST_TEST_MODULE test_union_linear_linear
14 #endif
15
16 #ifdef BOOST_GEOMETRY_TEST_DEBUG
17 #define BOOST_GEOMETRY_DEBUG_TURNS
18 #define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
19 #endif
20
21 #include <boost/test/included/unit_test.hpp>
22
23 #include "test_union_linear_linear.hpp"
24
25 #include <boost/geometry/geometries/linestring.hpp>
26 #include <boost/geometry/geometries/multi_linestring.hpp>
27 #include <boost/geometry/algorithms/union.hpp>
28
29 typedef bg::model::point<double,2,bg::cs::cartesian> point_type;
30 typedef bg::model::segment<point_type> segment_type;
31 typedef bg::model::linestring<point_type> linestring_type;
32 typedef bg::model::multi_linestring<linestring_type> multi_linestring_type;
33
34
35
36 //===========================================================================
37 //===========================================================================
38 //===========================================================================
39
40
41 BOOST_AUTO_TEST_CASE( test_union_linestring_linestring )
42 {
43 #ifdef BOOST_GEOMETRY_TEST_DEBUG
44 std::cout << std::endl << std::endl << std::endl;
45 std::cout << "*** LINESTRING / LINESTRING UNION ***" << std::endl;
46 std::cout << std::endl;
47 #endif
48
49 typedef linestring_type L;
50 typedef multi_linestring_type ML;
51
52 typedef test_union_of_geometries<L, L, ML> tester;
53
54 tester::apply
55 (from_wkt<L>("LINESTRING(0 0,1 1,2 1,3 2)"),
56 from_wkt<L>("LINESTRING(0 2,1 1,2 1,3 0)"),
57 from_wkt<ML>("MULTILINESTRING((0 0,1 1,2 1,3 2),\
58 (0 2,1 1),(2 1,3 0))"),
59 from_wkt<ML>("MULTILINESTRING((0 2,1 1,2 1,3 0),\
60 (0 0,1 1),(2 1,3 2))"),
61 "llu00");
62
63 tester::apply
64 (from_wkt<L>("LINESTRING(0 0,5 0)"),
65 from_wkt<L>("LINESTRING(3 0,4 0)"),
66 from_wkt<ML>("MULTILINESTRING((0 0,5 0))"),
67 from_wkt<ML>("MULTILINESTRING((3 0,4 0),(0 0,3 0),(4 0,5 0))"),
68 "llu01");
69
70 tester::apply
71 (from_wkt<L>("LINESTRING(3 0,4 0)"),
72 from_wkt<L>("LINESTRING(0 0,5 0)"),
73 from_wkt<ML>("MULTILINESTRING((3 0,4 0),(0 0,3 0),(4 0,5 0))"),
74 from_wkt<ML>("MULTILINESTRING((0 0,5 0))"),
75 "llu01-1");
76
77 tester::apply
78 (from_wkt<L>("LINESTRING(0 0,4 0)"),
79 from_wkt<L>("LINESTRING(3 0,6 0)"),
80 from_wkt<ML>("MULTILINESTRING((0 0,4 0),(4 0,6 0))"),
81 from_wkt<ML>("MULTILINESTRING((3 0,6 0),(0 0,3 0))"),
82 "llu01-2");
83
84 tester::apply
85 (from_wkt<L>("LINESTRING(3 0,6 0)"),
86 from_wkt<L>("LINESTRING(0 0,4 0)"),
87 from_wkt<ML>("MULTILINESTRING((3 0,6 0),(0 0,3 0))"),
88 from_wkt<ML>("MULTILINESTRING((0 0,4 0),(4 0,6 0))"),
89 "llu01-3");
90
91 tester::apply
92 (from_wkt<L>("LINESTRING(0 0,6 0)"),
93 from_wkt<L>("LINESTRING(0 0,4 0)"),
94 from_wkt<ML>("MULTILINESTRING((0 0,6 0))"),
95 from_wkt<ML>("MULTILINESTRING((0 0,4 0),(4 0,6 0))"),
96 "llu01-4");
97
98 tester::apply
99 (from_wkt<L>("LINESTRING(0 0,20 0)"),
100 from_wkt<L>("LINESTRING(0 0,1 1,2 0,3 1,4 0,5 0,6 1,7 -1,8 0)"),
101 from_wkt<ML>("MULTILINESTRING((0 0,20 0),\
102 (0 0,1 1,2 0,3 1,4 0),\
103 (5 0,6 1,7 -1,8 0))"),
104 from_wkt<ML>("MULTILINESTRING((0 0,1 1,2 0,3 1,4 0,5 0,6 1,7 -1,8 0),\
105 (0 0,4 0),(5 0,20 0))"),
106 "llu01-6");
107
108 tester::apply
109 (from_wkt<L>("LINESTRING(-20 0,20 0)"),
110 from_wkt<L>("LINESTRING(0 0,1 1,2 0,3 1,4 0,5 0,6 1,7 -1,8 0)"),
111 from_wkt<ML>("MULTILINESTRING((-20 0,20 0),\
112 (0 0,1 1,2 0,3 1,4 0),\
113 (5 0,6 1,7 -1,8 0))"),
114 from_wkt<ML>("MULTILINESTRING((0 0,1 1,2 0,3 1,4 0,5 0,6 1,7 -1,8 0),\
115 (-20 0,4 0),(5 0,20 0))"),
116 "llu01-7");
117
118 tester::apply
119 (from_wkt<L>("LINESTRING(0 0,4 0)"),
120 from_wkt<L>("LINESTRING(2 0,4 0)"),
121 from_wkt<ML>("MULTILINESTRING((0 0,4 0))"),
122 from_wkt<ML>("MULTILINESTRING((2 0,4 0),(0 0,2 0))"),
123 "llu01-8");
124
125 tester::apply
126 (from_wkt<L>("LINESTRING(0 0,2 0)"),
127 from_wkt<L>("LINESTRING(4 0,5 0)"),
128 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(4 0,5 0))"),
129 "llu01-10");
130
131 tester::apply
132 (from_wkt<L>("LINESTRING(0 0,2 0)"),
133 from_wkt<L>("LINESTRING(2 0,5 0)"),
134 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(2 0,5 0))"),
135 "llu01-11");
136
137 tester::apply
138 (from_wkt<L>("LINESTRING(0 0,1 0,4 0)"),
139 from_wkt<L>("LINESTRING(3 0,5 0)"),
140 from_wkt<ML>("MULTILINESTRING((0 0,1 0,4 0),(4 0,5 0))"),
141 from_wkt<ML>("MULTILINESTRING((3 0,5 0),(0 0,1 0,3 0))"),
142 "llu01-11a");
143
144 tester::apply
145 (from_wkt<L>("LINESTRING(0 0,1 0,4 0)"),
146 from_wkt<L>("LINESTRING(3 0,4 0,5 0)"),
147 from_wkt<ML>("MULTILINESTRING((0 0,1 0,4 0),(4 0,5 0))"),
148 from_wkt<ML>("MULTILINESTRING((3 0,4 0,5 0),(0 0,1 0,3 0))"),
149 "llu01-11b");
150
151 tester::apply
152 (from_wkt<L>("LINESTRING(0 0,6 0)"),
153 from_wkt<L>("LINESTRING(2 0,4 0,5 0)"),
154 from_wkt<ML>("MULTILINESTRING((0 0,6 0))"),
155 from_wkt<ML>("MULTILINESTRING((2 0,4 0,5 0),(0 0,2 0),(5 0,6 0))"),
156 "llu01-12");
157
158 tester::apply
159 (from_wkt<L>("LINESTRING(0 0,1 0,5 5,10 5,15 0)"),
160 from_wkt<L>("LINESTRING(-1 6,0 5,15 5)"),
161 from_wkt<ML>("MULTILINESTRING((0 0,1 0,5 5,10 5,15 0),\
162 (-1 6,0 5,5 5),(10 5,15 5))"),
163 from_wkt<ML>("MULTILINESTRING((-1 6,0 5,15 5),\
164 (0 0,1 0,5 5),(10 5,15 0))"),
165 "llu02");
166
167 tester::apply
168 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0)"),
169 from_wkt<L>("LINESTRING(-1 0,30 0)"),
170 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,5 5,10 5,15 0,20 0),\
171 (-1 0,0 0),(1 0,15 0),(20 0,30 0))"),
172 from_wkt<ML>("MULTILINESTRING((-1 0,30 0),(-1 1,0 0),\
173 (1 0,5 5,10 5,15 0))"),
174 "llu03");
175
176 tester::apply
177 (from_wkt<L>("LINESTRING(0 0,1 0,5 5,10 5,15 0,20 0)"),
178 from_wkt<L>("LINESTRING(-1 0,30 0)"),
179 from_wkt<ML>("MULTILINESTRING((0 0,1 0,5 5,10 5,15 0,20 0),\
180 (-1 0,0 0),(1 0,15 0),(20 0,30 0))"),
181 from_wkt<ML>("MULTILINESTRING((-1 0,30 0),(1 0,5 5,10 5,15 0))"),
182 "llu04");
183
184 tester::apply
185 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,25 1)"),
186 from_wkt<L>("LINESTRING(-1 0,30 0)"),
187 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,5 5,10 5,15 0,20 0,25 1),\
188 (-1 0,0 0),(1 0,15 0),(20 0,30 0))"),
189 from_wkt<ML>("MULTILINESTRING((-1 0,30 0),(-1 1,0 0),\
190 (1 0,5 5,10 5,15 0),(20 0,25 1))"),
191 "llu05");
192
193 tester::apply
194 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,30 0)"),
195 from_wkt<L>("LINESTRING(-1 0,30 0)"),
196 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,5 5,10 5,15 0,20 0,30 0),\
197 (-1 0,0 0),(1 0,15 0))"),
198 from_wkt<ML>("MULTILINESTRING((-1 0,30 0),(-1 1,0 0),\
199 (1 0,5 5,10 5,15 0))"),
200 "llu05-1");
201
202 tester::apply
203 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0)"),
204 from_wkt<L>("LINESTRING(-1 0,30 0)"),
205 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0),\
206 (-1 0,0 0),(1 0,15 0))"),
207 from_wkt<ML>("MULTILINESTRING((-1 0,30 0),(-1 1,0 0),\
208 (1 0,5 5,10 5,15 0),(30 0,31 0))"),
209 "llu06");
210
211 tester::apply
212 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0)"),
213 from_wkt<L>("LINESTRING(-1 0,25 0,30 0)"),
214 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0),\
215 (-1 0,0 0),(1 0,15 0))"),
216 from_wkt<ML>("MULTILINESTRING((-1 0,25 0,30 0),(-1 1,0 0),\
217 (1 0,5 5,10 5,15 0),(30 0,31 0))"),
218 "llu07");
219
220 tester::apply
221 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0)"),
222 from_wkt<L>("LINESTRING(-1 0,19 0,30 0)"),
223 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0),\
224 (-1 0,0 0),(1 0,15 0))"),
225 from_wkt<ML>("MULTILINESTRING((-1 0,19 0,30 0),(-1 1,0 0),\
226 (1 0,5 5,10 5,15 0),(30 0,31 0))"),
227 "llu08");
228
229 tester::apply
230 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,30 0,31 1)"),
231 from_wkt<L>("LINESTRING(-1 0,30 0)"),
232 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,5 5,10 5,15 0,20 0,\
233 30 0,31 1),(-1 0,0 0),(1 0,15 0))"),
234 from_wkt<ML>("MULTILINESTRING((-1 0,30 0),(-1 1,0 0),\
235 (1 0,5 5,10 5,15 0),(30 0,31 1))"),
236 "llu09");
237
238 tester::apply
239 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,30 0,31 1)"),
240 from_wkt<L>("LINESTRING(-1 -1,0 0,1 0,2 1,3 0,30 0)"),
241 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,5 5,10 5,15 0,20 0,\
242 30 0,31 1),(-1 -1,0 0),(1 0,2 1,3 0,15 0))"),
243 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,1 0,2 1,3 0,30 0),\
244 (-1 1,0 0),(1 0,5 5,10 5,15 0),(30 0,31 1))"),
245 "llu10");
246
247 tester::apply
248 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,4 0,5 5,10 5,15 0,20 0,\
249 30 0,31 1)"),
250 from_wkt<L>("LINESTRING(-1 -1,0 0,1 0,2 0,2.5 1,3 0,30 0)"),
251 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,4 0,5 5,10 5,15 0,20 0,\
252 30 0,31 1),(-1 -1,0 0),(2 0,2.5 1,3 0),(4 0,15 0))"),
253 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,1 0,2 0,2.5 1,3 0,30 0),\
254 (-1 1,0 0),(2 0,3 0),(4 0,5 5,10 5,15 0),(30 0,31 1))"),
255 "llu11");
256
257 tester::apply
258 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,4 0,5 5,10 5,15 0,31 0)"),
259 from_wkt<L>("LINESTRING(-1 -1,0 0,1 0,2 0,2.5 1,3 0,30 0)"),
260 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,1 0,4 0,5 5,10 5,15 0,31 0),\
261 (-1 -1,0 0),(2 0,2.5 1,3 0),(4 0,15 0))"),
262 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,1 0,2 0,2.5 1,3 0,30 0),\
263 (-1 1,0 0),(2 0,3 0),(4 0,5 5,10 5,15 0),(30 0,31 0))"),
264 "llu11-1");
265
266 tester::apply
267 (from_wkt<L>("LINESTRING(0 0,2 0,3 1)"),
268 from_wkt<L>("LINESTRING(0 0,2 0,3 1)"),
269 from_wkt<ML>("MULTILINESTRING((0 0,2 0,3 1))"),
270 "llu12");
271
272 tester::apply
273 (from_wkt<L>("LINESTRING(0 0,2 0,3 1)"),
274 from_wkt<L>("LINESTRING(3 1,2 0,0 0)"),
275 from_wkt<ML>("MULTILINESTRING((0 0,2 0,3 1))"),
276 from_wkt<ML>("MULTILINESTRING((3 1,2 0,0 0))"),
277 "llu12-1");
278
279 tester::apply
280 (from_wkt<L>("LINESTRING(0 0,1 0,2 1,3 5,4 0)"),
281 from_wkt<L>("LINESTRING(1 0,2 1,3 5,4 0,5 10)"),
282 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 1,3 5,4 0),(4 0,5 10))"),
283 from_wkt<ML>("MULTILINESTRING((1 0,2 1,3 5,4 0,5 10),(0 0,1 0))"),
284 "llu13");
285
286 tester::apply
287 (from_wkt<L>("LINESTRING(0 0,1 0,2 0,2.5 0,3 1)"),
288 from_wkt<L>("LINESTRING(0 0,2 0,2.5 0,3 1)"),
289 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 0,2.5 0,3 1))"),
290 from_wkt<ML>("MULTILINESTRING((0 0,2 0,2.5 0,3 1))"),
291 "llu14");
292
293 tester::apply
294 (from_wkt<L>("LINESTRING(0 0,1 0,2 1,3 5,4 0)"),
295 from_wkt<L>("LINESTRING(1 0,2 1,3 5)"),
296 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 1,3 5,4 0))"),
297 from_wkt<ML>("MULTILINESTRING((1 0,2 1,3 5),(0 0,1 0),(3 5,4 0))"),
298 "llu15");
299
300 tester::apply
301 (from_wkt<L>("LINESTRING(0 0,1 0,2 1,3 2)"),
302 from_wkt<L>("LINESTRING(0.5 0,1 0,3 2,4 5)"),
303 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 1,3 2),(3 2,4 5))"),
304 from_wkt<ML>("MULTILINESTRING((0.5 0,1 0,3 2,4 5),(0 0,0.5 0))"),
305 "llu16");
306
307 tester::apply
308 (from_wkt<L>("LINESTRING(0 0,1 0,2 1,3 2)"),
309 from_wkt<L>("LINESTRING(4 5,3 2,1 0,0.5 0)"),
310 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 1,3 2),(4 5,3 2))"),
311 from_wkt<ML>("MULTILINESTRING((4 5,3 2,1 0,0.5 0),(0 0,0.5 0))"),
312 "llu16-r");
313
314 tester::apply
315 (from_wkt<L>("LINESTRING(0 0,10 0,20 1,30 1)"),
316 from_wkt<L>("LINESTRING(1 1,2 0,3 1,20 1,25 1)"),
317 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1,30 1),(1 1,2 0,3 1,20 1))"),
318 from_wkt<ML>("MULTILINESTRING((1 1,2 0,3 1,20 1,25 1),\
319 (0 0,10 0,20 1),(25 1,30 1))"),
320 "llu17");
321
322 tester::apply
323 (from_wkt<L>("LINESTRING(0 0,10 0,20 1,21 0,30 0)"),
324 from_wkt<L>("LINESTRING(1 1,2 0,3 1,20 1,25 0)"),
325 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1,21 0,30 0),\
326 (1 1,2 0,3 1,20 1,25 0))"),
327 "llu18");
328
329 tester::apply
330 (from_wkt<L>("LINESTRING(0 0,30 0)"),
331 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 1)"),
332 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 0,20 1,4 1,4 0,5 1))"),
333 from_wkt<ML>("MULTILINESTRING((1 0,5 0,20 1,4 1,4 0,5 1),\
334 (0 0,1 0),(5 0,30 0))"),
335 "llu19");
336
337 tester::apply
338 (from_wkt<L>("LINESTRING(0 0,30 0)"),
339 from_wkt<L>("LINESTRING(5 1,4 0,4 1,20 1,5 0,1 0)"),
340 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 1,4 0,4 1,20 1,5 0))"),
341 from_wkt<ML>("MULTILINESTRING((5 1,4 0,4 1,20 1,5 0,1 0),\
342 (0 0,1 0),(5 0,30 0))"),
343 "llu19-r");
344
345 tester::apply
346 (from_wkt<L>("LINESTRING(0 0,30 0)"),
347 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0)"),
348 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 0,20 1,4 1,4 0))"),
349 from_wkt<ML>("MULTILINESTRING((1 0,5 0,20 1,4 1,4 0),(0 0,1 0),\
350 (5 0,30 0))"),
351 "llu19a");
352
353 tester::apply
354 (from_wkt<L>("LINESTRING(0 0,30 0)"),
355 from_wkt<L>("LINESTRING(4 0,4 1,20 1,5 0,1 0)"),
356 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(4 0,4 1,20 1,5 0))"),
357 from_wkt<ML>("MULTILINESTRING((4 0,4 1,20 1,5 0,1 0),(0 0,1 0),\
358 (5 0,30 0))"),
359 "llu19a-r");
360
361 tester::apply
362 (from_wkt<L>("LINESTRING(0 0,30 0)"),
363 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 0)"),
364 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 0,20 1,4 1,4 0))"),
365 from_wkt<ML>("MULTILINESTRING((1 0,5 0,20 1,4 1,4 0,5 0),\
366 (0 0,1 0),(5 0,30 0))"),
367 "llu19b");
368
369 tester::apply
370 (from_wkt<L>("LINESTRING(0 0,30 0)"),
371 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 0,6 1)"),
372 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 0,20 1,4 1,4 0),(5 0,6 1))"),
373 from_wkt<ML>("MULTILINESTRING((1 0,5 0,20 1,4 1,4 0,5 0,6 1),\
374 (0 0,1 0),(5 0,30 0))"),
375 "llu19c");
376
377 tester::apply
378 (from_wkt<L>("LINESTRING(0 0,30 0)"),
379 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,3 0)"),
380 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 0,20 1,4 1,4 0))"),
381 from_wkt<ML>("MULTILINESTRING((1 0,5 0,20 1,4 1,4 0,3 0),\
382 (0 0,1 0),(5 0,30 0))"),
383 "llu19d");
384
385 tester::apply
386 (from_wkt<L>("LINESTRING(0 0,30 0)"),
387 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,3 0,3 1)"),
388 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 0,20 1,4 1,4 0),(3 0,3 1))"),
389 from_wkt<ML>("MULTILINESTRING((1 0,5 0,20 1,4 1,4 0,3 0,3 1),\
390 (0 0,1 0),(5 0,30 0))"),
391 "llu19e");
392
393 tester::apply
394 (from_wkt<L>("LINESTRING(0 0,30 0)"),
395 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 0,5 1)"),
396 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 0,20 1,4 1,4 0),(5 0,5 1))"),
397 from_wkt<ML>("MULTILINESTRING((1 0,5 0,20 1,4 1,4 0,5 0,5 1),\
398 (0 0,1 0),(5 0,30 0))"),
399 "llu19f");
400
401 tester::apply
402 (from_wkt<L>("LINESTRING(0 0,30 0)"),
403 from_wkt<L>("LINESTRING(5 1,5 0,4 0,4 1,20 1,5 0,1 0)"),
404 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 1,5 0),\
405 (4 0,4 1,20 1,5 0))"),
406 from_wkt<ML>("MULTILINESTRING((5 1,5 0,4 0,4 1,20 1,5 0,1 0),\
407 (0 0,1 0),(5 0,30 0))"),
408 "llu19f-r");
409
410 tester::apply
411 (from_wkt<L>("LINESTRING(0 0,30 0)"),
412 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,5 0,5 1)"),
413 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 0,20 1,4 1,5 0,5 1))"),
414 from_wkt<ML>("MULTILINESTRING((1 0,5 0,20 1,4 1,5 0,5 1),\
415 (0 0,1 0),(5 0,30 0))"),
416 "llu19g");
417
418 tester::apply
419 (from_wkt<L>("LINESTRING(0 0,30 0)"),
420 from_wkt<L>("LINESTRING(5 1,5 0,4 1,20 1,5 0,1 0)"),
421 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(5 1,5 0,4 1,20 1,5 0))"),
422 from_wkt<ML>("MULTILINESTRING((5 1,5 0,4 1,20 1,5 0,1 0),\
423 (0 0,1 0),(5 0,30 0))"),
424 "llu19g-r");
425
426 tester::apply
427 (from_wkt<L>("LINESTRING(0 0,30 0,30 30,10 30,10 -10,15 0,40 0)"),
428 from_wkt<L>("LINESTRING(5 5,10 0,10 30,20 0,25 0,25 25,50 0,35 0)"),
429 from_wkt<ML>("MULTILINESTRING((0 0,30 0,30 30,10 30,10 -10,15 0,40 0),\
430 (5 5,10 0),(10 30,20 0),(25 0,25 25,50 0,40 0))"),
431 from_wkt<ML>("MULTILINESTRING((5 5,10 0,10 30,20 0,25 0,25 25,50 0,35 0),\
432 (0 0,20 0),(25 0,30 0,30 30,10 30),\
433 (10 0,10 -10,15 0,20 0),(25 0,35 0))"),
434 "llu20");
435
436 tester::apply
437 (from_wkt<L>("LINESTRING(0 0,30 0,30 30,10 30,10 -10,15 0,40 0)"),
438 from_wkt<L>("LINESTRING(5 5,10 0,10 30,20 0,25 0,25 25,50 0,15 0)"),
439 from_wkt<ML>("MULTILINESTRING((0 0,30 0,30 30,10 30,10 -10,15 0,40 0),\
440 (5 5,10 0),(10 30,20 0),(25 0,25 25,50 0,40 0))"),
441 from_wkt<ML>("MULTILINESTRING((5 5,10 0,10 30,20 0,25 0,25 25,50 0,15 0),\
442 (0 0,15 0),(30 0,30 30,10 30),(10 0,10 -10,15 0))"),
443 "llu20a");
444
445 tester::apply
446 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
447 from_wkt<L>("LINESTRING(2 2,5 -1,15 2,18 0,20 0)"),
448 from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0),\
449 (2 2,5 -1,15 2,18 0))"),
450 from_wkt<ML>("MULTILINESTRING((2 2,5 -1,15 2,18 0,20 0),\
451 (0 0,18 0),(20 0,30 0))"),
452 "llu21"
453 );
454
455 tester::apply
456 (from_wkt<L>("LINESTRING(2 2,5 -1,15 2,18 0,20 0)"),
457 from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
458 from_wkt<ML>("MULTILINESTRING((2 2,5 -1,15 2,18 0,20 0),\
459 (0 0,18 0),(20 0,30 0))"),
460 from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0),\
461 (2 2,5 -1,15 2,18 0))"),
462 "llu21a"
463 );
464
465 tester::apply
466 (from_wkt<L>("LINESTRING(-2 -2,-4 0,1 -8,-2 6,8 5,-7 -8,3 0,\
467 4 -1,-7 10,-4 10)"),
468 from_wkt<L>("LINESTRING(-5 -4,3 0,4 -1,7 -4,2 -1,-4 -1,-2 6)"),
469 from_wkt<ML>("MULTILINESTRING((-2 -2,-4 0,1 -8,-2 6,8 5,-7 -8,3 0,\
470 4 -1,-7 10,-4 10),(-5 -4,3 0),\
471 (4 -1,7 -4,2 -1,-4 -1,-2 6))"),
472 from_wkt<ML>("MULTILINESTRING((-5 -4,3 0,4 -1,7 -4,2 -1,-4 -1,-2 6),\
473 (-2 -2,-4 0,1 -8,-2 6,8 5,-7 -8,3 0),\
474 (3 0,-7 10,-4 10))"),
475 "llu22"
476 );
477 }
478
479
480
481 BOOST_AUTO_TEST_CASE( test_union_linestring_multilinestring )
482 {
483 #ifdef BOOST_GEOMETRY_TEST_DEBUG
484 std::cout << std::endl << std::endl << std::endl;
485 std::cout << "*** LINESTRING / MULTILINESTRING UNION ***"
486 << std::endl;
487 std::cout << std::endl;
488 #endif
489
490 typedef linestring_type L;
491 typedef multi_linestring_type ML;
492
493 typedef test_union_of_geometries<L, ML, ML> tester;
494
495 // disjoint linestrings
496 tester::apply
497 (from_wkt<L>("LINESTRING(0 0,10 0,20 1)"),
498 from_wkt<ML>("MULTILINESTRING((1 1,2 2,4 3),(1 1,2 2,5 3))"),
499 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 1,2 2,4 3),\
500 (1 1,2 2,5 3))"),
501 "lmlu01"
502 );
503
504 tester::apply
505 (from_wkt<L>("LINESTRING(0 0,10 0,20 1)"),
506 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,4 0))"),
507 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 1,2 0),(1 1,3 0))"),
508 "lmlu02"
509 );
510
511 tester::apply
512 (from_wkt<L>("LINESTRING(0 0,10 0,20 1)"),
513 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,5 0))"),
514 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 1,2 0),(1 1,3 0))"),
515 "lmlu03"
516 );
517
518 tester::apply
519 (from_wkt<L>("LINESTRING(0 0,10 0,20 1)"),
520 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0))"),
521 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 1,2 0))"),
522 "lmlu04"
523 );
524
525 tester::apply
526 (from_wkt<L>("LINESTRING(0 0,101 0)"),
527 from_wkt<ML>("MULTILINESTRING((-1 -1,1 0,101 0,200 -1))"),
528 from_wkt<ML>("MULTILINESTRING((0 0,101 0),(-1 -1,1 0),(101 0,200 -1))"),
529 "lmlu07"
530 );
531
532 tester::apply
533 (from_wkt<L>("LINESTRING(-1 1,0 0,101 0)"),
534 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
535 (19 -1,20 0,101 0,200 -1))"),
536 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,101 0),(-1 -1,0 0),\
537 (19 -1,20 0),(101 0,200 -1))"),
538 "lmlu07a"
539 );
540
541 tester::apply
542 (from_wkt<L>("LINESTRING(0 0,101 0)"),
543 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
544 (19 -1,20 0,101 0,200 -1))"),
545 from_wkt<ML>("MULTILINESTRING((0 0,101 0),(-1 -1,0 0),\
546 (19 -1,20 0),(101 0,200 -1))"),
547 "lmlu07b"
548 );
549
550 tester::apply
551 (from_wkt<L>("LINESTRING(0 0,101 0)"),
552 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0),\
553 (-1 -1,1 0,101 0,200 -1))"),
554 from_wkt<ML>("MULTILINESTRING((0 0,101 0),(0 1,1 1,2 0),\
555 (-1 -1,1 0),(101 0,200 -1))"),
556 "lmlu08"
557 );
558
559 tester::apply
560 (from_wkt<L>("LINESTRING(0 0,1 0,2 0.5,3 0,101 0)"),
561 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0.5),\
562 (-1 -1,1 0,101 0,200 -1))"),
563 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 0.5,3 0,101 0),\
564 (0 1,1 1,2 0.5),(-1 -1,1 0,3 0),(101 0,200 -1))"),
565 "lmlu09"
566 );
567
568 tester::apply
569 (from_wkt<L>("LINESTRING(0 0,1 0,1.5 0,2 0.5,3 0,101 0)"),
570 from_wkt<ML>("MULTILINESTRING((0 1,1 1,1 0,2 0.5),\
571 (-1 -1,1 0,101 0,200 -1))"),
572 from_wkt<ML>("MULTILINESTRING((0 0,1 0,1.5 0,2 0.5,3 0,101 0),\
573 (0 1,1 1,1 0,2 0.5),(-1 -1,1 0),(1.5 0,3 0),\
574 (101 0,200 -1))"),
575 "lmlu10"
576 );
577
578 tester::apply
579 (from_wkt<L>("LINESTRING(0 0,20 0)"),
580 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
581 (1 1,2 0,18 0,19 1),(2 1,3 0,17 0,18 1),\
582 (3 1,4 0,16 0,17 1))"),
583 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
584 (1 1,2 0),(18 0,19 1),(2 1,3 0),(17 0,18 1),\
585 (3 1,4 0),(16 0,17 1))"),
586 "lmlu12"
587 );
588
589 tester::apply
590 (from_wkt<L>("LINESTRING(0 0,20 0)"),
591 from_wkt<ML>("MULTILINESTRING((1 0,19 0,20 1),\
592 (2 0,18 0,19 1),(3 0,17 0,18 1),\
593 (4 0,16 0,17 1))"),
594 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(19 0,20 1),(18 0,19 1),\
595 (17 0,18 1),(16 0,17 1))"),
596 "lmlu13"
597 );
598
599 tester::apply
600 (from_wkt<L>("LINESTRING(0 0,20 0)"),
601 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1,19 1,18 0,2 0,\
602 1 1,2 1,3 0,17 0,18 1,17 1,16 0,4 0,3 1))"),
603 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),\
604 (19 0,20 1,19 1,18 0),(2 0,1 1,2 1,3 0),\
605 (17 0,18 1,17 1,16 0),(4 0,3 1))"),
606 "lmlu14"
607 );
608
609 tester::apply
610 (from_wkt<L>("LINESTRING(0 0,20 0)"),
611 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
612 (2 2,4 2,6 0))"),
613 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
614 (2 2,4 2,6 0))"),
615 "lmlu15"
616 );
617
618 tester::apply
619 (from_wkt<L>("LINESTRING(0 0,20 0)"),
620 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
621 (6 0,4 2,2 2))"),
622 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
623 (6 0,4 2,2 2))"),
624 "lmlu15a"
625 );
626
627 tester::apply
628 (from_wkt<L>("LINESTRING(0 0,20 0)"),
629 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
630 (2 2,4 2,5 0,6 0))"),
631 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
632 (2 2,4 2,5 0))"),
633 "lmlu16"
634 );
635
636 tester::apply
637 (from_wkt<L>("LINESTRING(0 0,20 0)"),
638 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
639 (6 0,5 0,4 2,2 2))"),
640 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
641 (5 0,4 2,2 2))"),
642 "lmlu16a"
643 );
644
645 tester::apply
646 (from_wkt<L>("LINESTRING(0 0,30 0)"),
647 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
648 (2 2,4 0,5 2,20 2,25 0))"),
649 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(0 1,1 0),(19 0,20 1),\
650 (2 2,4 0,5 2,20 2,25 0))"),
651 "lmlu17"
652 );
653
654 tester::apply
655 (from_wkt<L>("LINESTRING(0 0,30 0)"),
656 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
657 (2 2,4 0,5 2,20 2,25 0,26 2))"),
658 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(0 1,1 0),(19 0,20 1),\
659 (2 2,4 0,5 2,20 2,25 0,26 2))"),
660 "lmlu17a"
661 );
662
663 tester::apply
664 (from_wkt<L>("LINESTRING(0 0,30 0)"),
665 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
666 (2 2,5 -1,15 2,18 0))"),
667 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(0 1,1 0),(19 0,20 1),\
668 (2 2,5 -1,15 2,18 0))"),
669 "lmlu18"
670 );
671
672 tester::apply
673 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
674 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
675 (2 2,5 -1,15 2,18 0))"),
676 from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0),(0 1,1 0),\
677 (19 0,20 1),(2 2,5 -1,15 2,18 0))"),
678 "lmlu18a"
679 );
680
681 tester::apply
682 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
683 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
684 (2 2,5 -1,15 2,18 0,20 0))"),
685 from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0),(0 1,1 0),\
686 (19 0,20 1),(2 2,5 -1,15 2,18 0))"),
687 "lmlu18b"
688 );
689
690 tester::apply
691 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
692 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
693 (2 2,5 -1,15 2,25 0,26 0))"),
694 from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0),(0 1,1 0),\
695 (19 0,20 1),(2 2,5 -1,15 2,25 0))"),
696 "lmlu18c"
697 );
698
699 tester::apply
700 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
701 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
702 (2 2,5 -1,15 2,25 0,21 0))"),
703 from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0),(0 1,1 0),\
704 (19 0,20 1),(2 2,5 -1,15 2,25 0))"),
705 "lmlu18d"
706 );
707 }
708
709
710
711 BOOST_AUTO_TEST_CASE( test_union_multilinestring_linestring )
712 {
713 #ifdef BOOST_GEOMETRY_TEST_DEBUG
714 std::cout << std::endl << std::endl << std::endl;
715 std::cout << "*** MULTILINESTRING / LINESTRING UNION ***"
716 << std::endl;
717 std::cout << std::endl;
718 #endif
719
720 typedef linestring_type L;
721 typedef multi_linestring_type ML;
722
723 typedef test_union_of_geometries<ML, L, ML> tester;
724
725 // disjoint linestrings
726 tester::apply
727 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
728 from_wkt<L>("LINESTRING(1 1,2 2,4 3)"),
729 from_wkt<ML>("MULTILINESTRING((1 1,2 2,4 3),(0 0,10 0,20 1),(1 0,7 0))"),
730 "mllu01"
731 );
732
733 tester::apply
734 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
735 from_wkt<L>("LINESTRING(1 1,2 0,4 0)"),
736 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(0 0,2 0),(4 0,10 0,20 1),\
737 (1 0,2 0),(4 0,7 0))"),
738 "mllu02"
739 );
740
741 tester::apply
742 (from_wkt<ML>("MULTILINESTRING((0 0,101 0))"),
743 from_wkt<L>("LINESTRING(-1 -1,1 0,101 0,200 -1)"),
744 from_wkt<ML>("MULTILINESTRING((-1 -1,1 0,101 0,200 -1),(0 0,1 0))"),
745 "mllu03"
746 );
747
748 tester::apply
749 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
750 from_wkt<L>("LINESTRING(0 1,1 0,19 0,20 1,19 1,18 0,2 0,\
751 1 1,2 1,3 0,17 0,18 1,17 1,16 0,4 0,3 1)"),
752 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1,19 1,18 0,2 0,\
753 1 1,2 1,3 0,17 0,18 1,17 1,16 0,4 0,3 1),\
754 (0 0,1 0),(19 0,20 0))"),
755 "mllu04"
756 );
757 }
758
759
760
761
762
763
764
765 BOOST_AUTO_TEST_CASE( test_union_multilinestring_multilinestring )
766 {
767 #ifdef BOOST_GEOMETRY_TEST_DEBUG
768 std::cout << std::endl << std::endl << std::endl;
769 std::cout << "*** MULTILINESTRING / MULTILINESTRING UNION ***"
770 << std::endl;
771 std::cout << std::endl;
772 #endif
773
774 typedef multi_linestring_type ML;
775
776 typedef test_union_of_geometries<ML, ML, ML> tester;
777
778 // disjoint linestrings
779 tester::apply
780 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
781 from_wkt<ML>("MULTILINESTRING((1 1,2 2,4 3),(1 1,2 2,5 3))"),
782 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
783 (1 1,2 2,4 3),(1 1,2 2,5 3))"),
784 "mlmlu01"
785 );
786
787 tester::apply
788 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
789 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,4 0))"),
790 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
791 (1 1,2 0),(1 1,3 0))"),
792 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,4 0),\
793 (0 0,2 0),(4 0,10 0,20 1),(1 0,2 0),(4 0,7 0))"),
794 "mlmlu02"
795 );
796
797 tester::apply
798 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
799 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,5 0))"),
800 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
801 (1 1,2 0),(1 1,3 0))"),
802 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,5 0),\
803 (0 0,2 0),(5 0,10 0,20 1),(1 0,2 0),(5 0,7 0))"),
804 "mlmlu03"
805 );
806
807 tester::apply
808 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
809 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0))"),
810 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
811 (1 1,2 0))"),
812 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(0 0,2 0),\
813 (4 0,10 0,20 1),(1 0,2 0),(4 0,7 0))"),
814 "mlmlu04"
815 );
816
817 tester::apply
818 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
819 (10 10,20 10,30 20))"),
820 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
821 (10 20,15 10,25 10,30 15))"),
822 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
823 (10 10,20 10,30 20),(1 1,2 0),(10 20,15 10),\
824 (20 10,25 10,30 15))"),
825 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
826 (10 20,15 10,25 10,30 15),(0 0,2 0),(4 0,10 0,20 1),\
827 (1 0,2 0),(4 0,7 0),(10 10,15 10),(20 10,30 20))"),
828 "mlmlu05"
829 );
830
831
832 tester::apply
833 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 10),(1 0,7 0),\
834 (10 10,20 10,30 20))"),
835 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
836 (-1 -1,0 0,9 0,11 10,12 10,13 3,14 4,15 5),\
837 (10 20,15 10,25 10,30 15))"),
838 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 10),(1 0,7 0),\
839 (10 10,20 10,30 20),(1 1,2 0),\
840 (-1 -1,0 0),(9 0,11 10),(12 10,13 3),(10 20,15 10),\
841 (20 10,25 10,30 15))"),
842 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
843 (-1 -1,0 0,9 0,11 10,12 10,13 3,14 4,15 5),\
844 (10 20,15 10,25 10,30 15),(9 0,10 0,13 3),\
845 (15 5,20 10),(10 10,11 10),(12 10,15 10),(20 10,30 20))"),
846 "mlmlu06"
847 );
848
849 tester::apply
850 (from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
851 (-1 -1,0 0,9 0,11 10,12 10,13 3,14 4,15 5),\
852 (10 20,15 10,25 10,30 15))"),
853 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 10),(1 0,7 0),\
854 (10 10,20 10,30 20))"),
855 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
856 (-1 -1,0 0,9 0,11 10,12 10,13 3,14 4,15 5),\
857 (10 20,15 10,25 10,30 15),(9 0,10 0,13 3),\
858 (15 5,20 10),(10 10,11 10),(12 10,15 10),\
859 (20 10,30 20))"),
860 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 10),(1 0,7 0),\
861 (10 10,20 10,30 20),(1 1,2 0),(-1 -1,0 0), \
862 (9 0,11 10),(12 10,13 3),(10 20,15 10),\
863 (20 10,25 10,30 15))"),
864 "mlmlu06a"
865 );
866
867 tester::apply
868 (from_wkt<ML>("MULTILINESTRING((0 0,101 0))"),
869 from_wkt<ML>("MULTILINESTRING((-1 -1,1 0,101 0,200 -1))"),
870 from_wkt<ML>("MULTILINESTRING((0 0,101 0),(-1 -1,1 0),(101 0,200 -1))"),
871 from_wkt<ML>("MULTILINESTRING((-1 -1,1 0,101 0,200 -1),(0 0,1 0))"),
872 "mlmlu07"
873 );
874
875 tester::apply
876 (from_wkt<ML>("MULTILINESTRING((-1 1,0 0,101 0))"),
877 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
878 (19 -1,20 0,101 0,200 -1))"),
879 from_wkt<ML>("MULTILINESTRING((-1 1,0 0,101 0),(-1 -1,0 0),\
880 (19 -1,20 0),(101 0,200 -1))"),
881 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
882 (19 -1,20 0,101 0,200 -1),(-1 1,0 0))"),
883 "mlmlu07a"
884 );
885
886 tester::apply
887 (from_wkt<ML>("MULTILINESTRING((0 0,101 0))"),
888 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
889 (19 -1,20 0,101 0,200 -1))"),
890 from_wkt<ML>("MULTILINESTRING((0 0,101 0),(-1 -1,0 0),\
891 (19 -1,20 0),(101 0,200 -1))"),
892 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
893 (19 -1,20 0,101 0,200 -1))"),
894 "mlmlu07b"
895 );
896
897 tester::apply
898 (from_wkt<ML>("MULTILINESTRING((0 0,101 0))"),
899 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0),\
900 (-1 -1,1 0,101 0,200 -1))"),
901 from_wkt<ML>("MULTILINESTRING((0 0,101 0),(0 1,1 1,2 0),\
902 (-1 -1,1 0),(101 0,200 -1))"),
903 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0),\
904 (-1 -1,1 0,101 0,200 -1),(0 0,1 0))"),
905 "mlmlu08"
906 );
907
908 tester::apply
909 (from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 0.5,3 0,101 0))"),
910 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0.5),\
911 (-1 -1,1 0,101 0,200 -1))"),
912 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 0.5,3 0,101 0),\
913 (0 1,1 1,2 0.5),(-1 -1,1 0,3 0),(101 0,200 -1))"),
914 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0.5),\
915 (-1 -1,1 0,101 0,200 -1),(0 0,1 0,2 0.5,3 0))"),
916 "mlmlu09"
917 );
918
919 tester::apply
920 (from_wkt<ML>("MULTILINESTRING((0 0,1 0,1.5 0,2 0.5,3 0,101 0))"),
921 from_wkt<ML>("MULTILINESTRING((0 1,1 1,1 0,2 0.5),\
922 (-1 -1,1 0,101 0,200 -1))"),
923 from_wkt<ML>("MULTILINESTRING((0 0,1 0,1.5 0,2 0.5,3 0,101 0),\
924 (0 1,1 1,1 0,2 0.5),(-1 -1,1 0),(1.5 0,3 0),\
925 (101 0,200 -1))"),
926 from_wkt<ML>("MULTILINESTRING((0 1,1 1,1 0,2 0.5),\
927 (-1 -1,1 0,101 0,200 -1),(0 0,1 0),(1.5 0,2 0.5,3 0))"),
928 "mlmlu10"
929 );
930
931 tester::apply
932 (from_wkt<ML>("MULTILINESTRING((0 0,1 1,100 1,101 0),\
933 (0 0,101 0))"),
934 from_wkt<ML>("MULTILINESTRING((1 0,1 1,2 1,3 0,4 0,5 1,6 1,\
935 7 0,8 0,9 1,10 1,11 0,12 0,13 1,14 1,15 0),\
936 (-1 -1,1 0,101 0,200 -1))"),
937 from_wkt<ML>("MULTILINESTRING((0 0,1 1,100 1,101 0),\
938 (0 0,101 0),(1 0,1 1),(2 1,3 0),(4 0,5 1),(6 1,7 0),\
939 (8 0,9 1),(10 1,11 0),(12 0,13 1),(14 1,15 0),\
940 (-1 -1,1 0),(101 0,200 -1))"),
941 from_wkt<ML>("MULTILINESTRING((1 0,1 1,2 1,3 0,4 0,5 1,6 1,\
942 7 0,8 0,9 1,10 1,11 0,12 0,13 1,14 1,15 0),\
943 (-1 -1,1 0,101 0,200 -1),(0 0,1 1),(2 1,5 1),\
944 (6 1,9 1),(10 1,13 1),(14 1,100 1,101 0),(0 0,1 0))"),
945 "mlmlu11"
946 );
947
948 tester::apply
949 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
950 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
951 (1 1,2 0,18 0,19 1),(2 1,3 0,17 0,18 1),\
952 (3 1,4 0,16 0,17 1))"),
953 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
954 (1 1,2 0),(18 0,19 1),(2 1,3 0),(17 0,18 1),\
955 (3 1,4 0),(16 0,17 1))"),
956 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
957 (1 1,2 0,18 0,19 1),(2 1,3 0,17 0,18 1),\
958 (3 1,4 0,16 0,17 1),(0 0,1 0),(19 0,20 0))"),
959 "mlmlu12"
960 );
961
962 tester::apply
963 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
964 from_wkt<ML>("MULTILINESTRING((1 0,19 0,20 1),\
965 (2 0,18 0,19 1),(3 0,17 0,18 1),\
966 (4 0,16 0,17 1))"),
967 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(19 0,20 1),(18 0,19 1),\
968 (17 0,18 1),(16 0,17 1))"),
969 from_wkt<ML>("MULTILINESTRING((1 0,19 0,20 1),\
970 (2 0,18 0,19 1),(3 0,17 0,18 1),\
971 (4 0,16 0,17 1),(0 0,1 0),(19 0,20 0))"),
972 "mlmlu13"
973 );
974
975 tester::apply
976 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
977 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1,19 1,18 0,2 0,\
978 1 1,2 1,3 0,17 0,18 1,17 1,16 0,4 0,3 1))"),
979 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),\
980 (19 0,20 1,19 1,18 0),(2 0,1 1,2 1,3 0),\
981 (17 0,18 1,17 1,16 0),(4 0,3 1))"),
982 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1,19 1,18 0,2 0,\
983 1 1,2 1,3 0,17 0,18 1,17 1,16 0,4 0,3 1),\
984 (0 0,1 0),(19 0,20 0))"),
985 "mlmlu14"
986 );
987
988 tester::apply
989 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
990 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
991 (2 2,4 2,6 0))"),
992 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
993 (2 2,4 2,6 0))"),
994 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
995 (2 2,4 2,6 0),(0 0,1 0),(19 0,20 0))"),
996 "mlmlu15"
997 );
998
999 tester::apply
1000 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
1001 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1002 (6 0,4 2,2 2))"),
1003 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
1004 (6 0,4 2,2 2))"),
1005 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1006 (6 0,4 2,2 2),(0 0,1 0),(19 0,20 0))"),
1007 "mlmlu15a"
1008 );
1009
1010 tester::apply
1011 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
1012 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1013 (2 2,4 2,5 0,6 0))"),
1014 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
1015 (2 2,4 2,5 0))"),
1016 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1017 (2 2,4 2,5 0,6 0),(0 0,1 0),(19 0,20 0))"),
1018 "mlmlu16"
1019 );
1020
1021 tester::apply
1022 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
1023 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1024 (6 0,5 0,4 2,2 2))"),
1025 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(0 1,1 0),(19 0,20 1),\
1026 (5 0,4 2,2 2))"),
1027 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1028 (6 0,5 0,4 2,2 2),(0 0,1 0),(19 0,20 0))"),
1029 "mlmlu16a"
1030 );
1031
1032 tester::apply
1033 (from_wkt<ML>("MULTILINESTRING((0 0,30 0))"),
1034 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1035 (2 2,4 0,5 2,20 2,25 0))"),
1036 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(0 1,1 0),(19 0,20 1),\
1037 (2 2,4 0,5 2,20 2,25 0))"),
1038 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1039 (2 2,4 0,5 2,20 2,25 0),(0 0,1 0),(19 0,30 0))"),
1040 "mlmlu17"
1041 );
1042
1043 tester::apply
1044 (from_wkt<ML>("MULTILINESTRING((0 0,30 0))"),
1045 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1046 (2 2,4 0,5 2,20 2,25 0,26 2))"),
1047 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(0 1,1 0),(19 0,20 1),\
1048 (2 2,4 0,5 2,20 2,25 0,26 2))"),
1049 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1050 (2 2,4 0,5 2,20 2,25 0,26 2),(0 0,1 0),(19 0,30 0))"),
1051 "mlmlu17a"
1052 );
1053
1054 tester::apply
1055 (from_wkt<ML>("MULTILINESTRING((0 0,30 0))"),
1056 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1057 (2 2,5 -1,15 2,18 0))"),
1058 from_wkt<ML>("MULTILINESTRING((0 0,30 0),(0 1,1 0),(19 0,20 1),\
1059 (2 2,5 -1,15 2,18 0))"),
1060 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1061 (2 2,5 -1,15 2,18 0),(0 0,1 0),(19 0,30 0))"),
1062 "mlmlu18"
1063 );
1064
1065 tester::apply
1066 (from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0))"),
1067 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1068 (2 2,5 -1,15 2,18 0))"),
1069 from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0),(0 1,1 0),\
1070 (19 0,20 1),(2 2,5 -1,15 2,18 0))"),
1071 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
1072 (2 2,5 -1,15 2,18 0),(0 0,1 0),(19 0,30 0))"),
1073 "mlmlu18a"
1074 );
1075 }