type_erased_mix_values.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Boost.Range library
  2. //
  3. // Copyright Neil Groves 2014. 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. #include <boost/range/adaptor/type_erased.hpp>
  9. #include "type_erased_test.hpp"
  10. #include <boost/test/unit_test.hpp>
  11. #include <vector>
  12. namespace boost_range_adaptor_type_erased_test
  13. {
  14. namespace
  15. {
  16. template<
  17. class Traversal
  18. , class ValueType
  19. , class SourceValueType
  20. , class SourceReference
  21. , class TargetValueType
  22. , class TargetReference
  23. >
  24. void mix_values_impl()
  25. {
  26. typedef std::vector<ValueType> Container;
  27. typedef typename boost::any_range_type_generator<
  28. Container
  29. , SourceValueType
  30. , Traversal
  31. , SourceReference
  32. >::type source_type;
  33. typedef typename boost::any_range_type_generator<
  34. Container
  35. , TargetValueType
  36. , Traversal
  37. , TargetReference
  38. >::type target_type;
  39. Container test_data;
  40. for (int i = 0; i < 10; ++i)
  41. test_data.push_back(i);
  42. const source_type source_data(test_data);
  43. target_type t1(source_data);
  44. BOOST_CHECK_EQUAL_COLLECTIONS(source_data.begin(), source_data.end(),
  45. t1.begin(), t1.end());
  46. target_type t2;
  47. t2 = source_data;
  48. BOOST_CHECK_EQUAL_COLLECTIONS(source_data.begin(), source_data.end(),
  49. t2.begin(), t2.end());
  50. }
  51. template<class Traversal>
  52. void mix_values_driver()
  53. {
  54. mix_values_impl<
  55. Traversal,
  56. MockType,
  57. MockType2, const MockType&,
  58. MockType, const MockType&
  59. >();
  60. }
  61. void mix_values()
  62. {
  63. mix_values_driver<boost::single_pass_traversal_tag >();
  64. mix_values_driver<boost::forward_traversal_tag >();
  65. mix_values_driver<boost::bidirectional_traversal_tag >();
  66. mix_values_driver<boost::random_access_traversal_tag >();
  67. }
  68. } // anonymous namespace
  69. } // namespace boost_range_adaptor_type_erased_test
  70. boost::unit_test::test_suite*
  71. init_unit_test_suite(int, char*[])
  72. {
  73. boost::unit_test::test_suite* test =
  74. BOOST_TEST_SUITE("RangeTestSuite.adaptor.type_erased_mix_values");
  75. test->add(BOOST_TEST_CASE(
  76. &boost_range_adaptor_type_erased_test::mix_values));
  77. return test;
  78. }