summaryrefslogtreecommitdiff
path: root/libs/geometry/test/iterators/point_iterator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/geometry/test/iterators/point_iterator.cpp')
-rw-r--r--libs/geometry/test/iterators/point_iterator.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/libs/geometry/test/iterators/point_iterator.cpp b/libs/geometry/test/iterators/point_iterator.cpp
index 2b5af3b3a..b07d64ea2 100644
--- a/libs/geometry/test/iterators/point_iterator.cpp
+++ b/libs/geometry/test/iterators/point_iterator.cpp
@@ -22,8 +22,11 @@
#include <boost/test/included/unit_test.hpp>
#include <boost/assign/list_of.hpp>
+#include <boost/concept_check.hpp>
#include <boost/core/ignore_unused.hpp>
+#include <boost/iterator/iterator_concepts.hpp>
#include <boost/tuple/tuple.hpp>
+#include <boost/type_traits/is_const.hpp>
#include <boost/geometry/core/point_type.hpp>
#include <boost/geometry/multi/core/point_type.hpp>
@@ -93,6 +96,36 @@ inline std::ostream& print_point_range(std::ostream& os,
return os;
}
+
+template
+<
+ typename Geometry,
+ bool IsConst = boost::is_const<Geometry>::value
+>
+struct test_iterator_concepts
+{
+ typedef bg::point_iterator<Geometry> iterator;
+ BOOST_CONCEPT_ASSERT(( boost::BidirectionalIteratorConcept<iterator> ));
+ BOOST_CONCEPT_ASSERT(( boost_concepts::ReadableIteratorConcept<iterator> ));
+ BOOST_CONCEPT_ASSERT(( boost_concepts::LvalueIteratorConcept<iterator> ));
+ BOOST_CONCEPT_ASSERT
+ (( boost_concepts::BidirectionalTraversalConcept<iterator> ));
+};
+
+template <typename Geometry>
+struct test_iterator_concepts<Geometry, false>
+ : test_iterator_concepts<Geometry, true>
+{
+ typedef bg::point_iterator<Geometry> iterator;
+ BOOST_CONCEPT_ASSERT
+ (( boost::Mutable_BidirectionalIteratorConcept<iterator> ));
+ BOOST_CONCEPT_ASSERT
+ (( boost_concepts::WritableIteratorConcept<iterator> ));
+ BOOST_CONCEPT_ASSERT
+ (( boost_concepts::SwappableIteratorConcept<iterator> ));
+};
+
+
struct equals
{
template <typename Iterator>
@@ -205,6 +238,8 @@ struct test_point_iterator_of_geometry
{
typedef bg::point_iterator<G> point_iterator;
+ test_iterator_concepts<G>();
+
point_iterator begin = bg::points_begin(geometry);
point_iterator end = bg::points_end(geometry);