📄 ios_state_unit_test.cpp
字号:
// Boost ios_state_unit_test.cpp test file ---------------------------------//// Copyright 2003 Daryle Walker. Use, modification, and distribution are// subject to the Boost Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)// See <http://www.boost.org/libs/io/> for the library's home page.// Revision History// 12 Sep 2003 Initial version (Daryle Walker)#include <boost/io/ios_state.hpp> // for boost::io::ios_flags_saver, etc.#include <boost/test/unit_test.hpp> // for main, BOOST_CHECK, etc.#include <cstddef> // for NULL#include <iomanip> // for std::setiosflags, etc.#include <ios> // for std::ios_base#include <iostream> // for std::cout, std::cerr, etc.#include <istream> // for std::iostream#include <locale> // for std::locale, std::numpunct#include <sstream> // for std::stringstream, etc.// Global constantsint const word_index = std::ios_base::xalloc();// Facet with the (classic) bool names spelled backwardsclass backward_bool_names : public std::numpunct<char>{ typedef std::numpunct<char> base_type;public: explicit backward_bool_names( std::size_t refs = 0 ) : base_type( refs ) {}protected: virtual ~backward_bool_names() {} virtual base_type::string_type do_truename() const { return "eurt"; } virtual base_type::string_type do_falsename() const { return "eslaf"; }};// Unit test for format-flag savingvoidios_flags_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); { boost::io::ios_flags_saver ifs( ss ); BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); ss << noskipws << fixed << boolalpha; BOOST_CHECK_EQUAL( (ios_base::boolalpha | ios_base::dec | ios_base::fixed), ss.flags() ); } BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); { boost::io::ios_flags_saver ifs( ss, (ios_base::showbase | ios_base::internal) ); BOOST_CHECK_EQUAL( (ios_base::showbase | ios_base::internal), ss.flags() ); ss << setiosflags( ios_base::unitbuf ); BOOST_CHECK_EQUAL( (ios_base::showbase | ios_base::internal | ios_base::unitbuf), ss.flags() ); } BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );}// Unit test for precision savingvoidios_precision_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( 6, ss.precision() ); { boost::io::ios_precision_saver ips( ss ); BOOST_CHECK_EQUAL( 6, ss.precision() ); ss << setprecision( 4 ); BOOST_CHECK_EQUAL( 4, ss.precision() ); } BOOST_CHECK_EQUAL( 6, ss.precision() ); { boost::io::ios_precision_saver ips( ss, 8 ); BOOST_CHECK_EQUAL( 8, ss.precision() ); ss << setprecision( 10 ); BOOST_CHECK_EQUAL( 10, ss.precision() ); } BOOST_CHECK_EQUAL( 6, ss.precision() );}// Unit test for width savingvoidios_width_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( 0, ss.width() ); { boost::io::ios_width_saver iws( ss ); BOOST_CHECK_EQUAL( 0, ss.width() ); ss << setw( 4 ); BOOST_CHECK_EQUAL( 4, ss.width() ); } BOOST_CHECK_EQUAL( 0, ss.width() ); { boost::io::ios_width_saver iws( ss, 8 ); BOOST_CHECK_EQUAL( 8, ss.width() ); ss << setw( 10 ); BOOST_CHECK_EQUAL( 10, ss.width() ); } BOOST_CHECK_EQUAL( 0, ss.width() );}// Unit test for I/O-state savingvoidios_iostate_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() ); BOOST_CHECK( ss.good() ); { boost::io::ios_iostate_saver iis( ss ); char c; BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() ); BOOST_CHECK( ss.good() ); ss >> c; BOOST_CHECK_EQUAL( (ios_base::eofbit | ios_base::failbit), ss.rdstate() ); BOOST_CHECK( ss.eof() ); BOOST_CHECK( ss.fail() ); BOOST_CHECK( !ss.bad() ); } BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() ); BOOST_CHECK( ss.good() ); { boost::io::ios_iostate_saver iis( ss, ios_base::eofbit ); BOOST_CHECK_EQUAL( ios_base::eofbit, ss.rdstate() ); BOOST_CHECK( ss.eof() ); ss.setstate( ios_base::badbit ); BOOST_CHECK_EQUAL( (ios_base::eofbit | ios_base::badbit), ss.rdstate() ); BOOST_CHECK( ss.eof() ); BOOST_CHECK( ss.fail() ); BOOST_CHECK( ss.bad() ); } BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() ); BOOST_CHECK( ss.good() );}// Unit test for exception-flag savingvoidios_exception_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() ); { boost::io::ios_exception_saver ies( ss ); BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() ); ss.exceptions( ios_base::failbit ); BOOST_CHECK_EQUAL( ios_base::failbit, ss.exceptions() ); { boost::io::ios_iostate_saver iis( ss ); char c; BOOST_CHECK_THROW( ss >> c, std::ios_base::failure ); } } BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() ); { boost::io::ios_exception_saver ies( ss, ios_base::eofbit ); BOOST_CHECK_EQUAL( ios_base::eofbit, ss.exceptions() ); ss.exceptions( ios_base::badbit ); BOOST_CHECK_EQUAL( ios_base::badbit, ss.exceptions() ); { boost::io::ios_iostate_saver iis( ss ); char c; BOOST_CHECK_NO_THROW( ss >> c ); } } BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() );}// Unit test for tied-stream savingvoidios_tie_saver_unit_test(){ using namespace std; BOOST_CHECK( NULL == cout.tie() ); { boost::io::ios_tie_saver its( cout ); BOOST_CHECK( NULL == cout.tie() ); cout.tie( &clog ); BOOST_CHECK_EQUAL( &clog, cout.tie() ); } BOOST_CHECK( NULL == cout.tie() ); { boost::io::ios_tie_saver its( cout, &clog ); BOOST_CHECK_EQUAL( &clog, cout.tie() ); cout.tie( &cerr ); BOOST_CHECK_EQUAL( &cerr, cout.tie() ); } BOOST_CHECK( NULL == cout.tie() );}// Unit test for connected-streambuf savingvoidios_rdbuf_saver_unit_test(){ using namespace std; iostream s( NULL ); BOOST_CHECK( NULL == s.rdbuf() ); { stringbuf sb; boost::io::ios_rdbuf_saver irs( s ); BOOST_CHECK( NULL == s.rdbuf() ); s.rdbuf( &sb ); BOOST_CHECK_EQUAL( &sb, s.rdbuf() ); } BOOST_CHECK( NULL == s.rdbuf() ); { stringbuf sb1, sb2( "Hi there" ); boost::io::ios_rdbuf_saver irs( s, &sb1 ); BOOST_CHECK_EQUAL( &sb1, s.rdbuf() ); s.rdbuf( &sb2 ); BOOST_CHECK_EQUAL( &sb2, s.rdbuf() ); } BOOST_CHECK( NULL == s.rdbuf() );}// Unit test for fill-character savingvoidios_fill_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( ' ', ss.fill() );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -