union_linear_linear.cpp 42 KB

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