📄 ios_state_unit_test.cpp
字号:
{ boost::io::ios_fill_saver ifs( ss ); BOOST_CHECK_EQUAL( ' ', ss.fill() ); ss.fill( 'x' ); BOOST_CHECK_EQUAL( 'x', ss.fill() ); } BOOST_CHECK_EQUAL( ' ', ss.fill() ); { boost::io::ios_fill_saver ifs( ss, '3' ); BOOST_CHECK_EQUAL( '3', ss.fill() ); ss.fill( '+' ); BOOST_CHECK_EQUAL( '+', ss.fill() ); } BOOST_CHECK_EQUAL( ' ', ss.fill() );}// Unit test for locale savingvoidios_locale_saver_unit_test(){ using namespace std; typedef numpunct<char> npc_type; stringstream ss; BOOST_CHECK( locale() == ss.getloc() ); // locales are unprintable, so no BOOST_CHECK_EQUAL BOOST_CHECK( !has_facet<npc_type>(ss.getloc()) || (NULL == dynamic_cast<backward_bool_names const *>( &use_facet<npc_type>(ss.getloc()) )) ); // my implementation of has_facet just checks IDs, but doesn't do dynamic // cast (therefore if a specifc facet type is missing, but its base class // is available, has_facet will mistakenly[?] match), so I have to do it // here. I wanted: "BOOST_CHECK( ! has_facet< backward_bool_names >( // ss.getloc() ) )" { boost::io::ios_locale_saver ils( ss ); BOOST_CHECK( locale() == ss.getloc() ); ss.imbue( locale::classic() ); BOOST_CHECK( locale::classic() == ss.getloc() ); } BOOST_CHECK( locale() == ss.getloc() ); BOOST_CHECK( !has_facet<npc_type>(ss.getloc()) || (NULL == dynamic_cast<backward_bool_names const *>( &use_facet<npc_type>(ss.getloc()) )) ); { boost::io::ios_locale_saver ils( ss, locale::classic() ); BOOST_CHECK( locale::classic() == ss.getloc() ); BOOST_CHECK( !has_facet<npc_type>(ss.getloc()) || (NULL == dynamic_cast<backward_bool_names const *>( &use_facet<npc_type>(ss.getloc()) )) ); ss.imbue( locale(locale::classic(), new backward_bool_names) ); BOOST_CHECK( locale::classic() != ss.getloc() ); BOOST_CHECK( has_facet<npc_type>(ss.getloc()) && (NULL != dynamic_cast<backward_bool_names const *>( &use_facet<npc_type>(ss.getloc()) )) ); //BOOST_CHECK( has_facet<backward_bool_names>(ss.getloc()) ); } BOOST_CHECK( locale() == ss.getloc() ); BOOST_CHECK( !has_facet<npc_type>(ss.getloc()) || (NULL == dynamic_cast<backward_bool_names const *>( &use_facet<npc_type>(ss.getloc()) )) );}// Unit test for user-defined integer data savingvoidios_iword_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( 0, ss.iword(word_index) ); { boost::io::ios_iword_saver iis( ss, word_index ); BOOST_CHECK_EQUAL( 0, ss.iword(word_index) ); ss.iword( word_index ) = 6; BOOST_CHECK_EQUAL( 6, ss.iword(word_index) ); } BOOST_CHECK_EQUAL( 0, ss.iword(word_index) ); { boost::io::ios_iword_saver iis( ss, word_index, 100 ); BOOST_CHECK_EQUAL( 100, ss.iword(word_index) ); ss.iword( word_index ) = -2000; BOOST_CHECK_EQUAL( -2000, ss.iword(word_index) ); } BOOST_CHECK_EQUAL( 0, ss.iword(word_index) );}// Unit test for user-defined pointer data savingvoidios_pword_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK( NULL == ss.pword(word_index) ); { boost::io::ios_pword_saver ips( ss, word_index ); BOOST_CHECK( NULL == ss.pword(word_index) ); ss.pword( word_index ) = &ss; BOOST_CHECK_EQUAL( &ss, ss.pword(word_index) ); } BOOST_CHECK( NULL == ss.pword(word_index) ); { boost::io::ios_pword_saver ips( ss, word_index, ss.rdbuf() ); BOOST_CHECK_EQUAL( ss.rdbuf(), ss.pword(word_index) ); ss.pword( word_index ) = &ss; BOOST_CHECK_EQUAL( &ss, ss.pword(word_index) ); } BOOST_CHECK( NULL == ss.pword(word_index) );}// Unit test for all ios_base data savingvoidios_base_all_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); BOOST_CHECK_EQUAL( 6, ss.precision() ); BOOST_CHECK_EQUAL( 0, ss.width() ); { boost::io::ios_base_all_saver ibas( ss ); BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); BOOST_CHECK_EQUAL( 6, ss.precision() ); BOOST_CHECK_EQUAL( 0, ss.width() ); ss << hex << unitbuf << setprecision( 5 ) << setw( 7 ); BOOST_CHECK_EQUAL( (ios_base::unitbuf | ios_base::hex | ios_base::skipws), ss.flags() ); BOOST_CHECK_EQUAL( 5, ss.precision() ); BOOST_CHECK_EQUAL( 7, ss.width() ); } BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); BOOST_CHECK_EQUAL( 6, ss.precision() ); BOOST_CHECK_EQUAL( 0, ss.width() );}// Unit test for all basic_ios data savingvoidios_all_saver_unit_test(){ using namespace std; typedef numpunct<char> npc_type; stringbuf sb; iostream ss( &sb ); BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); BOOST_CHECK_EQUAL( 6, ss.precision() ); BOOST_CHECK_EQUAL( 0, ss.width() ); BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() ); BOOST_CHECK( ss.good() ); BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() ); BOOST_CHECK( NULL == ss.tie() ); BOOST_CHECK( &sb == ss.rdbuf() ); BOOST_CHECK_EQUAL( ' ', ss.fill() ); BOOST_CHECK( locale() == ss.getloc() ); { boost::io::ios_all_saver ias( ss ); BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); BOOST_CHECK_EQUAL( 6, ss.precision() ); BOOST_CHECK_EQUAL( 0, ss.width() ); BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() ); BOOST_CHECK( ss.good() ); BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() ); BOOST_CHECK( NULL == ss.tie() ); BOOST_CHECK( &sb == ss.rdbuf() ); BOOST_CHECK_EQUAL( ' ', ss.fill() ); BOOST_CHECK( locale() == ss.getloc() ); ss << oct << showpos << noskipws; BOOST_CHECK_EQUAL( (ios_base::showpos | ios_base::oct), ss.flags() ); ss << setprecision( 3 ); BOOST_CHECK_EQUAL( 3, ss.precision() ); ss << setw( 9 ); BOOST_CHECK_EQUAL( 9, ss.width() ); ss.setstate( ios_base::eofbit ); BOOST_CHECK_EQUAL( ios_base::eofbit, ss.rdstate() ); BOOST_CHECK( ss.eof() ); 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 ); } ss.tie( &clog ); BOOST_CHECK_EQUAL( &clog, ss.tie() ); ss.rdbuf( cerr.rdbuf() ); BOOST_CHECK_EQUAL( cerr.rdbuf(), ss.rdbuf() ); ss << setfill( 'x' ); BOOST_CHECK_EQUAL( 'x', ss.fill() ); ss.imbue( locale(locale::classic(), new backward_bool_names) ); BOOST_CHECK( locale() != ss.getloc() ); BOOST_CHECK( has_facet<npc_type>(ss.getloc()) && (NULL != dynamic_cast<backward_bool_names const *>( &use_facet<npc_type>(ss.getloc()) )) ); } BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() ); BOOST_CHECK_EQUAL( 6, ss.precision() ); BOOST_CHECK_EQUAL( 0, ss.width() ); BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() ); BOOST_CHECK( ss.good() ); BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() ); BOOST_CHECK( NULL == ss.tie() ); BOOST_CHECK( &sb == ss.rdbuf() ); BOOST_CHECK_EQUAL( ' ', ss.fill() ); BOOST_CHECK( locale() == ss.getloc() );}// Unit test for user-defined data savingvoidios_word_saver_unit_test(){ using namespace std; stringstream ss; BOOST_CHECK_EQUAL( 0, ss.iword(word_index) ); BOOST_CHECK( NULL == ss.pword(word_index) ); { boost::io::ios_all_word_saver iaws( ss, word_index ); BOOST_CHECK_EQUAL( 0, ss.iword(word_index) ); BOOST_CHECK( NULL == ss.pword(word_index) ); ss.iword( word_index ) = -11; ss.pword( word_index ) = ss.rdbuf(); BOOST_CHECK_EQUAL( -11, ss.iword(word_index) ); BOOST_CHECK_EQUAL( ss.rdbuf(), ss.pword(word_index) ); } BOOST_CHECK_EQUAL( 0, ss.iword(word_index) ); BOOST_CHECK( NULL == ss.pword(word_index) );}// Unit test programboost::unit_test_framework::test_suite *init_unit_test_suite( int , // "argc" is unused char * [] // "argv" is unused){ boost::unit_test_framework::test_suite * test = BOOST_TEST_SUITE( "I/O state saver test" ); test->add( BOOST_TEST_CASE(ios_flags_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_precision_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_width_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_iostate_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_exception_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_tie_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_rdbuf_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_fill_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_locale_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_iword_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_pword_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_base_all_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_all_saver_unit_test) ); test->add( BOOST_TEST_CASE(ios_word_saver_unit_test) ); return test;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -