combine.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. // Boost.Range library
  2. //
  3. // Copyright Neil Groves 2014
  4. //
  5. // Copyright Thorsten Ottosen 2006. Use, modification and
  6. // distribution is subject to the Boost Software License, Version
  7. // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  8. // http://www.boost.org/LICENSE_1_0.txt)
  9. //
  10. // For more information, see http://www.boost.org/libs/range/
  11. //
  12. #include <boost/range/combine.hpp>
  13. #include <boost/range/algorithm_ext/push_back.hpp>
  14. #include <boost/test/test_tools.hpp>
  15. #include <boost/test/unit_test.hpp>
  16. #include <boost/foreach.hpp>
  17. #include <vector>
  18. namespace boost_range_test
  19. {
  20. namespace
  21. {
  22. template<typename ContRef1, typename ContRef2>
  23. void test_combine2()
  24. {
  25. std::vector<int> v;
  26. std::list<int> l;
  27. for (int i = 0; i < 10; ++i)
  28. {
  29. v.push_back(i);
  30. l.push_back(i * 2);
  31. }
  32. ContRef1& in1 = v;
  33. ContRef2& in2 = l;
  34. std::vector<boost::tuple<int,int> > output;
  35. boost::push_back(output, boost::combine(in1, in2));
  36. int index = 0;
  37. int i1, i2;
  38. BOOST_FOREACH(boost::tie(i1,i2), output)
  39. {
  40. BOOST_CHECK_EQUAL(i1, index);
  41. BOOST_CHECK_EQUAL(i2, index * 2);
  42. ++index;
  43. }
  44. }
  45. template<typename ContRef1, typename ContRef2, typename ContRef3>
  46. void test_combine3()
  47. {
  48. std::vector<int> v1;
  49. std::vector<int> v2;
  50. std::vector<int> v3;
  51. for (int i = 0; i < 10; ++i)
  52. {
  53. v1.push_back(i);
  54. v2.push_back(i * 2);
  55. v3.push_back(i * 3);
  56. }
  57. ContRef1& in1 = v1;
  58. ContRef2& in2 = v2;
  59. ContRef3& in3 = v3;
  60. std::vector<boost::tuple<int,int,int> > output;
  61. boost::push_back(output, boost::combine(in1, in2, in3));
  62. int index = 0;
  63. int i1, i2, i3;
  64. BOOST_FOREACH(boost::tie(i1,i2,i3), output)
  65. {
  66. BOOST_CHECK_EQUAL(i1, index);
  67. BOOST_CHECK_EQUAL(i2, index * 2);
  68. BOOST_CHECK_EQUAL(i3, index * 3);
  69. ++index;
  70. }
  71. }
  72. } // anonymous namespace
  73. } // namespace boost_range_test
  74. boost::unit_test::test_suite* init_unit_test_suite(int, char*[] )
  75. {
  76. boost::unit_test::test_suite* test =
  77. BOOST_TEST_SUITE( "Boost.Range combine() test suite" );
  78. test->add(BOOST_TEST_CASE((
  79. &boost_range_test::test_combine2<
  80. const std::vector<int>, const std::list<int> >)));
  81. test->add(BOOST_TEST_CASE((
  82. &boost_range_test::test_combine2<
  83. const std::vector<int>, std::list<int> >)));
  84. test->add(BOOST_TEST_CASE((
  85. &boost_range_test::test_combine2<
  86. std::vector<int>, const std::list<int> >)));
  87. test->add(BOOST_TEST_CASE((
  88. &boost_range_test::test_combine2<
  89. std::vector<int>, std::list<int> >)));
  90. test->add(BOOST_TEST_CASE((
  91. &boost_range_test::test_combine3<
  92. std::vector<int>,
  93. std::vector<int>,
  94. std::vector<int> >)));
  95. test->add(BOOST_TEST_CASE((
  96. &boost_range_test::test_combine3<
  97. std::vector<int>,
  98. std::vector<int>,
  99. const std::vector<int> >)));
  100. test->add(BOOST_TEST_CASE((
  101. &boost_range_test::test_combine3<
  102. std::vector<int>,
  103. const std::vector<int>,
  104. std::vector<int> >)));
  105. test->add(BOOST_TEST_CASE((
  106. &boost_range_test::test_combine3<
  107. std::vector<int>,
  108. const std::vector<int>,
  109. const std::vector<int> >)));
  110. test->add(BOOST_TEST_CASE((
  111. &boost_range_test::test_combine3<
  112. const std::vector<int>,
  113. std::vector<int>,
  114. std::vector<int> >)));
  115. test->add(BOOST_TEST_CASE((
  116. &boost_range_test::test_combine3<
  117. const std::vector<int>,
  118. std::vector<int>,
  119. const std::vector<int> >)));
  120. test->add(BOOST_TEST_CASE((
  121. &boost_range_test::test_combine3<
  122. const std::vector<int>,
  123. const std::vector<int>,
  124. std::vector<int> >)));
  125. test->add(BOOST_TEST_CASE((
  126. &boost_range_test::test_combine3<
  127. const std::vector<int>,
  128. const std::vector<int>,
  129. const std::vector<int> >)));
  130. return test;
  131. }