1 // Boost.Range library 2 // 3 // Copyright Neil Groves 2010. Use, modification and 4 // distribution is subject to the Boost Software License, Version 5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 // 8 // 9 // For more information, see http://www.boost.org/libs/range/ 10 // 11 #include <boost/range/has_range_iterator.hpp> 12 #include <boost/config.hpp> 13 14 #include <boost/test/test_tools.hpp> 15 #include <boost/test/unit_test.hpp> 16 17 #include <vector> 18 19 namespace 20 { 21 class MockClassWithoutIterators {}; 22 23 template<typename Container> test_has_range_iterator_impl(const bool expected_value)24 void test_has_range_iterator_impl(const bool expected_value) 25 { 26 BOOST_CHECK_EQUAL( boost::has_range_iterator<Container>::value, expected_value ); 27 } 28 29 template<typename Container> test_has_range_const_iterator_impl(const bool expected_value)30 void test_has_range_const_iterator_impl(const bool expected_value) 31 { 32 BOOST_CHECK_EQUAL( boost::has_range_const_iterator<Container>::value, expected_value ); 33 } 34 test_has_range_iterator()35 void test_has_range_iterator() 36 { 37 test_has_range_iterator_impl< std::vector<int> >(true); 38 test_has_range_iterator_impl< MockClassWithoutIterators >(false); 39 40 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES 41 test_has_range_iterator_impl<std::vector<int>&&>(true); 42 test_has_range_iterator_impl<MockClassWithoutIterators&&>(false); 43 #endif 44 } 45 test_has_range_const_iterator()46 void test_has_range_const_iterator() 47 { 48 test_has_range_const_iterator_impl< std::vector<int> >(true); 49 test_has_range_const_iterator_impl< MockClassWithoutIterators >(false); 50 51 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES 52 test_has_range_const_iterator_impl<std::vector<int>&&>(true); 53 test_has_range_const_iterator_impl<MockClassWithoutIterators&&>(false); 54 #endif 55 } 56 } 57 58 boost::unit_test::test_suite* init_unit_test_suite(int argc,char * argv[])59init_unit_test_suite(int argc, char* argv[]) 60 { 61 boost::unit_test::test_suite* test 62 = BOOST_TEST_SUITE( "RangeTestSuite.has_range_iterator" ); 63 64 test->add(BOOST_TEST_CASE(&test_has_range_iterator)); 65 test->add(BOOST_TEST_CASE(&test_has_range_const_iterator)); 66 67 return test; 68 } 69