]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/geometry/test/algorithms/set_operations/sym_difference/sym_difference_linear_linear.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / geometry / test / algorithms / set_operations / sym_difference / sym_difference_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_sym_difference_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_sym_difference_linear_linear.hpp"
24
25 #include <boost/geometry/geometries/linestring.hpp>
26 #include <boost/geometry/geometries/multi_linestring.hpp>
27 #include <boost/geometry/algorithms/sym_difference.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_sym_difference_linestring_linestring )
42 {
43 #ifdef BOOST_GEOMETRY_TEST_DEBUG
44 std::cout << std::endl << std::endl << std::endl;
45 std::cout << "*** LINESTRING / LINESTRING SYMMETRIC DIFFERENCE ***" << 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_sym_difference_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 "llsdf00");
60
61 tester::apply
62 (from_wkt<L>("LINESTRING(0 0,5 0)"),
63 from_wkt<L>("LINESTRING(3 0,4 0)"),
64 from_wkt<ML>("MULTILINESTRING((0 0,3 0),(4 0,5 0))"),
65 "llsdf01");
66
67 tester::apply
68 (from_wkt<L>("LINESTRING(0 0,4 0)"),
69 from_wkt<L>("LINESTRING(3 0,6 0)"),
70 from_wkt<ML>("MULTILINESTRING((0 0,3 0),(4 0,6 0))"),
71 "llsdf01-1");
72
73 tester::apply
74 (from_wkt<L>("LINESTRING(0 0,6 0)"),
75 from_wkt<L>("LINESTRING(0 0,4 0)"),
76 from_wkt<ML>("MULTILINESTRING((4 0,6 0))"),
77 "llsdf01-2");
78
79 tester::apply
80 (from_wkt<L>("LINESTRING(0 0,20 0)"),
81 from_wkt<L>("LINESTRING(0 0,1 1,2 0,3 1,4 0,5 0,6 1,7 -1,8 0)"),
82 from_wkt<ML>("MULTILINESTRING((0 0,4 0),(5 0,20 0),\
83 (0 0,1 1,2 0,3 1,4 0),(5 0,6 1,7 -1,8 0))"),
84 "llsdf01-3");
85
86 tester::apply
87 (from_wkt<L>("LINESTRING(-20 0,20 0)"),
88 from_wkt<L>("LINESTRING(0 0,1 1,2 0,3 1,4 0,5 0,6 1,7 -1,8 0)"),
89 from_wkt<ML>("MULTILINESTRING((-20 0,4 0),(5 0,20 0),\
90 (0 0,1 1,2 0,3 1,4 0),(5 0,6 1,7 -1,8 0))"),
91 "llsdf01-4");
92
93 tester::apply
94 (from_wkt<L>("LINESTRING(0 0,4 0)"),
95 from_wkt<L>("LINESTRING(2 0,4 0)"),
96 from_wkt<ML>("MULTILINESTRING((0 0,2 0))"),
97 "llsdf01-5");
98
99 tester::apply
100 (from_wkt<L>("LINESTRING(0 0,2 0)"),
101 from_wkt<L>("LINESTRING(4 0,5 0)"),
102 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(4 0,5 0))"),
103 "llsdf01-6");
104
105 tester::apply
106 (from_wkt<L>("LINESTRING(0 0,2 0)"),
107 from_wkt<L>("LINESTRING(2 0,5 0)"),
108 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(2 0,5 0))"),
109 "llsdf01-7");
110
111 tester::apply
112 (from_wkt<L>("LINESTRING(0 0,1 0,4 0)"),
113 from_wkt<L>("LINESTRING(3 0,5 0)"),
114 from_wkt<ML>("MULTILINESTRING((0 0,1 0,3 0),(4 0,5 0))"),
115 "llsdf01-8");
116
117 tester::apply
118 (from_wkt<L>("LINESTRING(0 0,1 0,4 0)"),
119 from_wkt<L>("LINESTRING(3 0,4 0,5 0)"),
120 from_wkt<ML>("MULTILINESTRING((0 0,1 0,3 0),(4 0,5 0))"),
121 "llsdf01-9");
122
123 tester::apply
124 (from_wkt<L>("LINESTRING(0 0,6 0)"),
125 from_wkt<L>("LINESTRING(2 0,4 0,5 0)"),
126 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(5 0,6 0))"),
127 "llsdf01-10");
128
129 tester::apply
130 (from_wkt<L>("LINESTRING(0 0,1 0,5 5,10 5,15 0)"),
131 from_wkt<L>("LINESTRING(-1 6,0 5,15 5)"),
132 from_wkt<ML>("MULTILINESTRING((0 0,1 0,5 5),(10 5,15 0),\
133 (-1 6,0 5,5 5),(10 5,15 5))"),
134 "llsdf02");
135
136 tester::apply
137 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0)"),
138 from_wkt<L>("LINESTRING(-1 0,30 0)"),
139 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(1 0,5 5,10 5,15 0),\
140 (-1 0,0 0),(1 0,15 0),(20 0,30 0))"),
141 "llsdf03");
142
143 tester::apply
144 (from_wkt<L>("LINESTRING(0 0,1 0,5 5,10 5,15 0,20 0)"),
145 from_wkt<L>("LINESTRING(-1 0,30 0)"),
146 from_wkt<ML>("MULTILINESTRING((1 0,5 5,10 5,15 0),\
147 (-1 0,0 0),(1 0,15 0),(20 0,30 0))"),
148 "llsdf04");
149
150 tester::apply
151 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,25 1)"),
152 from_wkt<L>("LINESTRING(-1 0,30 0)"),
153 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(1 0,5 5,10 5,15 0),\
154 (20 0,25 1),(-1 0,0 0),(1 0,15 0),(20 0,30 0))"),
155 "llsdf05");
156
157 tester::apply
158 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,30 0)"),
159 from_wkt<L>("LINESTRING(-1 0,30 0)"),
160 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(1 0,5 5,10 5,15 0),\
161 (-1 0,0 0),(1 0,15 0))"),
162 "llsdf05-1");
163
164 tester::apply
165 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0)"),
166 from_wkt<L>("LINESTRING(-1 0,30 0)"),
167 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(1 0,5 5,10 5,15 0),\
168 (30 0,31 0),(-1 0,0 0),(1 0,15 0))"),
169 "llsdf06");
170
171 tester::apply
172 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0)"),
173 from_wkt<L>("LINESTRING(-1 0,25 0,30 0)"),
174 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(1 0,5 5,10 5,15 0),\
175 (30 0,31 0),(-1 0,0 0),(1 0,15 0))"),
176 "llsdf07");
177
178 tester::apply
179 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,31 0)"),
180 from_wkt<L>("LINESTRING(-1 0,19 0,30 0)"),
181 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(1 0,5 5,10 5,15 0),\
182 (30 0,31 0),(-1 0,0 0),(1 0,15 0))"),
183 "llsdf08");
184
185 tester::apply
186 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,30 0,31 1)"),
187 from_wkt<L>("LINESTRING(-1 0,30 0)"),
188 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(1 0,5 5,10 5,15 0),\
189 (30 0,31 1),(-1 0,0 0),(1 0,15 0))"),
190 "llsdf09");
191
192 tester::apply
193 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,5 5,10 5,15 0,20 0,30 0,31 1)"),
194 from_wkt<L>("LINESTRING(-1 -1,0 0,1 0,2 1,3 0,30 0)"),
195 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(1 0,5 5,10 5,15 0),\
196 (30 0,31 1),(-1 -1,0 0),(1 0,2 1,3 0,15 0))"),
197 "llsdf10");
198
199 tester::apply
200 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,4 0,5 5,10 5,15 0,20 0,\
201 30 0,31 1)"),
202 from_wkt<L>("LINESTRING(-1 -1,0 0,1 0,2 0,2.5 1,3 0,30 0)"),
203 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(2 0,3 0),\
204 (4 0,5 5,10 5,15 0),(30 0,31 1),(-1 -1,0 0),\
205 (2 0,2.5 1,3 0),(4 0,15 0))"),
206 "llsdf11");
207
208 tester::apply
209 (from_wkt<L>("LINESTRING(-1 1,0 0,1 0,4 0,5 5,10 5,15 0,31 0)"),
210 from_wkt<L>("LINESTRING(-1 -1,0 0,1 0,2 0,2.5 1,3 0,30 0)"),
211 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(2 0,3 0),\
212 (4 0,5 5,10 5,15 0),(30 0,31 0),(-1 -1,0 0),\
213 (2 0,2.5 1,3 0),(4 0,15 0))"),
214 "llsdf11-1");
215
216 tester::apply
217 (from_wkt<L>("LINESTRING(0 0,2 0,3 1)"),
218 from_wkt<L>("LINESTRING(0 0,2 0,3 1)"),
219 from_wkt<ML>("MULTILINESTRING()"),
220 "llsdf12");
221
222 tester::apply
223 (from_wkt<L>("LINESTRING(0 0,2 0,3 1)"),
224 from_wkt<L>("LINESTRING(3 1,2 0,0 0)"),
225 from_wkt<ML>("MULTILINESTRING()"),
226 "llsdf12-1");
227
228 tester::apply
229 (from_wkt<L>("LINESTRING(0 0,1 0,2 1,3 5,4 0)"),
230 from_wkt<L>("LINESTRING(1 0,2 1,3 5,4 0,5 10)"),
231 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(4 0,5 10))"),
232 "llsdf13");
233
234 tester::apply
235 (from_wkt<L>("LINESTRING(0 0,1 0,2 0,2.5 0,3 1)"),
236 from_wkt<L>("LINESTRING(0 0,2 0,2.5 0,3 1)"),
237 from_wkt<ML>("MULTILINESTRING()"),
238 "llsdf14");
239
240 tester::apply
241 (from_wkt<L>("LINESTRING(0 0,1 0,2 1,3 5,4 0)"),
242 from_wkt<L>("LINESTRING(1 0,2 1,3 5)"),
243 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(3 5,4 0))"),
244 "llsdf15");
245
246 tester::apply
247 (from_wkt<L>("LINESTRING(0 0,1 0,2 1,3 2)"),
248 from_wkt<L>("LINESTRING(0.5 0,1 0,3 2,4 5)"),
249 from_wkt<ML>("MULTILINESTRING((0 0,0.5 0),(3 2,4 5))"),
250 "llsdf16");
251
252 tester::apply
253 (from_wkt<L>("LINESTRING(0 0,1 0,2 1,3 2)"),
254 from_wkt<L>("LINESTRING(4 5,3 2,1 0,0.5 0)"),
255 from_wkt<ML>("MULTILINESTRING((0 0,0.5 0),(4 5,3 2))"),
256 "llsdf16-r");
257
258 tester::apply
259 (from_wkt<L>("LINESTRING(0 0,10 0,20 1,30 1)"),
260 from_wkt<L>("LINESTRING(1 1,2 0,3 1,20 1,25 1)"),
261 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(25 1,30 1),\
262 (1 1,2 0,3 1,20 1))"),
263 "llsdf17");
264
265 tester::apply
266 (from_wkt<L>("LINESTRING(0 0,10 0,20 1,21 0,30 0)"),
267 from_wkt<L>("LINESTRING(1 1,2 0,3 1,20 1,25 0)"),
268 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1,21 0,30 0),\
269 (1 1,2 0,3 1,20 1,25 0))"),
270 "llsdf18");
271
272 tester::apply
273 (from_wkt<L>("LINESTRING(0 0,30 0)"),
274 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 1)"),
275 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
276 (5 0,20 1,4 1,4 0,5 1))"),
277 "llsdf19");
278
279 tester::apply
280 (from_wkt<L>("LINESTRING(0 0,30 0)"),
281 from_wkt<L>("LINESTRING(5 1,4 0,4 1,20 1,5 0,1 0)"),
282 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
283 (5 1,4 0,4 1,20 1,5 0))"),
284 "llsdf19-r");
285
286 tester::apply
287 (from_wkt<L>("LINESTRING(0 0,30 0)"),
288 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0)"),
289 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
290 (5 0,20 1,4 1,4 0))"),
291 "llsdf19a");
292
293 tester::apply
294 (from_wkt<L>("LINESTRING(0 0,30 0)"),
295 from_wkt<L>("LINESTRING(4 0,4 1,20 1,5 0,1 0)"),
296 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
297 (4 0,4 1,20 1,5 0))"),
298 "llsdf19a-r");
299
300 tester::apply
301 (from_wkt<L>("LINESTRING(0 0,30 0)"),
302 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 0)"),
303 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
304 (5 0,20 1,4 1,4 0))"),
305 "llsdf19b");
306
307 tester::apply
308 (from_wkt<L>("LINESTRING(0 0,30 0)"),
309 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 0,6 1)"),
310 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
311 (5 0,20 1,4 1,4 0),(5 0,6 1))"),
312 "llsdf19c");
313
314 tester::apply
315 (from_wkt<L>("LINESTRING(0 0,30 0)"),
316 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,3 0)"),
317 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
318 (5 0,20 1,4 1,4 0))"),
319 "llsdf19d");
320
321 tester::apply
322 (from_wkt<L>("LINESTRING(0 0,30 0)"),
323 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,3 0,3 1)"),
324 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
325 (5 0,20 1,4 1,4 0),(3 0,3 1))"),
326 "llsdf19e");
327
328 tester::apply
329 (from_wkt<L>("LINESTRING(0 0,30 0)"),
330 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,4 0,5 0,5 1)"),
331 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
332 (5 0,20 1,4 1,4 0),(5 0,5 1))"),
333 "llsdf19f");
334
335 tester::apply
336 (from_wkt<L>("LINESTRING(0 0,30 0)"),
337 from_wkt<L>("LINESTRING(5 1,5 0,4 0,4 1,20 1,5 0,1 0)"),
338 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
339 (5 1,5 0),(4 0,4 1,20 1,5 0))"),
340 "llsdf19f-r");
341
342 tester::apply
343 (from_wkt<L>("LINESTRING(0 0,30 0)"),
344 from_wkt<L>("LINESTRING(1 0,5 0,20 1,4 1,5 0,5 1)"),
345 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
346 (5 0,20 1,4 1,5 0,5 1))"),
347 "llsdf19g");
348
349 tester::apply
350 (from_wkt<L>("LINESTRING(0 0,30 0)"),
351 from_wkt<L>("LINESTRING(5 1,5 0,4 1,20 1,5 0,1 0)"),
352 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(5 0,30 0),\
353 (5 1,5 0,4 1,20 1,5 0))"),
354 "llsdf19g-r");
355
356 tester::apply
357 (from_wkt<L>("LINESTRING(0 0,30 0,30 30,10 30,10 -10,15 0,40 0)"),
358 from_wkt<L>("LINESTRING(5 5,10 0,10 30,20 0,25 0,25 25,50 0,35 0)"),
359 from_wkt<ML>("MULTILINESTRING((0 0,20 0),(25 0,30 0,30 30,10 30),\
360 (10 0,10 -10,15 0,20 0),(25 0,35 0),\
361 (5 5,10 0),(10 30,20 0),(25 0,25 25,50 0,40 0))"),
362 "llsdf20");
363
364 tester::apply
365 (from_wkt<L>("LINESTRING(0 0,30 0,30 30,10 30,10 -10,15 0,40 0)"),
366 from_wkt<L>("LINESTRING(5 5,10 0,10 30,20 0,25 0,25 25,50 0,15 0)"),
367 from_wkt<ML>("MULTILINESTRING((0 0,15 0),(30 0,30 30,10 30),\
368 (10 0,10 -10,15 0),(5 5,10 0),(10 30,20 0),\
369 (25 0,25 25,50 0,40 0))"),
370 "llsdf20a");
371
372 tester::apply
373 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
374 from_wkt<L>("LINESTRING(2 2,5 -1,15 2,18 0,20 0)"),
375 from_wkt<ML>("MULTILINESTRING((0 0,18 0),(20 0,30 0),\
376 (2 2,5 -1,15 2,18 0))"),
377 "llsdf21"
378 );
379
380 tester::apply
381 (from_wkt<L>("LINESTRING(0 -3,5 4,6 6,-3 2,-3 0,-3 -10,9 -2,\
382 9 5,5 -5,-4 -8,9 0)"),
383 from_wkt<L>("LINESTRING(-3 6,-3 0,-3 5,2 -3,-6 10,5 0,\
384 2 8,-6 1,10 -6)"),
385 from_wkt<ML>("MULTILINESTRING((0 -3,5 4,6 6,-3 2),\
386 (-3 0,-3 -10,9 -2,9 5,5 -5,-4 -8,9 0),(-3 6,-3 2),\
387 (-3 2,-3 5,2 -3,-6 10,5 0,2 8,-6 1,10 -6))"),
388 "llsdf22"
389 );
390 }
391
392
393
394 BOOST_AUTO_TEST_CASE( test_sym_difference_linestring_multilinestring )
395 {
396 #ifdef BOOST_GEOMETRY_TEST_DEBUG
397 std::cout << std::endl << std::endl << std::endl;
398 std::cout << "*** LINESTRING / MULTILINESTRING SYMMETRIC DIFFERENCE ***"
399 << std::endl;
400 std::cout << std::endl;
401 #endif
402
403 typedef linestring_type L;
404 typedef multi_linestring_type ML;
405
406 typedef test_sym_difference_of_geometries<L, ML, ML> tester;
407
408 // disjoint linestrings
409 tester::apply
410 (from_wkt<L>("LINESTRING(0 0,10 0,20 1)"),
411 from_wkt<ML>("MULTILINESTRING((1 1,2 2,4 3),(1 1,2 2,5 3))"),
412 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),\
413 (1 1,2 2,4 3),(1 1,2 2,5 3))"),
414 "lmlsdf01"
415 );
416
417 tester::apply
418 (from_wkt<L>("LINESTRING(0 0,10 0,20 1)"),
419 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,4 0))"),
420 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(4 0,10 0,20 1),\
421 (1 1,2 0),(1 1,3 0))"),
422 "lmlsdf02"
423 );
424
425 tester::apply
426 (from_wkt<L>("LINESTRING(0 0,10 0,20 1)"),
427 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,5 0))"),
428 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(5 0,10 0,20 1),\
429 (1 1,2 0),(1 1,3 0))"),
430 "lmlsdf03"
431 );
432
433 tester::apply
434 (from_wkt<L>("LINESTRING(0 0,10 0,20 1)"),
435 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0))"),
436 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(4 0,10 0,20 1),\
437 (1 1,2 0))"),
438 "lmlsdf04"
439 );
440
441 tester::apply
442 (from_wkt<L>("LINESTRING(0 0,101 0)"),
443 from_wkt<ML>("MULTILINESTRING((-1 -1,1 0,101 0,200 -1))"),
444 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(-1 -1,1 0),(101 0,200 -1))"),
445 "lmlsdf07"
446 );
447
448 tester::apply
449 (from_wkt<L>("LINESTRING(-1 1,0 0,101 0)"),
450 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
451 (19 -1,20 0,101 0,200 -1))"),
452 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(-1 -1,0 0),\
453 (19 -1,20 0),(101 0,200 -1))"),
454 "lmlsdf07a"
455 );
456
457 tester::apply
458 (from_wkt<L>("LINESTRING(0 0,101 0)"),
459 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
460 (19 -1,20 0,101 0,200 -1))"),
461 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0),(19 -1,20 0),\
462 (101 0,200 -1))"),
463 "lmlsdf07b"
464 );
465
466 tester::apply
467 (from_wkt<L>("LINESTRING(0 0,101 0)"),
468 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0),\
469 (-1 -1,1 0,101 0,200 -1))"),
470 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(0 1,1 1,2 0),\
471 (-1 -1,1 0),(101 0,200 -1))"),
472 "lmlsdf08"
473 );
474
475 tester::apply
476 (from_wkt<L>("LINESTRING(0 0,1 0,2 0.5,3 0,101 0)"),
477 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0.5),\
478 (-1 -1,1 0,101 0,200 -1))"),
479 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 0.5,3 0),\
480 (0 1,1 1,2 0.5),(-1 -1,1 0,3 0),(101 0,200 -1))"),
481 "lmlsdf09"
482 );
483
484 tester::apply
485 (from_wkt<L>("LINESTRING(0 0,1 0,1.5 0,2 0.5,3 0,101 0)"),
486 from_wkt<ML>("MULTILINESTRING((0 1,1 1,1 0,2 0.5),\
487 (-1 -1,1 0,101 0,200 -1))"),
488 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(1.5 0,2 0.5,3 0),\
489 (0 1,1 1,1 0,2 0.5),(-1 -1,1 0),(1.5 0,3 0),\
490 (101 0,200 -1))"),
491 "lmlsdf10"
492 );
493
494 tester::apply
495 (from_wkt<L>("LINESTRING(0 0,20 0)"),
496 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
497 (1 1,2 0,18 0,19 1),(2 1,3 0,17 0,18 1),\
498 (3 1,4 0,16 0,17 1))"),
499 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
500 (0 1,1 0),(19 0,20 1),(1 1,2 0),(18 0,19 1),\
501 (2 1,3 0),(17 0,18 1),(3 1,4 0),(16 0,17 1))"),
502 "lmlsdf12"
503 );
504
505 tester::apply
506 (from_wkt<L>("LINESTRING(0 0,20 0)"),
507 from_wkt<ML>("MULTILINESTRING((1 0,19 0,20 1),\
508 (2 0,18 0,19 1),(3 0,17 0,18 1),\
509 (4 0,16 0,17 1))"),
510 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
511 (19 0,20 1),(18 0,19 1),(17 0,18 1),(16 0,17 1))"),
512 "lmlsdf13"
513 );
514
515 tester::apply
516 (from_wkt<L>("LINESTRING(0 0,20 0)"),
517 from_wkt<ML>("MULTILINESTRING((1 0,19 0),(2 0,18 0),(3 0,17 0),\
518 (4 0,16 0))"),
519 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0))"),
520 "lmlsdf13a"
521 );
522
523 tester::apply
524 (from_wkt<L>("LINESTRING(0 0,20 0)"),
525 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1,19 1,18 0,2 0,\
526 1 1,2 1,3 0,17 0,18 1,17 1,16 0,4 0,3 1))"),
527 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
528 (0 1,1 0),(19 0,20 1,19 1,18 0),(2 0,1 1,2 1,3 0),\
529 (17 0,18 1,17 1,16 0),(4 0,3 1))"),
530 "lmlsdf14"
531 );
532
533 tester::apply
534 (from_wkt<L>("LINESTRING(0 0,20 0)"),
535 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
536 (2 2,4 2,6 0))"),
537 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
538 (0 1,1 0),(19 0,20 1),(2 2,4 2,6 0))"),
539 "lmlsdf15"
540 );
541
542 tester::apply
543 (from_wkt<L>("LINESTRING(0 0,20 0)"),
544 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
545 (6 0,4 2,2 2))"),
546 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
547 (0 1,1 0),(19 0,20 1),(6 0,4 2,2 2))"),
548 "lmlsdf15a"
549 );
550
551 tester::apply
552 (from_wkt<L>("LINESTRING(0 0,20 0)"),
553 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
554 (2 2,4 2,5 0,6 0))"),
555 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
556 (0 1,1 0),(19 0,20 1),(2 2,4 2,5 0))"),
557 "lmlsdf16"
558 );
559
560 tester::apply
561 (from_wkt<L>("LINESTRING(0 0,20 0)"),
562 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
563 (6 0,5 0,4 2,2 2))"),
564 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
565 (0 1,1 0),(19 0,20 1),(5 0,4 2,2 2))"),
566 "lmlsdf16a"
567 );
568
569 tester::apply
570 (from_wkt<L>("LINESTRING(0 0,30 0)"),
571 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
572 (2 2,4 0,5 2,20 2,25 0))"),
573 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,30 0),\
574 (0 1,1 0),(19 0,20 1),(2 2,4 0,5 2,20 2,25 0))"),
575 "lmlsdf17"
576 );
577
578 tester::apply
579 (from_wkt<L>("LINESTRING(0 0,30 0)"),
580 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
581 (2 2,4 0,5 2,20 2,25 0,26 2))"),
582 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,30 0),\
583 (0 1,1 0),(19 0,20 1),(2 2,4 0,5 2,20 2,25 0,26 2))"),
584 "lmlsdf17a"
585 );
586
587 tester::apply
588 (from_wkt<L>("LINESTRING(0 0,30 0)"),
589 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
590 (2 2,5 -1,15 2,18 0))"),
591 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,30 0),\
592 (0 1,1 0),(19 0,20 1),(2 2,5 -1,15 2,18 0))"),
593 "lmlsdf18"
594 );
595
596 tester::apply
597 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
598 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
599 (2 2,5 -1,15 2,18 0))"),
600 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,30 0),\
601 (0 1,1 0),(19 0,20 1),(2 2,5 -1,15 2,18 0))"),
602 "lmlsdf18a"
603 );
604
605 tester::apply
606 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
607 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
608 (2 2,5 -1,15 2,18 0,20 0))"),
609 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(20 0,30 0),\
610 (0 1,1 0),(19 0,20 1),(2 2,5 -1,15 2,18 0))"),
611 "lmlsdf18b"
612 );
613
614 tester::apply
615 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
616 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
617 (2 2,5 -1,15 2,25 0,26 0))"),
618 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,25 0),(26 0,30 0),\
619 (0 1,1 0),(19 0,20 1),(2 2,5 -1,15 2,25 0))"),
620 "lmlsdf18c"
621 );
622
623 tester::apply
624 (from_wkt<L>("LINESTRING(0 0,18 0,19 0,30 0)"),
625 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
626 (2 2,5 -1,15 2,25 0,21 0))"),
627 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,21 0),(25 0,30 0),\
628 (0 1,1 0),(19 0,20 1),(2 2,5 -1,15 2,25 0))"),
629 "lmlsdf18d"
630 );
631
632 #ifdef BOOST_GEOMETRY_TEST_FAILURES
633 tester::apply
634 (from_wkt<L>("LINESTRING(1 5,4 2,1 -1.1,1 6,1 189.7654,2 5,-0.7654 3)"),
635 from_wkt<ML>("MULTILINESTRING((2 5,-0.7654 2),\
636 (-1032.34324 4,1 5,9 7,3 9,0.2 5,1 -0.3),\
637 (1 0.9,1 6,1 -0.6,2.232432 -0.7654,0.9 3,1 5,\
638 -0.7654 9,3 0.1,9 0,-6 8,-0.7 8,0 1,-1032.34324 0))"),
639 from_wkt<ML>("MULTILINESTRING((2 5,-0.7654 2),\
640 (-1032.34324 4,1 5,9 7,3 9,0.2 5,1 -0.3),\
641 (1 -0.6,2.232432 -0.7654,0.9 3,1 5,-0.7654 9,\
642 3 0.1,9 0,-6 8,-0.7 8,0 1,-1032.34324 0),\
643 (1 5,4 2,1 -1.1,1 -0.6),\
644 (1 6,1 189.7654,2 5,-0.7654 3))"),
645 "lmlsdf19",
646 1e-10
647 );
648 #endif
649 }
650
651
652
653
654 BOOST_AUTO_TEST_CASE( test_sym_difference_multilinestring_linestring )
655 {
656 #ifdef BOOST_GEOMETRY_TEST_DEBUG
657 std::cout << std::endl << std::endl << std::endl;
658 std::cout << "*** MULTILINESTRING / LINESTRING SYMMETRIC DIFFERENCE ***"
659 << std::endl;
660 std::cout << std::endl;
661 #endif
662
663 typedef linestring_type L;
664 typedef multi_linestring_type ML;
665
666 typedef test_sym_difference_of_geometries<ML, L, ML> tester;
667
668 // disjoint linestrings
669 tester::apply
670 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
671 from_wkt<L>("LINESTRING(1 1,2 2,4 3)"),
672 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
673 (1 1,2 2,4 3))"),
674 "mllsdf01"
675 );
676
677 tester::apply
678 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
679 from_wkt<L>("LINESTRING(1 1,2 0,4 0)"),
680 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(4 0,10 0,20 1),\
681 (1 0,2 0),(4 0,7 0),(1 1,2 0))"),
682 "mllsdf02"
683 );
684
685 tester::apply
686 (from_wkt<ML>("MULTILINESTRING((0 0,101 0))"),
687 from_wkt<L>("LINESTRING(-1 -1,1 0,101 0,200 -1)"),
688 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(-1 -1,1 0),(101 0,200 -1))"),
689 "mllsdf03"
690 );
691
692 tester::apply
693 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
694 from_wkt<L>("LINESTRING(0 1,1 0,19 0,20 1,19 1,18 0,2 0,\
695 1 1,2 1,3 0,17 0,18 1,17 1,16 0,4 0,3 1)"),
696 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
697 (0 1,1 0),(19 0,20 1,19 1,18 0),(2 0,1 1,2 1,3 0),\
698 (17 0,18 1,17 1,16 0),(4 0,3 1))"),
699 "mllsdf04"
700 );
701
702 tester::apply
703 (from_wkt<ML>("MULTILINESTRING((0 -3,5 4,6 6,-3 2,-3 0,\
704 -3 -10,9 -2,9 5,5 -5,-4 -8,9 0),\
705 (-7 9,-4 -9,-5 -10,5 3),\
706 (-8 -3,-6 6,-9 0,-4 -3,-1 -10),\
707 (0 1,7 -1,-2 3,-7 1),\
708 (-5 -9,-4 -10,7 -10,0 -6,1 6,2 -1,1 5,-5 -5))"),
709 from_wkt<L>("LINESTRING(-3 6,-3 0,-3 5,2 -3,-6 10,5 0,2 8,\
710 -6 1,10 -6)"),
711 from_wkt<ML>("MULTILINESTRING((0 -3,5 4,6 6,-3 2),\
712 (-3 0,-3 -10,9 -2,9 5,5 -5,-4 -8,9 0),\
713 (-7 9,-4 -9,-5 -10,5 3),\
714 (-8 -3,-6 6,-9 0,-4 -3,-1 -10),\
715 (0 1,7 -1,-2 3,-7 1),\
716 (-5 -9,-4 -10,7 -10,0 -6,1 6,2 -1,1 5,-5 -5),\
717 (-3 6,-3 2),(-3 2,-3 5,2 -3,-6 10,5 0,2 8,-6 1,10 -6))"),
718 "mllsdf05"
719 );
720 }
721
722
723
724
725
726
727 BOOST_AUTO_TEST_CASE( test_sym_difference_multilinestring_multilinestring )
728 {
729 #ifdef BOOST_GEOMETRY_TEST_DEBUG
730 std::cout << std::endl << std::endl << std::endl;
731 std::cout << "*** MULTILINESTRING / MULTILINESTRING SYMMETRIC DIFFERENCE ***"
732 << std::endl;
733 std::cout << std::endl;
734 #endif
735
736 typedef multi_linestring_type ML;
737
738 typedef test_sym_difference_of_geometries<ML, ML, ML> tester;
739
740 // disjoint linestrings
741 tester::apply
742 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
743 from_wkt<ML>("MULTILINESTRING((1 1,2 2,4 3),(1 1,2 2,5 3))"),
744 from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
745 (1 1,2 2,4 3),(1 1,2 2,5 3))"),
746 "mlmlsdf01"
747 );
748
749 tester::apply
750 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
751 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,4 0))"),
752 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(4 0,10 0,20 1),\
753 (1 0,2 0),(4 0,7 0),(1 1,2 0),(1 1,3 0))"),
754 "mlmlsdf02"
755 );
756
757 tester::apply
758 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
759 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),(1 1,3 0,5 0))"),
760 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(5 0,10 0,20 1),\
761 (1 0,2 0),(5 0,7 0),(1 1,2 0),(1 1,3 0))"),
762 "mlmlsdf03"
763 );
764
765 tester::apply
766 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0))"),
767 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0))"),
768 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(4 0,10 0,20 1),\
769 (1 0,2 0),(4 0,7 0),(1 1,2 0))"),
770 "mlmlsdf04"
771 );
772
773 tester::apply
774 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
775 (10 10,20 10,30 20))"),
776 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
777 (10 20,15 10,25 10,30 15))"),
778 from_wkt<ML>("MULTILINESTRING((0 0,2 0),(4 0,10 0,20 1),\
779 (1 0,2 0),(4 0,7 0),(10 10,15 10),(20 10,30 20),\
780 (1 1,2 0),(10 20,15 10),(20 10,25 10,30 15))"),
781 "mlmlsdf05"
782 );
783
784 tester::apply
785 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 1),(1 0,7 0),\
786 (10 10,20 10,30 20))"),
787 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
788 (-1 -1,0 0,9 0,11 10,12 10,13 0.3,14 0.4,15 0.5),\
789 (10 20,15 10,25 10,30 15))"),
790 from_wkt<ML>("MULTILINESTRING((9 0,10 0,13 0.3),(15 0.5,20 1),\
791 (10 10,11 10),(12 10,15 10),(20 10,30 20),\
792 (1 1,2 0),(-1 -1,0 0),(9 0,11 10),(12 10,13 0.3),\
793 (10 20,15 10),(20 10,25 10,30 15))"),
794 "mlmlsdf06",
795 4.0 * std::numeric_limits<double>::epsilon()
796 );
797
798 tester::apply
799 (from_wkt<ML>("MULTILINESTRING((0 0,10 0,20 10),(1 0,7 0),\
800 (10 10,20 10,30 20))"),
801 from_wkt<ML>("MULTILINESTRING((1 1,2 0,4 0),\
802 (-1 -1,0 0,9 0,11 10,12 10,13 3,14 4,15 5),\
803 (10 20,15 10,25 10,30 15))"),
804 from_wkt<ML>("MULTILINESTRING((9 0,10 0,13 3),(15 5,20 10),\
805 (10 10,11 10),(12 10,15 10),(20 10,30 20),\
806 (1 1,2 0),(-1 -1,0 0),(9 0,11 10),(12 10,13 3),\
807 (10 20,15 10),(20 10,25 10,30 15))"),
808 "mlmlsdf06a"
809 );
810
811 tester::apply
812 (from_wkt<ML>("MULTILINESTRING((0 0,101 0))"),
813 from_wkt<ML>("MULTILINESTRING((-1 -1,1 0,101 0,200 -1))"),
814 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(-1 -1,1 0),\
815 (101 0,200 -1))"),
816 "mlmlsdf07"
817 );
818
819 tester::apply
820 (from_wkt<ML>("MULTILINESTRING((-1 1,0 0,101 0))"),
821 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
822 (19 -1,20 0,101 0,200 -1))"),
823 from_wkt<ML>("MULTILINESTRING((-1 1,0 0),(-1 -1,0 0),\
824 (19 -1,20 0),(101 0,200 -1))"),
825 "mlmlsdf07a"
826 );
827
828 tester::apply
829 (from_wkt<ML>("MULTILINESTRING((0 0,101 0))"),
830 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0,50 0),\
831 (19 -1,20 0,101 0,200 -1))"),
832 from_wkt<ML>("MULTILINESTRING((-1 -1,0 0),(19 -1,20 0),\
833 (101 0,200 -1))"),
834 "mlmlsdf07b"
835 );
836
837 tester::apply
838 (from_wkt<ML>("MULTILINESTRING((0 0,101 0))"),
839 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0),\
840 (-1 -1,1 0,101 0,200 -1))"),
841 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(0 1,1 1,2 0),\
842 (-1 -1,1 0),(101 0,200 -1))"),
843 "mlmlsdf08"
844 );
845
846 tester::apply
847 (from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 0.5,3 0,101 0))"),
848 from_wkt<ML>("MULTILINESTRING((0 1,1 1,2 0.5),\
849 (-1 -1,1 0,101 0,200 -1))"),
850 from_wkt<ML>("MULTILINESTRING((0 0,1 0,2 0.5,3 0),(0 1,1 1,2 0.5),\
851 (-1 -1,1 0,3 0),(101 0,200 -1))"),
852 "mlmlsdf09"
853 );
854
855 tester::apply
856 (from_wkt<ML>("MULTILINESTRING((0 0,1 0,1.5 0,2 0.5,3 0,101 0))"),
857 from_wkt<ML>("MULTILINESTRING((0 1,1 1,1 0,2 0.5),\
858 (-1 -1,1 0,101 0,200 -1))"),
859 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(1.5 0,2 0.5,3 0),\
860 (0 1,1 1,1 0,2 0.5),(-1 -1,1 0),(1.5 0,3 0),\
861 (101 0,200 -1))"),
862 "mlmlsdf10"
863 );
864
865 tester::apply
866 (from_wkt<ML>("MULTILINESTRING((0 0,1 1,100 1,101 0),\
867 (0 0,101 0))"),
868 from_wkt<ML>("MULTILINESTRING((1 0,1 1,2 1,3 0,4 0,5 1,6 1,\
869 7 0,8 0,9 1,10 1,11 0,12 0,13 1,14 1,15 0),\
870 (-1 -1,1 0,101 0,200 -1))"),
871 from_wkt<ML>("MULTILINESTRING((0 0,1 1),(2 1,5 1),(6 1,9 1),\
872 (10 1,13 1),(14 1,100 1,101 0),(0 0,1 0),\
873 (1 0,1 1),(2 1,3 0),(4 0,5 1),(6 1,7 0),\
874 (8 0,9 1),(10 1,11 0),(12 0,13 1),(14 1,15 0),\
875 (-1 -1,1 0),(101 0,200 -1))"),
876 "mlmlsdf11"
877 );
878
879 tester::apply
880 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
881 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
882 (1 1,2 0,18 0,19 1),(2 1,3 0,17 0,18 1),\
883 (3 1,4 0,16 0,17 1))"),
884 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
885 (0 1,1 0),(19 0,20 1),(1 1,2 0),(18 0,19 1),\
886 (2 1,3 0),(17 0,18 1),(3 1,4 0),(16 0,17 1))"),
887 "mlmlsdf12"
888 );
889
890 tester::apply
891 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
892 from_wkt<ML>("MULTILINESTRING((1 0,19 0,20 1),\
893 (2 0,18 0,19 1),(3 0,17 0,18 1),\
894 (4 0,16 0,17 1))"),
895 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
896 (19 0,20 1),(18 0,19 1),(17 0,18 1),(16 0,17 1))"),
897 "mlmlsdf13"
898 );
899
900 tester::apply
901 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
902 from_wkt<ML>("MULTILINESTRING((1 0,19 0),(2 0,18 0),(3 0,17 0),\
903 (4 0,16 0))"),
904 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0))"),
905 "mlmlsdf13a"
906 );
907
908 tester::apply
909 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
910 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1,19 1,18 0,2 0,\
911 1 1,2 1,3 0,17 0,18 1,17 1,16 0,4 0,3 1))"),
912 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
913 (0 1,1 0),(19 0,20 1,19 1,18 0),(2 0,1 1,2 1,3 0),\
914 (17 0,18 1,17 1,16 0),(4 0,3 1))"),
915 "mlmlsdf14"
916 );
917
918 tester::apply
919 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
920 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
921 (2 2,4 2,6 0))"),
922 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
923 (0 1,1 0),(19 0,20 1),(2 2,4 2,6 0))"),
924 "mlmlsdf15"
925 );
926
927 tester::apply
928 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
929 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
930 (6 0,4 2,2 2))"),
931 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
932 (0 1,1 0),(19 0,20 1),(6 0,4 2,2 2))"),
933 "mlmlsdf15a"
934 );
935
936 tester::apply
937 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
938 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
939 (2 2,4 2,5 0,6 0))"),
940 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
941 (0 1,1 0),(19 0,20 1),(2 2,4 2,5 0))"),
942 "mlmlsdf16"
943 );
944
945 tester::apply
946 (from_wkt<ML>("MULTILINESTRING((0 0,20 0))"),
947 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
948 (6 0,5 0,4 2,2 2))"),
949 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,20 0),\
950 (0 1,1 0),(19 0,20 1),(5 0,4 2,2 2))"),
951 "mlmlsdf16a"
952 );
953
954 tester::apply
955 (from_wkt<ML>("MULTILINESTRING((0 0,30 0))"),
956 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
957 (2 2,4 0,5 2,20 2,25 0))"),
958 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,30 0),\
959 (0 1,1 0),(19 0,20 1),(2 2,4 0,5 2,20 2,25 0))"),
960 "mlmlsdf17"
961 );
962
963 tester::apply
964 (from_wkt<ML>("MULTILINESTRING((0 0,30 0))"),
965 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
966 (2 2,4 0,5 2,20 2,25 0,26 2))"),
967 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,30 0),\
968 (0 1,1 0),(19 0,20 1),(2 2,4 0,5 2,20 2,25 0,26 2))"),
969 "mlmlsdf17a"
970 );
971
972 tester::apply
973 (from_wkt<ML>("MULTILINESTRING((0 0,30 0))"),
974 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
975 (2 2,5 -1,15 2,18 0))"),
976 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,30 0),\
977 (0 1,1 0),(19 0,20 1),(2 2,5 -1,15 2,18 0))"),
978 "mlmlsdf18"
979 );
980
981 tester::apply
982 (from_wkt<ML>("MULTILINESTRING((0 0,18 0,19 0,30 0))"),
983 from_wkt<ML>("MULTILINESTRING((0 1,1 0,19 0,20 1),\
984 (2 2,5 -1,15 2,18 0))"),
985 from_wkt<ML>("MULTILINESTRING((0 0,1 0),(19 0,30 0),\
986 (0 1,1 0),(19 0,20 1),(2 2,5 -1,15 2,18 0))"),
987 "mlmlsdf18a"
988 );
989 }