#include #include #include #include #include #include BOOST_AUTO_TEST_SUITE(test_widest_convertible) template void assert_correct_category_sequence() { BOOST_STATIC_ASSERT(( boost::is_same< typename boost::widest_convertible_sequence::type, CatRes >::value )); } template void assert_correct_category_symmetric() { BOOST_STATIC_ASSERT(( boost::is_same< typename boost::widest_convertible_binary::type, CatRes >::value )); BOOST_STATIC_ASSERT(( boost::is_same< typename boost::widest_convertible_binary::type, CatRes >::value )); }; #define ASSERT_CORRECT_CATEGORY_SYMMETRIC(CatA, CatB, CatRes) \ assert_correct_category_symmetric< CatA , CatB , CatRes>(); #define ASSERT_CORRECT_CATEGORY_SEQUENCE(Sequence, CatRes) \ assert_correct_category_sequence< Sequence , CatRes >(); BOOST_AUTO_TEST_CASE(test_incrementable_tag) { ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::incrementable_traversal_tag, boost::incrementable_traversal_tag, boost::incrementable_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::incrementable_traversal_tag, boost::single_pass_traversal_tag, boost::incrementable_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::incrementable_traversal_tag, boost::forward_traversal_tag, boost::incrementable_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::incrementable_traversal_tag, boost::bidirectional_traversal_tag, boost::incrementable_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::incrementable_traversal_tag, boost::random_access_traversal_tag, boost::incrementable_traversal_tag ) } BOOST_AUTO_TEST_CASE(test_single_pass_tag) { ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::single_pass_traversal_tag, boost::single_pass_traversal_tag, boost::single_pass_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::single_pass_traversal_tag, boost::forward_traversal_tag, boost::single_pass_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::single_pass_traversal_tag, boost::bidirectional_traversal_tag, boost::single_pass_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::single_pass_traversal_tag, boost::random_access_traversal_tag, boost::single_pass_traversal_tag ) } BOOST_AUTO_TEST_CASE(test_forward_tag) { ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::forward_traversal_tag, boost::forward_traversal_tag, boost::forward_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::forward_traversal_tag, boost::bidirectional_traversal_tag, boost::forward_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::forward_traversal_tag, boost::random_access_traversal_tag, boost::forward_traversal_tag ) } // copyright christoph.heindl@gmail.com 2009 BOOST_AUTO_TEST_CASE(test_bidir_tag) { ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::bidirectional_traversal_tag, boost::bidirectional_traversal_tag, boost::bidirectional_traversal_tag ) ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::bidirectional_traversal_tag, boost::random_access_traversal_tag, boost::bidirectional_traversal_tag ) } BOOST_AUTO_TEST_CASE(test_random_tag) { ASSERT_CORRECT_CATEGORY_SYMMETRIC( boost::random_access_traversal_tag, boost::random_access_traversal_tag, boost::random_access_traversal_tag ) } BOOST_AUTO_TEST_CASE(test_tag_sequence) { assert_correct_category_sequence< boost::mpl::vector<>, boost::no_traversal_tag >(); assert_correct_category_sequence< boost::mpl::vector, boost::incrementable_traversal_tag >(); assert_correct_category_sequence< boost::mpl::vector::type, boost::forward_traversal_tag >(); assert_correct_category_sequence< boost::mpl::vector::type, boost::forward_traversal_tag >(); } BOOST_AUTO_TEST_SUITE_END()