]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/geometry/test/iterators/closing_iterator.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / geometry / test / iterators / closing_iterator.cpp
index 9ac43634b7d1087a7b6c4b85a6ffd92d2d55b17e..a071b755f89e46022dcbbb0b7cab311cdbc78d15 100644 (file)
@@ -5,6 +5,9 @@
 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
 // Copyright (c) 2009-2012 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.
 
 
 #include <algorithm>
 #include <iterator>
-#include <sstream>
-#include <string>
 
 #include <geometry_test_common.hpp>
 
 #include <boost/geometry/iterators/closing_iterator.hpp>
 
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/io/wkt/read.hpp>
-#include <boost/geometry/geometries/geometries.hpp>
 #include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/ring.hpp>
 
 #include <boost/range/adaptor/transformed.hpp>
 
 
+void test_concept()
+{
+    std::vector<int> v = {1, 2, 3};
+
+    using iterator = bg::closing_iterator<std::vector<int>>;
+    using const_iterator = bg::closing_iterator<std::vector<int> const>;
+
+    iterator it, it2(v);
+    const_iterator cit, cit2(v);
+
+    BOOST_CHECK((std::is_same<decltype(*it2), const int&>::value));
+    BOOST_CHECK((std::is_same<decltype(*cit2), const int&>::value));
+
+    it = it2;
+    cit = cit2;
+    BOOST_CHECK_EQUAL(*it, 1);
+    BOOST_CHECK_EQUAL(*cit, 1);
+    cit = ++it;
+    BOOST_CHECK_EQUAL(*it, 2);
+    BOOST_CHECK_EQUAL(*cit, 2);
+    // This is ok because both of these iterators are in fact const iterators
+    it = ++cit;
+    BOOST_CHECK_EQUAL(*it, 3);
+    BOOST_CHECK_EQUAL(*cit, 3);
+
+    // Check compilations, it is (since Oct 2010) random access
+    it--;
+    --it;
+    it += 2;
+    it -= 2;
+}
+
 // The closing iterator should also work on normal std:: containers
 void test_empty_non_geometry()
 {
@@ -39,49 +70,33 @@ void test_empty_non_geometry()
             std::vector<int> const
         > closing_iterator;
 
-
     closing_iterator it(v);
     closing_iterator end(v, true);
 
-    std::ostringstream out;
-    for (; it != end; ++it)
-    {
-        out << *it;
-    }
-    BOOST_CHECK_EQUAL(out.str(), "");
+    BOOST_CHECK(it == end);
 }
 
 void test_non_geometry()
 {
-    std::vector<int> v;
-    v.push_back(1);
-    v.push_back(2);
-    v.push_back(3);
-
+    std::vector<int> v = {1, 2, 3};
+    std::vector<int> closed_v = { 1, 2, 3, 1 };
+    
     typedef bg::closing_iterator
         <
             std::vector<int> const
         > closing_iterator;
 
-
     closing_iterator it(v);
     closing_iterator end(v, true);
-
-    std::ostringstream out;
-    for (; it != end; ++it)
-    {
-        out << *it;
-    }
-    BOOST_CHECK_EQUAL(out.str(), "1231");
+    
+    BOOST_CHECK(std::equal(it, end, closed_v.begin(), closed_v.end()));
 }
 
 void test_transformed_non_geometry()
 {
-    std::vector<int> v;
-    v.push_back(-1);
-    v.push_back(-2);
-    v.push_back(-3);
-
+    std::vector<int> v = {-1, -2, -3};
+    std::vector<int> closed_v = { 1, 2, 3, 1 };
+    
     typedef boost::transformed_range
         <
             std::negate<int>,
@@ -97,78 +112,50 @@ void test_transformed_non_geometry()
     closing_iterator it(v2);
     closing_iterator end(v2, true);
 
-    std::ostringstream out;
-    for (; it != end; ++it)
-    {
-        out << *it;
-    }
-    BOOST_CHECK_EQUAL(out.str(), "1231");
+    BOOST_CHECK(std::equal(it, end, closed_v.begin(), closed_v.end()));
 }
 
-
-
-
-
-template <typename Geometry>
-void test_geometry(std::string const& wkt)
+template <typename P>
+void test_geometry()
 {
-    Geometry geometry;
-    bg::read_wkt(wkt, geometry);
-    typedef bg::closing_iterator<Geometry const> closing_iterator;
+    bg::model::ring<P> geometry = { {1, 1}, {1, 4}, {4, 4}, {4, 1} };
+    bg::model::ring<P> closed = { {1, 1}, {1, 4}, {4, 4}, {4, 1}, {1, 1} };
+    
+    using closing_iterator = bg::closing_iterator<bg::model::ring<P> const>;
 
+    auto pred = [](P const& p1, P const& p2)
+        {
+            return bg::get<0>(p1) == bg::get<0>(p2) && bg::get<1>(p1) == bg::get<1>(p2);
+        };
 
     // 1. Test normal behaviour
     {
         closing_iterator it(geometry);
         closing_iterator end(geometry, true);
 
-        std::ostringstream out;
-        for (; it != end; ++it)
-        {
-            out << " " << bg::get<0>(*it) << bg::get<1>(*it);
-        }
-        BOOST_CHECK_EQUAL(out.str(), " 11 14 44 41 11");
-
-        // Check compilations, it is (since Oct 2010) random access
-        it--;
-        --it;
-        it += 2;
-        it -= 2;
+        BOOST_CHECK((std::equal(it, end, closed.begin(), closed.end(), pred)));
     }
 
     // 2: check copy behaviour
     {
-        typedef typename boost::range_iterator<Geometry const>::type normal_iterator;
-        Geometry copy;
+        bg::model::ring<P> copy;
 
-        std::copy<closing_iterator>(
-            closing_iterator(geometry),
-            closing_iterator(geometry, true),
-            std::back_inserter(copy));
+        std::copy(closing_iterator(geometry), closing_iterator(geometry, true),
+                  std::back_inserter(copy));
 
-        std::ostringstream out;
-        for (normal_iterator cit = boost::begin(copy); cit != boost::end(copy); ++cit)
-        {
-                out << " " << bg::get<0>(*cit) << bg::get<1>(*cit);
-        }
-        BOOST_CHECK_EQUAL(out.str(), " 11 14 44 41 11");
+        BOOST_CHECK((std::equal(copy.begin(), copy.end(), closed.begin(), closed.end(), pred)));
     }
 }
 
 
-template <typename P>
-void test_all()
+int test_main(int, char* [])
 {
+    test_concept();
     test_empty_non_geometry();
     test_non_geometry();
     test_transformed_non_geometry();
-    test_geometry<bg::model::ring<P> >("POLYGON((1 1,1 4,4 4,4 1))");
-}
 
-
-int test_main(int, char* [])
-{
-    test_all<bg::model::d2::point_xy<double> >();
+    test_geometry<bg::model::d2::point_xy<double>>();
 
     return 0;
 }