/libs/geometry/test/multi/algorithms/multi_union.cpp

https://github.com/delalond/boost_1_54_0-bgq · C++ · 149 lines · 116 code · 25 blank · 8 comment · 0 complexity · 3cb3db114f97914f75884e96b0aa7f85 MD5 · raw file

  1. // Boost.Geometry (aka GGL, Generic Geometry Library)
  2. // Unit Test
  3. // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
  4. // Use, modification and distribution is subject to the Boost Software License,
  5. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt)
  7. #include <iostream>
  8. #include <string>
  9. #include <algorithms/test_union.hpp>
  10. #include <algorithms/test_overlay.hpp>
  11. #include <multi/algorithms/overlay/multi_overlay_cases.hpp>
  12. #include <boost/geometry/multi/algorithms/correct.hpp>
  13. #include <boost/geometry/multi/algorithms/intersection.hpp>
  14. #include <boost/geometry/multi/algorithms/within.hpp>
  15. #include <boost/geometry/geometries/point_xy.hpp>
  16. #include <boost/geometry/multi/geometries/multi_linestring.hpp>
  17. #include <boost/geometry/multi/geometries/multi_polygon.hpp>
  18. #include <boost/geometry/multi/io/wkt/read.hpp>
  19. template <typename Ring, typename Polygon, typename MultiPolygon>
  20. void test_areal()
  21. {
  22. test_one<Polygon, MultiPolygon, MultiPolygon>("simplex_multi",
  23. case_multi_simplex[0], case_multi_simplex[1],
  24. 1, 0, 20, 14.58);
  25. test_one<Polygon, Polygon, MultiPolygon>("simplex_multi_p_mp",
  26. case_single_simplex, case_multi_simplex[0],
  27. 1, 0, 20, 14.58);
  28. test_one<Polygon, MultiPolygon, Polygon>("simplex_multi_mp_p",
  29. case_multi_simplex[0], case_single_simplex,
  30. 1, 0, 20, 14.58);
  31. test_one<Polygon, Ring, MultiPolygon>("simplex_multi_r_mp",
  32. case_single_simplex, case_multi_simplex[0],
  33. 1, 0, 20, 14.58);
  34. test_one<Ring, MultiPolygon, Polygon>("simplex_multi_mp_r",
  35. case_multi_simplex[0], case_single_simplex,
  36. 1, 0, 20, 14.58);
  37. // Normal test cases
  38. test_one<Polygon, MultiPolygon, MultiPolygon>("case_multi_no_ip",
  39. case_multi_no_ip[0], case_multi_no_ip[1],
  40. 4, 0, 16, 66.5);
  41. test_one<Polygon, MultiPolygon, MultiPolygon>("case_multi_2",
  42. case_multi_2[0], case_multi_2[1],
  43. 3, 0, 16, 59.1);
  44. // Constructed cases for multi/touch/equal/etc
  45. test_one<Polygon, MultiPolygon, MultiPolygon>("case_61_multi",
  46. case_61_multi[0], case_61_multi[1],
  47. 1, 0, 11, 4.0);
  48. test_one<Polygon, MultiPolygon, MultiPolygon>("case_62_multi",
  49. case_62_multi[0], case_62_multi[1],
  50. 2, 0, 10, 2.0);
  51. test_one<Polygon, MultiPolygon, MultiPolygon>("case_63_multi",
  52. case_63_multi[0], case_63_multi[1],
  53. 2, 0, 10, 2.0);
  54. test_one<Polygon, MultiPolygon, MultiPolygon>("case_64_multi",
  55. case_64_multi[0], case_64_multi[1],
  56. 1, 0, 9, 3.0);
  57. test_one<Polygon, MultiPolygon, MultiPolygon>("case_65_multi",
  58. case_65_multi[0], case_65_multi[1],
  59. 3, 0, 15, 4.0);
  60. test_one<Polygon, MultiPolygon, MultiPolygon>("case_66_multi",
  61. case_66_multi[0], case_66_multi[1],
  62. 3, 0, 23, 7.0);
  63. test_one<Polygon, MultiPolygon, MultiPolygon>("case_75_multi",
  64. case_75_multi[0], case_75_multi[1],
  65. 5, 0, 25, 5.0);
  66. test_one<Polygon, MultiPolygon, MultiPolygon>("case_76_multi",
  67. case_76_multi[0], case_76_multi[1],
  68. 5, 0, 31, 8.0);
  69. test_one<Polygon, MultiPolygon, MultiPolygon>("case_89_multi",
  70. case_89_multi[0], case_89_multi[1],
  71. 1, 0, 13, 6);
  72. test_one<Polygon, MultiPolygon, MultiPolygon>("case_101_multi",
  73. case_101_multi[0], case_101_multi[1],
  74. 1, 0, 32, 22.25);
  75. test_one<Polygon, MultiPolygon, MultiPolygon>("case_103_multi",
  76. case_103_multi[0], case_103_multi[1],
  77. 1, 0, 7, 25);
  78. test_one<Polygon, MultiPolygon, MultiPolygon>("case_104_multi",
  79. case_104_multi[0], case_104_multi[1],
  80. 1, 0, 8, 25);
  81. test_one<Polygon, MultiPolygon, MultiPolygon>("case_105_multi",
  82. case_105_multi[0], case_105_multi[1],
  83. 1, 0, 5, 25);
  84. test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_1",
  85. case_recursive_boxes_1[0], case_recursive_boxes_1[1],
  86. 1, 1, 36, 97.0);
  87. test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_2",
  88. case_recursive_boxes_2[0], case_recursive_boxes_2[1],
  89. 1, 0, 14, 100.0); // Area from SQL Server
  90. test_one<Polygon, MultiPolygon, MultiPolygon>("case_recursive_boxes_3",
  91. case_recursive_boxes_3[0], case_recursive_boxes_3[1],
  92. 17, 0, 159, 56.5); // Area from SQL Server
  93. test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_a",
  94. ggl_list_20120915_h2[0], ggl_list_20120915_h2[1],
  95. 1, 0, 12, 23.0); // Area from SQL Server
  96. test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_b",
  97. ggl_list_20120915_h2[0], ggl_list_20120915_h2[2],
  98. 1, 0, 12, 23.0); // Area from SQL Server
  99. }
  100. template <typename P>
  101. void test_all()
  102. {
  103. {
  104. typedef bg::model::ring<P> ring;
  105. typedef bg::model::polygon<P> polygon;
  106. typedef bg::model::multi_polygon<polygon> multi_polygon;
  107. test_areal<ring, polygon, multi_polygon>();
  108. }
  109. {
  110. typedef bg::model::ring<P, false> ring_ccw;
  111. typedef bg::model::polygon<P, false> polygon_ccw;
  112. typedef bg::model::multi_polygon<polygon_ccw> multi_polygon_ccw;
  113. test_areal<ring_ccw, polygon_ccw, multi_polygon_ccw>();
  114. }
  115. }
  116. int test_main(int, char* [])
  117. {
  118. test_all<bg::model::d2::point_xy<double> >();
  119. #ifdef HAVE_TTMATH
  120. std::cout << "Testing TTMATH" << std::endl;
  121. test_all<bg::model::d2::point_xy<ttmath_big> >();
  122. #endif
  123. return 0;
  124. }