ios_state_unit_test.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. // Boost ios_state_unit_test.cpp test file ---------------------------------//
  2. // Copyright 2003 Daryle Walker. Use, modification, and distribution are
  3. // subject to the Boost Software License, Version 1.0. (See accompanying file
  4. // LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
  5. // See <http://www.boost.org/libs/io/> for the library's home page.
  6. // Revision History
  7. // 12 Sep 2003 Initial version (Daryle Walker)
  8. #include <boost/config.hpp>
  9. #include <boost/io/ios_state.hpp> // for boost::io::ios_flags_saver, etc.
  10. #include <boost/test/unit_test.hpp> // for main, BOOST_CHECK, etc.
  11. #include <cstddef> // for NULL
  12. #include <iomanip> // for std::setiosflags, etc.
  13. #include <ios> // for std::ios_base
  14. #include <iostream> // for std::cout, std::cerr, etc.
  15. #include <istream> // for std::iostream
  16. #include <locale> // for std::locale, std::numpunct
  17. #include <sstream> // for std::stringstream, etc.
  18. #if defined(BOOST_GCC) || (defined(BOOST_CLANG) && defined(BOOST_GNU_STDLIB))
  19. #include <stdexcept>
  20. #endif
  21. // Global constants
  22. int const word_index = std::ios_base::xalloc();
  23. // Facet with the (classic) bool names spelled backwards
  24. class backward_bool_names
  25. : public std::numpunct<char>
  26. {
  27. typedef std::numpunct<char> base_type;
  28. public:
  29. explicit backward_bool_names( std::size_t refs = 0 )
  30. : base_type( refs )
  31. {}
  32. protected:
  33. virtual ~backward_bool_names() {}
  34. virtual base_type::string_type do_truename() const
  35. { return "eurt"; }
  36. virtual base_type::string_type do_falsename() const
  37. { return "eslaf"; }
  38. };
  39. // Unit test for format-flag saving
  40. void
  41. ios_flags_saver_unit_test
  42. (
  43. )
  44. {
  45. using namespace std;
  46. stringstream ss;
  47. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  48. {
  49. boost::io::ios_flags_saver ifs( ss );
  50. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  51. ss << noskipws << fixed << boolalpha;
  52. BOOST_CHECK_EQUAL( (ios_base::boolalpha | ios_base::dec
  53. | ios_base::fixed), ss.flags() );
  54. }
  55. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  56. {
  57. boost::io::ios_flags_saver ifs( ss, (ios_base::showbase
  58. | ios_base::internal) );
  59. BOOST_CHECK_EQUAL( (ios_base::showbase | ios_base::internal),
  60. ss.flags() );
  61. ss << setiosflags( ios_base::unitbuf );
  62. BOOST_CHECK_EQUAL( (ios_base::showbase | ios_base::internal
  63. | ios_base::unitbuf), ss.flags() );
  64. }
  65. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  66. }
  67. // Unit test for precision saving
  68. void
  69. ios_precision_saver_unit_test
  70. (
  71. )
  72. {
  73. using namespace std;
  74. stringstream ss;
  75. BOOST_CHECK_EQUAL( 6, ss.precision() );
  76. {
  77. boost::io::ios_precision_saver ips( ss );
  78. BOOST_CHECK_EQUAL( 6, ss.precision() );
  79. ss << setprecision( 4 );
  80. BOOST_CHECK_EQUAL( 4, ss.precision() );
  81. }
  82. BOOST_CHECK_EQUAL( 6, ss.precision() );
  83. {
  84. boost::io::ios_precision_saver ips( ss, 8 );
  85. BOOST_CHECK_EQUAL( 8, ss.precision() );
  86. ss << setprecision( 10 );
  87. BOOST_CHECK_EQUAL( 10, ss.precision() );
  88. }
  89. BOOST_CHECK_EQUAL( 6, ss.precision() );
  90. }
  91. // Unit test for width saving
  92. void
  93. ios_width_saver_unit_test
  94. (
  95. )
  96. {
  97. using namespace std;
  98. stringstream ss;
  99. BOOST_CHECK_EQUAL( 0, ss.width() );
  100. {
  101. boost::io::ios_width_saver iws( ss );
  102. BOOST_CHECK_EQUAL( 0, ss.width() );
  103. ss << setw( 4 );
  104. BOOST_CHECK_EQUAL( 4, ss.width() );
  105. }
  106. BOOST_CHECK_EQUAL( 0, ss.width() );
  107. {
  108. boost::io::ios_width_saver iws( ss, 8 );
  109. BOOST_CHECK_EQUAL( 8, ss.width() );
  110. ss << setw( 10 );
  111. BOOST_CHECK_EQUAL( 10, ss.width() );
  112. }
  113. BOOST_CHECK_EQUAL( 0, ss.width() );
  114. }
  115. // Unit test for I/O-state saving
  116. void
  117. ios_iostate_saver_unit_test
  118. (
  119. )
  120. {
  121. using namespace std;
  122. stringstream ss;
  123. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() );
  124. BOOST_CHECK( ss.good() );
  125. {
  126. boost::io::ios_iostate_saver iis( ss );
  127. char c;
  128. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() );
  129. BOOST_CHECK( ss.good() );
  130. ss >> c;
  131. BOOST_CHECK_EQUAL( (ios_base::eofbit | ios_base::failbit),
  132. ss.rdstate() );
  133. BOOST_CHECK( ss.eof() );
  134. BOOST_CHECK( ss.fail() );
  135. BOOST_CHECK( !ss.bad() );
  136. }
  137. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() );
  138. BOOST_CHECK( ss.good() );
  139. {
  140. boost::io::ios_iostate_saver iis( ss, ios_base::eofbit );
  141. BOOST_CHECK_EQUAL( ios_base::eofbit, ss.rdstate() );
  142. BOOST_CHECK( ss.eof() );
  143. ss.setstate( ios_base::badbit );
  144. BOOST_CHECK_EQUAL( (ios_base::eofbit | ios_base::badbit),
  145. ss.rdstate() );
  146. BOOST_CHECK( ss.eof() );
  147. BOOST_CHECK( ss.fail() );
  148. BOOST_CHECK( ss.bad() );
  149. }
  150. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() );
  151. BOOST_CHECK( ss.good() );
  152. }
  153. // Unit test for exception-flag saving
  154. void
  155. ios_exception_saver_unit_test
  156. (
  157. )
  158. {
  159. using namespace std;
  160. stringstream ss;
  161. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() );
  162. {
  163. boost::io::ios_exception_saver ies( ss );
  164. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() );
  165. ss.exceptions( ios_base::failbit );
  166. BOOST_CHECK_EQUAL( ios_base::failbit, ss.exceptions() );
  167. {
  168. boost::io::ios_iostate_saver iis( ss );
  169. ss.exceptions( ios_base::failbit | ios_base::badbit );
  170. char c;
  171. #if defined(BOOST_GCC) || (defined(BOOST_CLANG) && defined(BOOST_GNU_STDLIB))
  172. BOOST_CHECK_THROW( ss >> c, std::exception );
  173. #else
  174. BOOST_CHECK_THROW( ss >> c, std::ios_base::failure );
  175. #endif
  176. }
  177. }
  178. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() );
  179. {
  180. boost::io::ios_exception_saver ies( ss, ios_base::eofbit );
  181. BOOST_CHECK_EQUAL( ios_base::eofbit, ss.exceptions() );
  182. ss.exceptions( ios_base::badbit );
  183. BOOST_CHECK_EQUAL( ios_base::badbit, ss.exceptions() );
  184. {
  185. boost::io::ios_iostate_saver iis( ss );
  186. char c;
  187. BOOST_CHECK_NO_THROW( ss >> c );
  188. }
  189. }
  190. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() );
  191. }
  192. // Unit test for tied-stream saving
  193. void
  194. ios_tie_saver_unit_test
  195. (
  196. )
  197. {
  198. using namespace std;
  199. BOOST_CHECK( NULL == cout.tie() );
  200. {
  201. boost::io::ios_tie_saver its( cout );
  202. BOOST_CHECK( NULL == cout.tie() );
  203. cout.tie( &clog );
  204. BOOST_CHECK_EQUAL( &clog, cout.tie() );
  205. }
  206. BOOST_CHECK( NULL == cout.tie() );
  207. {
  208. boost::io::ios_tie_saver its( cout, &clog );
  209. BOOST_CHECK_EQUAL( &clog, cout.tie() );
  210. cout.tie( &cerr );
  211. BOOST_CHECK_EQUAL( &cerr, cout.tie() );
  212. }
  213. BOOST_CHECK( NULL == cout.tie() );
  214. }
  215. // Unit test for connected-streambuf saving
  216. void
  217. ios_rdbuf_saver_unit_test
  218. (
  219. )
  220. {
  221. using namespace std;
  222. iostream s( NULL );
  223. BOOST_CHECK( NULL == s.rdbuf() );
  224. {
  225. stringbuf sb;
  226. boost::io::ios_rdbuf_saver irs( s );
  227. BOOST_CHECK( NULL == s.rdbuf() );
  228. s.rdbuf( &sb );
  229. BOOST_CHECK_EQUAL( &sb, s.rdbuf() );
  230. }
  231. BOOST_CHECK( NULL == s.rdbuf() );
  232. {
  233. stringbuf sb1, sb2( "Hi there" );
  234. boost::io::ios_rdbuf_saver irs( s, &sb1 );
  235. BOOST_CHECK_EQUAL( &sb1, s.rdbuf() );
  236. s.rdbuf( &sb2 );
  237. BOOST_CHECK_EQUAL( &sb2, s.rdbuf() );
  238. }
  239. BOOST_CHECK( NULL == s.rdbuf() );
  240. }
  241. // Unit test for fill-character saving
  242. void
  243. ios_fill_saver_unit_test
  244. (
  245. )
  246. {
  247. using namespace std;
  248. stringstream ss;
  249. BOOST_CHECK_EQUAL( ' ', ss.fill() );
  250. {
  251. boost::io::ios_fill_saver ifs( ss );
  252. BOOST_CHECK_EQUAL( ' ', ss.fill() );
  253. ss.fill( 'x' );
  254. BOOST_CHECK_EQUAL( 'x', ss.fill() );
  255. }
  256. BOOST_CHECK_EQUAL( ' ', ss.fill() );
  257. {
  258. boost::io::ios_fill_saver ifs( ss, '3' );
  259. BOOST_CHECK_EQUAL( '3', ss.fill() );
  260. ss.fill( '+' );
  261. BOOST_CHECK_EQUAL( '+', ss.fill() );
  262. }
  263. BOOST_CHECK_EQUAL( ' ', ss.fill() );
  264. }
  265. // Unit test for locale saving
  266. void
  267. ios_locale_saver_unit_test
  268. (
  269. )
  270. {
  271. using namespace std;
  272. typedef numpunct<char> npc_type;
  273. stringstream ss;
  274. BOOST_CHECK( locale() == ss.getloc() );
  275. // locales are unprintable, so no BOOST_CHECK_EQUAL
  276. BOOST_CHECK( !has_facet<npc_type>(ss.getloc()) || (NULL
  277. == dynamic_cast<backward_bool_names const *>(
  278. &use_facet<npc_type>(ss.getloc()) )) );
  279. // my implementation of has_facet just checks IDs, but doesn't do dynamic
  280. // cast (therefore if a specifc facet type is missing, but its base class
  281. // is available, has_facet will mistakenly[?] match), so I have to do it
  282. // here. I wanted: "BOOST_CHECK( ! has_facet< backward_bool_names >(
  283. // ss.getloc() ) )"
  284. {
  285. boost::io::ios_locale_saver ils( ss );
  286. BOOST_CHECK( locale() == ss.getloc() );
  287. ss.imbue( locale::classic() );
  288. BOOST_CHECK( locale::classic() == ss.getloc() );
  289. }
  290. BOOST_CHECK( locale() == ss.getloc() );
  291. BOOST_CHECK( !has_facet<npc_type>(ss.getloc()) || (NULL
  292. == dynamic_cast<backward_bool_names const *>(
  293. &use_facet<npc_type>(ss.getloc()) )) );
  294. {
  295. boost::io::ios_locale_saver ils( ss, locale::classic() );
  296. BOOST_CHECK( locale::classic() == ss.getloc() );
  297. BOOST_CHECK( !has_facet<npc_type>(ss.getloc()) || (NULL
  298. == dynamic_cast<backward_bool_names const *>(
  299. &use_facet<npc_type>(ss.getloc()) )) );
  300. ss.imbue( locale(locale::classic(), new backward_bool_names) );
  301. BOOST_CHECK( locale::classic() != ss.getloc() );
  302. BOOST_CHECK( has_facet<npc_type>(ss.getloc()) && (NULL
  303. != dynamic_cast<backward_bool_names const *>(
  304. &use_facet<npc_type>(ss.getloc()) )) );
  305. //BOOST_CHECK( has_facet<backward_bool_names>(ss.getloc()) );
  306. }
  307. BOOST_CHECK( locale() == ss.getloc() );
  308. BOOST_CHECK( !has_facet<npc_type>(ss.getloc()) || (NULL
  309. == dynamic_cast<backward_bool_names const *>(
  310. &use_facet<npc_type>(ss.getloc()) )) );
  311. }
  312. // Unit test for user-defined integer data saving
  313. void
  314. ios_iword_saver_unit_test
  315. (
  316. )
  317. {
  318. using namespace std;
  319. stringstream ss;
  320. BOOST_CHECK_EQUAL( 0, ss.iword(word_index) );
  321. {
  322. boost::io::ios_iword_saver iis( ss, word_index );
  323. BOOST_CHECK_EQUAL( 0, ss.iword(word_index) );
  324. ss.iword( word_index ) = 6;
  325. BOOST_CHECK_EQUAL( 6, ss.iword(word_index) );
  326. }
  327. BOOST_CHECK_EQUAL( 0, ss.iword(word_index) );
  328. {
  329. boost::io::ios_iword_saver iis( ss, word_index, 100 );
  330. BOOST_CHECK_EQUAL( 100, ss.iword(word_index) );
  331. ss.iword( word_index ) = -2000;
  332. BOOST_CHECK_EQUAL( -2000, ss.iword(word_index) );
  333. }
  334. BOOST_CHECK_EQUAL( 0, ss.iword(word_index) );
  335. }
  336. // Unit test for user-defined pointer data saving
  337. void
  338. ios_pword_saver_unit_test
  339. (
  340. )
  341. {
  342. using namespace std;
  343. stringstream ss;
  344. BOOST_CHECK( NULL == ss.pword(word_index) );
  345. {
  346. boost::io::ios_pword_saver ips( ss, word_index );
  347. BOOST_CHECK( NULL == ss.pword(word_index) );
  348. ss.pword( word_index ) = &ss;
  349. BOOST_CHECK_EQUAL( &ss, ss.pword(word_index) );
  350. }
  351. BOOST_CHECK( NULL == ss.pword(word_index) );
  352. {
  353. boost::io::ios_pword_saver ips( ss, word_index, ss.rdbuf() );
  354. BOOST_CHECK_EQUAL( ss.rdbuf(), ss.pword(word_index) );
  355. ss.pword( word_index ) = &ss;
  356. BOOST_CHECK_EQUAL( &ss, ss.pword(word_index) );
  357. }
  358. BOOST_CHECK( NULL == ss.pword(word_index) );
  359. }
  360. // Unit test for all ios_base data saving
  361. void
  362. ios_base_all_saver_unit_test
  363. (
  364. )
  365. {
  366. using namespace std;
  367. stringstream ss;
  368. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  369. BOOST_CHECK_EQUAL( 6, ss.precision() );
  370. BOOST_CHECK_EQUAL( 0, ss.width() );
  371. {
  372. boost::io::ios_base_all_saver ibas( ss );
  373. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  374. BOOST_CHECK_EQUAL( 6, ss.precision() );
  375. BOOST_CHECK_EQUAL( 0, ss.width() );
  376. ss << hex << unitbuf << setprecision( 5 ) << setw( 7 );
  377. BOOST_CHECK_EQUAL( (ios_base::unitbuf | ios_base::hex
  378. | ios_base::skipws), ss.flags() );
  379. BOOST_CHECK_EQUAL( 5, ss.precision() );
  380. BOOST_CHECK_EQUAL( 7, ss.width() );
  381. }
  382. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  383. BOOST_CHECK_EQUAL( 6, ss.precision() );
  384. BOOST_CHECK_EQUAL( 0, ss.width() );
  385. }
  386. // Unit test for all basic_ios data saving
  387. void
  388. ios_all_saver_unit_test
  389. (
  390. )
  391. {
  392. using namespace std;
  393. typedef numpunct<char> npc_type;
  394. stringbuf sb;
  395. iostream ss( &sb );
  396. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  397. BOOST_CHECK_EQUAL( 6, ss.precision() );
  398. BOOST_CHECK_EQUAL( 0, ss.width() );
  399. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() );
  400. BOOST_CHECK( ss.good() );
  401. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() );
  402. BOOST_CHECK( NULL == ss.tie() );
  403. BOOST_CHECK( &sb == ss.rdbuf() );
  404. BOOST_CHECK_EQUAL( ' ', ss.fill() );
  405. BOOST_CHECK( locale() == ss.getloc() );
  406. {
  407. boost::io::ios_all_saver ias( ss );
  408. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  409. BOOST_CHECK_EQUAL( 6, ss.precision() );
  410. BOOST_CHECK_EQUAL( 0, ss.width() );
  411. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() );
  412. BOOST_CHECK( ss.good() );
  413. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() );
  414. BOOST_CHECK( NULL == ss.tie() );
  415. BOOST_CHECK( &sb == ss.rdbuf() );
  416. BOOST_CHECK_EQUAL( ' ', ss.fill() );
  417. BOOST_CHECK( locale() == ss.getloc() );
  418. ss << oct << showpos << noskipws;
  419. BOOST_CHECK_EQUAL( (ios_base::showpos | ios_base::oct), ss.flags() );
  420. ss << setprecision( 3 );
  421. BOOST_CHECK_EQUAL( 3, ss.precision() );
  422. ss << setw( 9 );
  423. BOOST_CHECK_EQUAL( 9, ss.width() );
  424. ss.setstate( ios_base::eofbit );
  425. BOOST_CHECK_EQUAL( ios_base::eofbit, ss.rdstate() );
  426. BOOST_CHECK( ss.eof() );
  427. ss.exceptions( ios_base::failbit );
  428. BOOST_CHECK_EQUAL( ios_base::failbit, ss.exceptions() );
  429. {
  430. boost::io::ios_iostate_saver iis( ss );
  431. ss.exceptions( ios_base::failbit | ios_base::badbit );
  432. char c;
  433. #if defined(BOOST_GCC) || (defined(BOOST_CLANG) && defined(BOOST_GNU_STDLIB))
  434. BOOST_CHECK_THROW( ss >> c, std::exception );
  435. #else
  436. BOOST_CHECK_THROW( ss >> c, std::ios_base::failure );
  437. #endif
  438. }
  439. ss.tie( &clog );
  440. BOOST_CHECK_EQUAL( &clog, ss.tie() );
  441. ss.rdbuf( cerr.rdbuf() );
  442. BOOST_CHECK_EQUAL( cerr.rdbuf(), ss.rdbuf() );
  443. ss << setfill( 'x' );
  444. BOOST_CHECK_EQUAL( 'x', ss.fill() );
  445. ss.imbue( locale(locale::classic(), new backward_bool_names) );
  446. BOOST_CHECK( locale() != ss.getloc() );
  447. BOOST_CHECK( has_facet<npc_type>(ss.getloc()) && (NULL
  448. != dynamic_cast<backward_bool_names const *>(
  449. &use_facet<npc_type>(ss.getloc()) )) );
  450. }
  451. BOOST_CHECK_EQUAL( (ios_base::skipws | ios_base::dec), ss.flags() );
  452. BOOST_CHECK_EQUAL( 6, ss.precision() );
  453. BOOST_CHECK_EQUAL( 0, ss.width() );
  454. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.rdstate() );
  455. BOOST_CHECK( ss.good() );
  456. BOOST_CHECK_EQUAL( ios_base::goodbit, ss.exceptions() );
  457. BOOST_CHECK( NULL == ss.tie() );
  458. BOOST_CHECK( &sb == ss.rdbuf() );
  459. BOOST_CHECK_EQUAL( ' ', ss.fill() );
  460. BOOST_CHECK( locale() == ss.getloc() );
  461. }
  462. // Unit test for user-defined data saving
  463. void
  464. ios_word_saver_unit_test
  465. (
  466. )
  467. {
  468. using namespace std;
  469. stringstream ss;
  470. BOOST_CHECK_EQUAL( 0, ss.iword(word_index) );
  471. BOOST_CHECK( NULL == ss.pword(word_index) );
  472. {
  473. boost::io::ios_all_word_saver iaws( ss, word_index );
  474. BOOST_CHECK_EQUAL( 0, ss.iword(word_index) );
  475. BOOST_CHECK( NULL == ss.pword(word_index) );
  476. ss.iword( word_index ) = -11;
  477. ss.pword( word_index ) = ss.rdbuf();
  478. BOOST_CHECK_EQUAL( -11, ss.iword(word_index) );
  479. BOOST_CHECK_EQUAL( ss.rdbuf(), ss.pword(word_index) );
  480. }
  481. BOOST_CHECK_EQUAL( 0, ss.iword(word_index) );
  482. BOOST_CHECK( NULL == ss.pword(word_index) );
  483. }
  484. // Unit test program
  485. boost::unit_test::test_suite *
  486. init_unit_test_suite
  487. (
  488. int , // "argc" is unused
  489. char * [] // "argv" is unused
  490. )
  491. {
  492. boost::unit_test::test_suite * test
  493. = BOOST_TEST_SUITE( "I/O state saver test" );
  494. test->add( BOOST_TEST_CASE(ios_flags_saver_unit_test) );
  495. test->add( BOOST_TEST_CASE(ios_precision_saver_unit_test) );
  496. test->add( BOOST_TEST_CASE(ios_width_saver_unit_test) );
  497. test->add( BOOST_TEST_CASE(ios_iostate_saver_unit_test) );
  498. test->add( BOOST_TEST_CASE(ios_exception_saver_unit_test) );
  499. test->add( BOOST_TEST_CASE(ios_tie_saver_unit_test) );
  500. test->add( BOOST_TEST_CASE(ios_rdbuf_saver_unit_test) );
  501. test->add( BOOST_TEST_CASE(ios_fill_saver_unit_test) );
  502. test->add( BOOST_TEST_CASE(ios_locale_saver_unit_test) );
  503. test->add( BOOST_TEST_CASE(ios_iword_saver_unit_test) );
  504. test->add( BOOST_TEST_CASE(ios_pword_saver_unit_test) );
  505. test->add( BOOST_TEST_CASE(ios_base_all_saver_unit_test) );
  506. test->add( BOOST_TEST_CASE(ios_all_saver_unit_test) );
  507. test->add( BOOST_TEST_CASE(ios_word_saver_unit_test) );
  508. return test;
  509. }