From 021e048e067bc446bdd02d3e1664ddad7a8f51b3 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Fri, 30 May 2003 03:08:22 +0000 Subject: [PATCH] Add more tests [SVN r1294] --- test/concept_tests.cpp | 39 ++++++++++++++++++++ test/unit_tests.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) diff --git a/test/concept_tests.cpp b/test/concept_tests.cpp index cfdbec8..698c6bc 100644 --- a/test/concept_tests.cpp +++ b/test/concept_tests.cpp @@ -50,9 +50,48 @@ struct old_iterator }; old_iterator operator+(std::ptrdiff_t, old_iterator x) { return x; } +void test_tag_convertibility() +{ +#ifndef BOOST_NO_IS_CONVERTIBLE + { + typedef boost::iterator_tag< + boost::writable_lvalue_iterator_tag + , boost::single_pass_iterator_tag + > tag; + + BOOST_STATIC_ASSERT(( + boost::is_convertible::value + )); + BOOST_STATIC_ASSERT(( + boost::is_convertible::value + )); + BOOST_STATIC_ASSERT(( + !boost::is_convertible::value + )); + } + { + typedef boost::iterator_tag< + boost::readable_lvalue_iterator_tag + , boost::single_pass_iterator_tag + > tag; + BOOST_STATIC_ASSERT(( + boost::is_convertible::value + )); + BOOST_STATIC_ASSERT(( + !boost::is_convertible::value + )); + BOOST_STATIC_ASSERT(( + !boost::is_convertible::value + )); + } +#endif +} + int main() { + test_tag_convertibility(); + typedef boost::iterator_tag< boost::writable_lvalue_iterator_tag, boost::random_access_traversal_tag > tag; // BOOST_STATIC_ASSERT((boost::detail::is_random_access_iterator::value)); diff --git a/test/unit_tests.cpp b/test/unit_tests.cpp index d06b769..bd533a2 100755 --- a/test/unit_tests.cpp +++ b/test/unit_tests.cpp @@ -4,6 +4,8 @@ // "as is" without express or implied warranty, and with no claim as // to its suitability for any purpose. #include +#include +#include struct X { int a; }; @@ -28,8 +30,90 @@ void operator_arrow_test() take_xptr(Xiter(&x).operator->()); } +template +struct static_assert_same +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +{ + template + static int check(V, V); + enum { value = sizeof(check(boost::type(), boost::type())) }; +} +#endif +; + +#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +struct static_assert_same +{ + enum { value }; +}; +#endif + +template +struct static_assert_min_cat + : static_assert_same< + typename boost::detail::minimum_category::type, Min + > +{}; + +void category_test() +{ + using namespace boost; + using namespace boost::detail; + + BOOST_STATIC_ASSERT(( + !is_tag< + input_output_iterator_tag + , std::input_iterator_tag>::value)); + + BOOST_STATIC_ASSERT(( + !is_tag< + input_output_iterator_tag + , std::output_iterator_tag>::value)); + + BOOST_STATIC_ASSERT(( + is_tag< + std::input_iterator_tag + , input_output_iterator_tag>::value)); + + BOOST_STATIC_ASSERT(( + is_tag< + std::output_iterator_tag + , input_output_iterator_tag>::value)); + + BOOST_STATIC_ASSERT(( + is_tag< + input_output_iterator_tag + , std::forward_iterator_tag>::value)); + + int test = static_assert_min_cat< + std::input_iterator_tag,input_output_iterator_tag, std::input_iterator_tag + >::value; + + test = static_assert_min_cat< + input_output_iterator_tag,std::input_iterator_tag, std::input_iterator_tag + >::value; + + test = static_assert_min_cat< + input_output_iterator_tag,std::forward_iterator_tag, input_output_iterator_tag + >::value; + + test = static_assert_min_cat< + std::input_iterator_tag,std::forward_iterator_tag, std::input_iterator_tag + >::value; + + test = static_assert_min_cat< + std::input_iterator_tag,std::random_access_iterator_tag, std::input_iterator_tag + >::value; + + test = static_assert_min_cat< + std::output_iterator_tag,std::random_access_iterator_tag, std::output_iterator_tag + >::value; +} + int main() { + category_test(); operator_arrow_test(); return 0; }