putback_test.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 168 行
HPP
168 行
// (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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?