]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/geometry/test/algorithms/distance/distance.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / geometry / test / algorithms / distance / distance.cpp
index 30e8eb63f36024bd2d8ebdcdfcd16d0222f37950..da260cb5e0ab4f0c5218534c8955b0b5d8b11429 100644 (file)
@@ -5,6 +5,9 @@
 // Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
 // Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
 
+// Copyright (c) 2021 Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
 
@@ -20,8 +23,6 @@
 #include "test_distance.hpp"
 
 #include <boost/array.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/typeof/typeof.hpp>
 
 #include <boost/geometry/geometries/geometries.hpp>
 #include <boost/geometry/geometries/point_xy.hpp>
@@ -81,7 +82,10 @@ void test_distance_point()
         BOOST_CONCEPT_ASSERT( (bg::concepts::PointDistanceStrategy<taxicab_distance, P, P>) );
 
         typedef typename services::return_type<taxicab_distance, P, P>::type cab_return_type;
-        BOOST_MPL_ASSERT((boost::is_same<cab_return_type, typename bg::coordinate_type<P>::type>));
+        BOOST_GEOMETRY_STATIC_ASSERT(
+            (std::is_same<cab_return_type, typename bg::coordinate_type<P>::type>::value),
+            "Unexpected result type",
+            cab_return_type, typename bg::coordinate_type<P>::type);
 
         taxicab_distance tcd;
         cab_return_type d = bg::distance(p1, p2, tcd);
@@ -412,8 +416,8 @@ void test_large_integers()
         bg::read_wkt(a, da);
         bg::read_wkt(b, db);
 
-        BOOST_AUTO(idist, bg::distance(ia, ib));
-        BOOST_AUTO(ddist, bg::distance(da, db));
+        auto const idist = bg::distance(ia, ib);
+        auto const ddist = bg::distance(da, db);
 
         BOOST_CHECK_MESSAGE(std::abs(idist - ddist) < 0.1,
                 "within<a double> different from within<an int>");
@@ -431,8 +435,8 @@ void test_large_integers()
         bg::read_wkt(a, da);
         bg::read_wkt(b, db);
 
-        BOOST_AUTO(idist, bg::distance(ia, ib));
-        BOOST_AUTO(ddist, bg::distance(da, db));
+        auto const idist = bg::distance(ia, ib);
+        auto const ddist = bg::distance(da, db);
 
         BOOST_CHECK_MESSAGE(std::abs(idist - ddist) < 0.1,
                 "within<a double> different from within<an int>");
@@ -457,16 +461,14 @@ void test_variant()
 
     variant_type v1, v2;
     
-    BOOST_MPL_ASSERT((
-        boost::is_same
-            <
-                typename bg::distance_result
-                    <
-                        variant_type, variant_type, bg::default_strategy
-                    >::type,
-                double
-            >
-    ));
+    using distance_t = typename bg::distance_result
+        <
+            variant_type, variant_type, bg::default_strategy
+        >::type;
+    BOOST_GEOMETRY_STATIC_ASSERT(
+        (std::is_same<distance_t, double>::value),
+        "Unexpected result type",
+        distance_t, double);
 
     // Default strategy
     v1 = point;
@@ -489,6 +491,24 @@ void test_variant()
     //BOOST_CHECK_CLOSE(bg::distance(point, v2, s), bg::distance(point, point, s), 0.0001);
 }
 
+template <typename T>
+void test_geometry_collection()
+{
+    using point_type = bg::model::point<T, 2, bg::cs::cartesian>;
+    using segment_type = bg::model::segment<point_type>;
+    using box_type = bg::model::box<point_type>;
+    using variant_type = boost::variant<point_type, segment_type, box_type>;
+    using gc_type = bg::model::geometry_collection<variant_type>;
+
+    point_type p1 {1, 3}, p2 {2, 3};
+    segment_type s1 {{2, 2}, {4, 4}}, s2 {{3, 2}, {5, 4}};
+    gc_type gc1 {p1, s1}, gc2 {p2, s2};
+
+    BOOST_CHECK_CLOSE(bg::distance(p1, gc2), bg::distance(p1, p2), 0.0001);
+    BOOST_CHECK_CLOSE(bg::distance(gc1, s2), bg::distance(s1, s2), 0.0001);
+    BOOST_CHECK_CLOSE(bg::distance(gc1, gc2), bg::distance(s1, s2), 0.0001);
+}
+
 int test_main(int, char* [])
 {
 #ifdef TEST_ARRAY
@@ -523,5 +543,7 @@ int test_main(int, char* [])
     test_variant<double>();
     test_variant<int>();
 
+    test_geometry_collection<double>();
+
     return 0;
 }