has_range_iterator.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. #include <boost/test/test_tools.hpp>
  14. #include <boost/test/unit_test.hpp>
  15. #include <vector>
  16. namespace
  17. {
  18. class MockClassWithoutIterators {};
  19. template<typename Container>
  20. void test_has_range_iterator_impl(const bool expected_value)
  21. {
  22. BOOST_CHECK_EQUAL( boost::has_range_iterator<Container>::value, expected_value );
  23. }
  24. template<typename Container>
  25. void test_has_range_const_iterator_impl(const bool expected_value)
  26. {
  27. BOOST_CHECK_EQUAL( boost::has_range_const_iterator<Container>::value, expected_value );
  28. }
  29. void test_has_range_iterator()
  30. {
  31. test_has_range_iterator_impl< std::vector<int> >(true);
  32. test_has_range_iterator_impl< MockClassWithoutIterators >(false);
  33. #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
  34. test_has_range_iterator_impl<std::vector<int>&&>(true);
  35. test_has_range_iterator_impl<MockClassWithoutIterators&&>(false);
  36. #endif
  37. }
  38. void test_has_range_const_iterator()
  39. {
  40. test_has_range_const_iterator_impl< std::vector<int> >(true);
  41. test_has_range_const_iterator_impl< MockClassWithoutIterators >(false);
  42. #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
  43. test_has_range_const_iterator_impl<std::vector<int>&&>(true);
  44. test_has_range_const_iterator_impl<MockClassWithoutIterators&&>(false);
  45. #endif
  46. }
  47. }
  48. boost::unit_test::test_suite*
  49. init_unit_test_suite(int argc, char* argv[])
  50. {
  51. boost::unit_test::test_suite* test
  52. = BOOST_TEST_SUITE( "RangeTestSuite.has_range_iterator" );
  53. test->add(BOOST_TEST_CASE(&test_has_range_iterator));
  54. test->add(BOOST_TEST_CASE(&test_has_range_const_iterator));
  55. return test;
  56. }