• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
9#include <boost/core/lightweight_test.hpp>
10
11#include <boost/assign/list_of.hpp>
12#include <boost/fusion/include/at.hpp>
13#include <boost/iterator/zip_iterator.hpp>
14#include <vector>
15#include <string>
16
17
18int main()
19{
20    typedef TUPLE<
21        std::vector<int>::iterator,
22        std::vector<std::string>::iterator
23    > iterator_tuple;
24
25    std::vector<int>         vi = boost::assign::list_of(42)(72);
26    std::vector<std::string> vs = boost::assign::list_of("kokoro")("pyonpyon");
27
28    {
29        boost::zip_iterator<iterator_tuple> i1(MAKE_TUPLE(vi.begin(), vs.begin()));
30        boost::zip_iterator<iterator_tuple> i2 = i1;
31
32        BOOST_TEST( i1      ==   i2);
33        BOOST_TEST( i1++    ==   i2);
34        BOOST_TEST( i1      ==  (i2 + 1));
35        BOOST_TEST((i1 - 1) ==   i2);
36        BOOST_TEST( i1--    == ++i2);
37        BOOST_TEST( i1      == --i2);
38    }
39
40    {
41        boost::zip_iterator<iterator_tuple> i1(MAKE_TUPLE(vi.begin(), vs.begin()));
42        boost::zip_iterator<iterator_tuple> i2 = i1 + 1;
43
44        BOOST_TEST( i1      !=   i2);
45        BOOST_TEST( i1++    !=   i2);
46        BOOST_TEST( i1      !=  (i2 + 1));
47        BOOST_TEST((i1 - 1) !=   i2);
48        BOOST_TEST( i1--    != ++i2);
49        BOOST_TEST( i1      != --i2);
50    }
51
52    {
53        boost::zip_iterator<iterator_tuple> i(MAKE_TUPLE(vi.begin(), vs.begin()));
54
55        BOOST_TEST(boost::fusion::at_c<0>(* i     ) == 42);
56        BOOST_TEST(boost::fusion::at_c<1>(* i     ) == "kokoro");
57        BOOST_TEST(boost::fusion::at_c<0>(*(i + 1)) == 72);
58        BOOST_TEST(boost::fusion::at_c<1>(*(i + 1)) == "pyonpyon");
59    }
60
61    {
62        // Trac #12895
63        boost::zip_iterator<
64            TUPLE<int*, std::string*>
65        > i(MAKE_TUPLE(&vi[0], &vs[0]));
66
67        BOOST_TEST(boost::fusion::at_c<0>(* i     ) == 42);
68        BOOST_TEST(boost::fusion::at_c<1>(* i     ) == "kokoro");
69        BOOST_TEST(boost::fusion::at_c<0>(*(i + 1)) == 72);
70        BOOST_TEST(boost::fusion::at_c<1>(*(i + 1)) == "pyonpyon");
71    }
72
73    {
74        boost::zip_iterator<iterator_tuple> i1(MAKE_TUPLE(vi.begin(), vs.begin()));
75        boost::zip_iterator<iterator_tuple> i2(MAKE_TUPLE(vi.end(),   vs.end()));
76
77        BOOST_TEST((i2 - i1) == 2);
78        ++i1;
79        BOOST_TEST((i2 - i1) == 1);
80        --i2;
81        BOOST_TEST((i2 - i1) == 0);
82    }
83
84    return boost::report_errors();
85}
86