From db9a9a12ba25353c94417dba24fab35cee16bde1 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 9 Nov 2018 16:49:19 +0100 Subject: bug #1619: make const and non-const iterators compatible --- test/stl_iterators.cpp | 58 +++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 24 deletions(-) (limited to 'test/stl_iterators.cpp') diff --git a/test/stl_iterators.cpp b/test/stl_iterators.cpp index ff89ec6ee..8c56db506 100644 --- a/test/stl_iterators.cpp +++ b/test/stl_iterators.cpp @@ -61,32 +61,42 @@ void check_begin_end_for_loop(Xpr xpr) i = 0; for(typename Xpr::const_iterator it = cxpr.begin(); it!=cxpr.end(); ++it) { VERIFY_IS_EQUAL(*it,xpr[i++]); } - // Needs to be uncommented while fixing bug 1619 - // i = 0; - // for(typename Xpr::const_iterator it = xpr.begin(); it!=xpr.end(); ++it) { VERIFY_IS_EQUAL(*it,xpr[i++]); } + i = 0; + for(typename Xpr::const_iterator it = xpr.begin(); it!=xpr.end(); ++it) { VERIFY_IS_EQUAL(*it,xpr[i++]); } + + { + // simple API check + typename Xpr::const_iterator cit; + cit = xpr.begin(); + cit = xpr.cbegin(); + } + + VERIFY( xpr.end() -xpr.begin() == xpr.size() ); + VERIFY( xpr.cend()-xpr.begin() == xpr.size() ); + VERIFY( xpr.end() -xpr.cbegin() == xpr.size() ); + VERIFY( xpr.cend()-xpr.cbegin() == xpr.size() ); if(xpr.size()>0) { VERIFY(xpr.begin() != xpr.end()); VERIFY(xpr.begin() < xpr.end()); VERIFY(xpr.begin() <= xpr.end()); VERIFY(!(xpr.begin() == xpr.end())); - VERIFY(!(xpr.begin() < xpr.end())); - VERIFY(!(xpr.begin() <= xpr.end())); + VERIFY(!(xpr.begin() > xpr.end())); + VERIFY(!(xpr.begin() >= xpr.end())); - // Needs to be uncommented while fixing bug 1619 - // VERIFY(xpr.cbegin() != xpr.end()); - // VERIFY(xpr.cbegin() < xpr.end()); - // VERIFY(xpr.cbegin() <= xpr.end()); - // VERIFY(!(xpr.cbegin() == xpr.end())); - // VERIFY(!(xpr.cbegin() < xpr.end())); - // VERIFY(!(xpr.cbegin() <= xpr.end())); - - // VERIFY(xpr.begin() != xpr.cend()); - // VERIFY(xpr.begin() < xpr.cend()); - // VERIFY(xpr.begin() <= xpr.cend()); - // VERIFY(!(xpr.begin() == xpr.cend())); - // VERIFY(!(xpr.begin() < xpr.cend())); - // VERIFY(!(xpr.begin() <= xpr.cend())); + VERIFY(xpr.cbegin() != xpr.end()); + VERIFY(xpr.cbegin() < xpr.end()); + VERIFY(xpr.cbegin() <= xpr.end()); + VERIFY(!(xpr.cbegin() == xpr.end())); + VERIFY(!(xpr.cbegin() > xpr.end())); + VERIFY(!(xpr.cbegin() >= xpr.end())); + + VERIFY(xpr.begin() != xpr.cend()); + VERIFY(xpr.begin() < xpr.cend()); + VERIFY(xpr.begin() <= xpr.cend()); + VERIFY(!(xpr.begin() == xpr.cend())); + VERIFY(!(xpr.begin() > xpr.cend())); + VERIFY(!(xpr.begin() >= xpr.cend())); } } @@ -419,11 +429,11 @@ void test_stl_iterators(int rows=Rows, int cols=Cols) // a valid type, the first overload is not viable, and the second // overload will be picked. template ().begin()), - class = decltype(::std::declval().end()), - class = decltype(++::std::declval()), - class = decltype(*::std::declval()), - class = typename C::const_iterator> + class Iterator = decltype(::std::declval().begin()), + class = decltype(::std::declval().end()), + class = decltype(++::std::declval()), + class = decltype(*::std::declval()), + class = typename C::const_iterator> bool IsContainerType(int /* dummy */) { return true; } template -- cgit v1.2.3