zip_iterator_test.ipp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Copyright (c) 2014 Kohei Takahashi.
  2. //
  3. // Distributed under the Boost Software License, Version 1.0. (See
  4. // accompanying file LICENSE_1_0.txt or copy at
  5. // http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // See http://www.boost.org for most recent version including documentation.
  8. #include <boost/detail/lightweight_test.hpp>
  9. #include <boost/assign/list_of.hpp>
  10. #include <boost/fusion/include/at.hpp>
  11. #include <boost/iterator/zip_iterator.hpp>
  12. #include <vector>
  13. #include <string>
  14. int main()
  15. {
  16. typedef TUPLE<
  17. std::vector<int>::iterator,
  18. std::vector<std::string>::iterator
  19. > iterator_tuple;
  20. std::vector<int> vi = boost::assign::list_of(42)(72);
  21. std::vector<std::string> vs = boost::assign::list_of("kokoro")("pyonpyon");
  22. {
  23. boost::zip_iterator<iterator_tuple> i1(MAKE_TUPLE(vi.begin(), vs.begin()));
  24. boost::zip_iterator<iterator_tuple> i2 = i1;
  25. BOOST_TEST( i1 == i2);
  26. BOOST_TEST( i1++ == i2);
  27. BOOST_TEST( i1 == (i2 + 1));
  28. BOOST_TEST((i1 - 1) == i2);
  29. BOOST_TEST( i1-- == ++i2);
  30. BOOST_TEST( i1 == --i2);
  31. }
  32. {
  33. boost::zip_iterator<iterator_tuple> i1(MAKE_TUPLE(vi.begin(), vs.begin()));
  34. boost::zip_iterator<iterator_tuple> i2 = i1 + 1;
  35. BOOST_TEST( i1 != i2);
  36. BOOST_TEST( i1++ != i2);
  37. BOOST_TEST( i1 != (i2 + 1));
  38. BOOST_TEST((i1 - 1) != i2);
  39. BOOST_TEST( i1-- != ++i2);
  40. BOOST_TEST( i1 != --i2);
  41. }
  42. {
  43. boost::zip_iterator<iterator_tuple> i(MAKE_TUPLE(vi.begin(), vs.begin()));
  44. BOOST_TEST(boost::fusion::at_c<0>(* i ) == 42);
  45. BOOST_TEST(boost::fusion::at_c<1>(* i ) == "kokoro");
  46. BOOST_TEST(boost::fusion::at_c<0>(*(i + 1)) == 72);
  47. BOOST_TEST(boost::fusion::at_c<1>(*(i + 1)) == "pyonpyon");
  48. }
  49. {
  50. // Trac #12895
  51. boost::zip_iterator<
  52. TUPLE<int*, std::string*>
  53. > i(MAKE_TUPLE(&vi[0], &vs[0]));
  54. BOOST_TEST(boost::fusion::at_c<0>(* i ) == 42);
  55. BOOST_TEST(boost::fusion::at_c<1>(* i ) == "kokoro");
  56. BOOST_TEST(boost::fusion::at_c<0>(*(i + 1)) == 72);
  57. BOOST_TEST(boost::fusion::at_c<1>(*(i + 1)) == "pyonpyon");
  58. }
  59. {
  60. boost::zip_iterator<iterator_tuple> i1(MAKE_TUPLE(vi.begin(), vs.begin()));
  61. boost::zip_iterator<iterator_tuple> i2(MAKE_TUPLE(vi.end(), vs.end()));
  62. BOOST_TEST((i2 - i1) == 2);
  63. ++i1;
  64. BOOST_TEST((i2 - i1) == 1);
  65. --i2;
  66. BOOST_TEST((i2 - i1) == 0);
  67. }
  68. return boost::report_errors();
  69. }