From bda5890235b2724677d560f4f5588b0d02fd0992 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Tue, 18 Nov 2003 04:08:40 +0000 Subject: [PATCH] iterator_adaptor_test [SVN r20842] --- test/iterator_adaptor_test.cpp | 57 +++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/test/iterator_adaptor_test.cpp b/test/iterator_adaptor_test.cpp index 79b9001..9ab3583 100644 --- a/test/iterator_adaptor_test.cpp +++ b/test/iterator_adaptor_test.cpp @@ -14,6 +14,10 @@ #include #include +#if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) +# include +# include +#endif #include # include @@ -26,8 +30,6 @@ #include "static_assert_same.hpp" -struct my_iterator_tag : public std::random_access_iterator_tag { }; - using boost::dummyT; struct mult_functor { @@ -83,7 +85,7 @@ struct ptr_iterator ptr_iterator , V* , V - , std::random_access_iterator_tag + , boost::random_access_traversal_tag #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) , V& #endif @@ -94,7 +96,7 @@ private: ptr_iterator , V* , V - , std::random_access_iterator_tag + , boost::random_access_traversal_tag #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) , V& #endif @@ -114,13 +116,13 @@ public: }; // Non-functional iterator for category modification checking -template -struct modify_category +template +struct modify_traversal : boost::iterator_adaptor< - modify_category + modify_traversal , Iter , boost::use_default - , Category + , Traversal > {}; @@ -179,6 +181,12 @@ struct constant_iterator : base_t(it) {} }; +char (& traversal(boost::incrementable_traversal_tag) )[1]; +char (& traversal(boost::single_pass_traversal_tag ) )[2]; +char (& traversal(boost::forward_traversal_tag ) )[3]; +char (& traversal(boost::bidirectional_traversal_tag) )[4]; +char (& traversal(boost::random_access_traversal_tag) )[5]; + int main() { @@ -219,7 +227,11 @@ main() typedef ptr_iterator Iter1; test = static_assert_same::value; test = static_assert_same::value; - test = static_assert_same::value; test = static_assert_same::value; +#if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) + BOOST_STATIC_ASSERT(boost::is_readable_iterator::value); + BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::value); +#endif + test = static_assert_same::value; } { @@ -231,17 +243,26 @@ main() test = static_assert_same::value; test = static_assert_same::value; - test = static_assert_same::value; - test = static_assert_same::value; - - // Test category modification - typedef modify_category ReadableIter; - test = static_assert_same::value; +#if !BOOST_WORKAROUND(__MWERKS__, <= 0x2407) + BOOST_STATIC_ASSERT(boost::is_mutable_lvalue_iterator::value); + BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::value); +#endif + + typedef modify_traversal IncrementableIter; - typedef modify_category IncrementableIter; - test = static_assert_same::value; - test = static_assert_same::value; + BaseIter::iterator_category base_cat; + boost::random_access_traversal_tag random_traversal; + BOOST_STATIC_ASSERT( + sizeof(traversal(base_cat)) + == sizeof(traversal(random_traversal)) + ); + IncrementableIter::iterator_category incr_cat; + boost::incrementable_traversal_tag incrementable_traversal; + BOOST_STATIC_ASSERT( + sizeof(traversal(incr_cat)) + == sizeof(traversal(incrementable_traversal)) + ); } // Test the iterator_adaptor