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