123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // Copyright (c) 2016 Jeffrey E. Trull
- //
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- // A series of simple tests for the istream_iterator
- #include <boost/detail/lightweight_test.hpp>
- #include <sstream>
- #include <boost/spirit/include/support_istream_iterator.hpp>
- int main()
- {
- std::stringstream ss("HELO\n");
- boost::spirit::istream_iterator it(ss);
- // Check iterator concepts
- boost::spirit::istream_iterator it2(it); // CopyConstructible
- BOOST_TEST( it2 == it ); // EqualityComparable
- BOOST_TEST( *it2 == 'H' );
- boost::spirit::istream_iterator end; // DefaultConstructible
- BOOST_TEST( it != end );
- it = end; // CopyAssignable
- BOOST_TEST( it == end );
- std::swap(it, it2); // Swappable
- BOOST_TEST( it2 == end );
- BOOST_TEST( *it == 'H' );
-
- ++it;
- BOOST_TEST( *it == 'E' );
- BOOST_TEST( *it++ == 'E' );
- // "Incrementing a copy of a does not change the value read from a"
- boost::spirit::istream_iterator it3 = it;
- BOOST_TEST( *it == 'L' );
- BOOST_TEST( *it3 == 'L' );
- ++it;
- BOOST_TEST( *it == 'O' );
- BOOST_TEST( *it3 == 'L' );
- it3 = it;
- // "a == b implies ++a == ++b"
- BOOST_TEST( ++it3 == ++it );
- // Usage of const iterators
- boost::spirit::istream_iterator const itc = it;
- BOOST_TEST( itc == it );
- BOOST_TEST( *itc == *it );
- ++it;
- BOOST_TEST( itc != it );
- // Skipping le/gt comparisons as unclear what they are for in forward iterators...
- return boost::report_errors();
- }
- // Destructible
|