123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- // (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
- // (C) Copyright 2004-2007 Jonathan Turkanis
- // 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.)
- // See http://www.boost.org/libs/iostreams/ for documentation.
- #ifndef BOOST_IOSTREAMS_TEST_PUTBACK_HPP_INCLUDED
- #define BOOST_IOSTREAMS_TEST_PUTBACK_HPP_INCLUDED
- #include <boost/iostreams/device/file.hpp>
- #include <boost/iostreams/filtering_stream.hpp>
- #include <boost/iostreams/putback.hpp>
- #include "detail/constants.hpp"
- #include "detail/temp_file.hpp"
- using boost::iostreams::test::chunk_size;
- bool putback_test_one(std::istream& is)
- {
- try {
- do {
- char buf[chunk_size];
- is.read(buf, chunk_size);
- if (is.gcount() < static_cast<std::streamsize>(chunk_size))
- break;
- is.putback('a');
- if (is.get() != 'a')
- return false;
- } while (!is.eof());
- return true;
- } catch (std::exception&) { return false; }
- }
- bool putback_test_two(std::istream& is)
- {
- try {
- do {
- char buf[chunk_size];
- is.read(buf, chunk_size);
- if (is.gcount() < static_cast<std::streamsize>(chunk_size))
- break;
- is.putback('a');
- is.putback('b');
- is.putback('c');
- is.putback('d');
- if ( is.get() != 'd' || is.get() != 'c' ||
- is.get() != 'b' || is.get() != 'a' )
- {
- return false;
- }
- } while (!is.eof());
- return true;
- } catch (std::exception&) { return false; }
- }
- template<typename Source>
- bool putback_test_three(Source& src)
- {
- try {
- while (true) {
- char buf[chunk_size];
- if (boost::iostreams::read(src, buf, chunk_size) < chunk_size)
- break;
- boost::iostreams::putback(src, 'a');
- if (boost::iostreams::get(src) != 'a')
- return false;
- }
- return true;
- } catch (std::exception&) { return false; }
- }
- template<typename Source>
- bool putback_test_four(Source& src)
- {
- try {
- while (true) {
- char buf[chunk_size];
- if (boost::iostreams::read(src, buf, chunk_size) < chunk_size)
- break;
- boost::iostreams::putback(src, 'a');
- boost::iostreams::putback(src, 'b');
- boost::iostreams::putback(src, 'c');
- boost::iostreams::putback(src, 'd');
- if ( boost::iostreams::get(src) != 'd' ||
- boost::iostreams::get(src) != 'c' ||
- boost::iostreams::get(src) != 'b' ||
- boost::iostreams::get(src) != 'a' )
- {
- return false;
- }
- }
- return true;
- } catch (std::exception&) { return false; }
- }
- void putback_test()
- {
- using namespace std;
- using namespace boost;
- using namespace boost::iostreams;
- using namespace boost::iostreams::test;
- test_file test;
- {
- filtering_istream is;
- is.set_device_buffer_size(0);
- is.push(file_source(test.name()));
- BOOST_CHECK_MESSAGE(
- putback_test_one(is),
- "failed putting back to unbuffered filtering_istream"
- );
- }
- {
- filtering_istream is;
- is.set_pback_size(4);
- is.push(file_source(test.name()));
- BOOST_CHECK_MESSAGE(
- putback_test_two(is),
- "failed putting back to buffered filtering_istream"
- );
- }
- {
- filtering_istream is;
- is.set_device_buffer_size(0);
- is.push(file_source(test.name()));
- BOOST_CHECK_MESSAGE(
- putback_test_three(is),
- "failed putting back to unbuffered filtering_istream"
- );
- }
- {
- filtering_istream is;
- is.set_pback_size(4);
- is.push(file_source(test.name()));
- BOOST_CHECK_MESSAGE(
- putback_test_four(is),
- "failed putting back to buffered filtering_istream"
- );
- }
- {
- filtering_istreambuf sb;
- sb.set_device_buffer_size(0);
- sb.push(file_source(test.name()));
- BOOST_CHECK_MESSAGE(
- putback_test_three(sb),
- "failed putting back to unbuffered filtering_istream"
- );
- }
- {
- filtering_istreambuf sb;
- sb.set_pback_size(4);
- sb.push(file_source(test.name()));
- BOOST_CHECK_MESSAGE(
- putback_test_four(sb),
- "failed putting back to buffered filtering_istream"
- );
- }
- }
- #endif // #ifndef BOOST_IOSTREAMS_TEST_PUTBACK_HPP_INCLUDED
|