+2003-04-09 Benjamin Kosnik <bkoz@redhat.com>
+
+ Reshuffle 27_io testsuite. * testsuite/27_io/filebuf.cc,
+ filebuf_members-1.tst, filebuf_members-1.txt, filebuf_members.cc,
+ filebuf_virtuals-1.tst, filebuf_virtuals-1.txt,
+ filebuf_virtuals-2.tst, filebuf_virtuals-3.tst,
+ filebuf_virtuals.cc, fpos.cc, fstream.cc, fstream_members.cc,
+ ifstream.cc, ifstream_members-1.tst, ifstream_members-1.txt,
+ ifstream_members.cc, instantiations.cc, ios.cc,
+ ios_base_callbacks.cc, ios_base_members_static-1.tst,
+ ios_base_members_static.cc, ios_base_storage.cc,
+ ios_base_types.cc, ios_ctor.cc, ios_init.cc,
+ ios_manip_basefield.cc, ios_manip_fmtflags.cc, ios_members.cc,
+ iostream.cc, iostream_members.cc, istream.cc,
+ istream_exception.cc, istream_extractor_char.cc,
+ istream_extractor_other-1.tst, istream_extractor_other-1.txt,
+ istream_extractor_other-2.tst, istream_extractor_other.cc,
+ istream_manip.cc, istream_seeks-1.tst, istream_seeks-1.txt,
+ istream_seeks-2.tst, istream_seeks-3.tst, istream_seeks.cc,
+ istream_sentry.cc, istream_unformatted-1.tst,
+ istream_unformatted-1.txt, istream_unformatted.cc,
+ istringstream.cc, istringstream_members.cc,
+ narrow_stream_objects.cc, ofstream.cc, ofstream_members-1.tst,
+ ofstream_members.cc, ostream.cc, ostream_exception.cc,
+ ostream_fail.cc, ostream_inserter_arith.cc,
+ ostream_inserter_char-1.tst, ostream_inserter_char-1.txt,
+ ostream_inserter_char.cc, ostream_inserter_other-1.tst,
+ ostream_inserter_other-2.tst, ostream_inserter_other.cc,
+ ostream_manip.cc, ostream_seeks-1.tst, ostream_seeks.cc,
+ ostream_sentry.cc, ostream_unformatted.cc, ostringstream.cc,
+ ostringstream_members.cc, standard_manipulators.cc, streambuf.cc,
+ streambuf_members.cc, stringbuf.cc, stringbuf_members.cc,
+ stringbuf_virtuals.cc, stringstream.cc, stringstream_members.cc,
+ wide_stream_objects.cc, istream_extractor_arith/01.cc,
+ istream_extractor_arith/02.cc, istream_extractor_arith/03.cc,
+ istream_extractor_arith/06.cc, istream_extractor_arith/07.cc,
+ istream_extractor_arith/08.cc, istream_extractor_arith/09.cc,
+ istream_extractor_arith/10.cc, istream_extractor_arith/11.cc,
+ istream_extractor_arith/12.cc, istream_extractor_arith/13.cc:
+ Split into...
+ * 27_io/basic_filebuf/1.cc: New.
+ * 27_io/basic_filebuf/2.cc: New.
+ * 27_io/basic_filebuf/3.cc: New.
+ * 27_io/basic_filebuf/4.cc: New.
+ * 27_io/basic_filebuf/close/char/1.cc: New.
+ * 27_io/basic_filebuf/close/char/2.cc: New.
+ * 27_io/basic_filebuf/close/char/3.cc: New.
+ * 27_io/basic_filebuf/close/char/4879.cc: New.
+ * 27_io/basic_filebuf/close/char/9964.cc: New.
+ * 27_io/basic_filebuf/imbue/char/1.cc: New.
+ * 27_io/basic_filebuf/imbue/char/9322.cc: New.
+ * 27_io/basic_filebuf/in_avail/char/1.cc: New.
+ * 27_io/basic_filebuf/is_open/char/1.cc: New.
+ * 27_io/basic_filebuf/open/char/1.cc: New.
+ * 27_io/basic_filebuf/open/char/2.cc: New.
+ * 27_io/basic_filebuf/open/char/3.cc: New.
+ * 27_io/basic_filebuf/open/char/9507.cc: New.
+ * 27_io/basic_filebuf/overflow/char/1.cc: New.
+ * 27_io/basic_filebuf/overflow/char/3599.cc: New.
+ * 27_io/basic_filebuf/overflow/char/9169.cc: New.
+ * 27_io/basic_filebuf/overflow/char/9182-2.cc: New.
+ * 27_io/basic_filebuf/overflow/char/9988.cc: New.
+ * 27_io/basic_filebuf/sbumpc/char/1.cc: New.
+ * 27_io/basic_filebuf/sbumpc/char/9825.cc: New.
+ * 27_io/basic_filebuf/seekoff/char/1.cc: New.
+ * 27_io/basic_filebuf/seekoff/char/2.cc: New.
+ * 27_io/basic_filebuf/seekpos/char/1.cc: New.
+ * 27_io/basic_filebuf/seekpos/char/2.cc: New.
+ * 27_io/basic_filebuf/setbuf/char/1.cc: New.
+ * 27_io/basic_filebuf/setbuf/char/2.cc: New.
+ * 27_io/basic_filebuf/setbuf/char/3.cc: New.
+ * 27_io/basic_filebuf/sgetc/char/1.cc: New.
+ * 27_io/basic_filebuf/sgetn/char/1.cc: New.
+ * 27_io/basic_filebuf/sgetn/char/2.cc: New.
+ * 27_io/basic_filebuf/snextc/char/1.cc: New.
+ * 27_io/basic_filebuf/sputbackc/char/1.cc: New.
+ * 27_io/basic_filebuf/sputbackc/char/9425.cc: New.
+ * 27_io/basic_filebuf/sputc/char/1.cc: New.
+ * 27_io/basic_filebuf/sputc/char/1057.cc: New.
+ * 27_io/basic_filebuf/sputc/char/9701-2.cc: New.
+ * 27_io/basic_filebuf/sputn/char/1.cc: New.
+ * 27_io/basic_filebuf/sputn/char/1057.cc: New.
+ * 27_io/basic_filebuf/sputn/char/9701-1.cc: New.
+ * 27_io/basic_filebuf/sungetc/char/1.cc: New.
+ * 27_io/basic_filebuf/sync/char/1057.cc: New.
+ * 27_io/basic_filebuf/sync/char/9182-1.cc: New.
+ * 27_io/basic_filebuf/underflow/char/10097.cc: New.
+ * 27_io/basic_fstream/1.cc: New.
+ * 27_io/basic_fstream/2.cc: New.
+ * 27_io/basic_fstream/3.cc: New.
+ * 27_io/basic_fstream/4.cc: New.
+ * 27_io/basic_fstream/rdbuf/char/2832.cc: New.
+ * 27_io/basic_ifstream/1.cc: New.
+ * 27_io/basic_ifstream/2.cc: New.
+ * 27_io/basic_ifstream/3.cc: New.
+ * 27_io/basic_ifstream/4.cc: New.
+ * 27_io/basic_ifstream/cons/char/1.cc: New.
+ * 27_io/basic_ifstream/open/char/1.cc: New.
+ * 27_io/basic_ifstream/rdbuf/char/2832.cc: New.
+ * 27_io/basic_ios/1.cc: New.
+ * 27_io/basic_ios/2.cc: New.
+ * 27_io/basic_ios/3.cc: New.
+ * 27_io/basic_ios/4.cc: New.
+ * 27_io/basic_ios/clear/char/1.cc: New.
+ * 27_io/basic_ios/cons/char/1.cc: New.
+ * 27_io/basic_ios/cons/char/2.cc: New.
+ * 27_io/basic_ios/cons/char/3.cc: New.
+ * 27_io/basic_ios/copyfmt/char/1.cc: New.
+ * 27_io/basic_ios/copyfmt/char/2.cc: New.
+ * 27_io/basic_ios/exceptions/char/1.cc: New.
+ * 27_io/basic_ios/locales/char/1.cc: New.
+ * 27_io/basic_iostream/1.cc: New.
+ * 27_io/basic_iostream/2.cc: New.
+ * 27_io/basic_iostream/3.cc: New.
+ * 27_io/basic_iostream/4.cc: New.
+ * 27_io/basic_istream/1.cc: New.
+ * 27_io/basic_istream/2.cc: New.
+ * 27_io/basic_istream/3.cc: New.
+ * 27_io/basic_istream/4.cc: New.
+ * 27_io/basic_istream/exceptions/char/9561.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/01.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/02.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/03.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/06.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/07.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/08.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/09.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/10.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/11.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/12.cc: New.
+ * 27_io/basic_istream/extractors_arithmetic/char/13.cc: New.
+ * 27_io/basic_istream/extractors_character/char/1.cc: New.
+ * 27_io/basic_istream/extractors_character/char/2.cc: New.
+ * 27_io/basic_istream/extractors_character/char/3.cc: New.
+ * 27_io/basic_istream/extractors_character/char/9826.cc: New.
+ * 27_io/basic_istream/extractors_other/char/1.cc: New.
+ * 27_io/basic_istream/extractors_other/char/2.cc: New.
+ * 27_io/basic_istream/extractors_other/char/3.cc: New.
+ * 27_io/basic_istream/extractors_other/char/9318-in.cc: New.
+ * 27_io/basic_istream/extractors_other/char/9424-in.cc: New.
+ * 27_io/basic_istream/get/char/1.cc: New.
+ * 27_io/basic_istream/get/char/2.cc: New.
+ * 27_io/basic_istream/getline/char/1.cc: New.
+ * 27_io/basic_istream/getline/char/2.cc: New.
+ * 27_io/basic_istream/getline/char/3.cc: New.
+ * 27_io/basic_istream/ignore/char/1.cc: New.
+ * 27_io/basic_istream/ignore/char/6360.cc: New.
+ * 27_io/basic_istream/ignore/char/7220.cc: New.
+ * 27_io/basic_istream/peek/char/1.cc: New.
+ * 27_io/basic_istream/peek/char/6414.cc: New.
+ * 27_io/basic_istream/putback/char/1.cc: New.
+ * 27_io/basic_istream/read/char/1.cc: New.
+ * 27_io/basic_istream/read/char/2.cc: New.
+ * 27_io/basic_istream/read/char/3.cc: New.
+ * 27_io/basic_istream/readsome/char/6746-1.cc: New.
+ * 27_io/basic_istream/readsome/char/6746-2.cc: New.
+ * 27_io/basic_istream/readsome/char/8258.cc: New.
+ * 27_io/basic_istream/seekg/char/2346-fstream.cc: New.
+ * 27_io/basic_istream/seekg/char/2346-sstream.cc: New.
+ * 27_io/basic_istream/seekg/char/8348-1.cc: New.
+ * 27_io/basic_istream/seekg/char/8348-2.cc: New.
+ * 27_io/basic_istream/seekg/char/fstream.cc: New.
+ * 27_io/basic_istream/seekg/char/sstream.cc: New.
+ * 27_io/basic_istream/sentry/char/1.cc: New.
+ * 27_io/basic_istream/sentry/char/2.cc: New.
+ * 27_io/basic_istream/sentry/char/3.cc: New.
+ * 27_io/basic_istream/sentry/char/3983-fstream.cc: New.
+ * 27_io/basic_istream/sentry/char/3983-sstream.cc: New.
+ * 27_io/basic_istream/tellg/char/1.cc: New.
+ * 27_io/basic_istream/tellg/char/8348.cc: New.
+ * 27_io/basic_istream/tellg/char/fstream.cc: New.
+ * 27_io/basic_istream/tellg/char/sstream.cc: New.
+ * 27_io/basic_istream/ws/char/1.cc: New.
+ * 27_io/basic_istringstream/1.cc: New.
+ * 27_io/basic_istringstream/2.cc: New.
+ * 27_io/basic_istringstream/3.cc: New.
+ * 27_io/basic_istringstream/4.cc: New.
+ * 27_io/basic_istringstream/rdbuf/char/2832.cc: New.
+ * 27_io/basic_istringstream/str/char/1.cc: New.
+ * 27_io/basic_ofstream/1.cc: New.
+ * 27_io/basic_ofstream/2.cc: New.
+ * 27_io/basic_ofstream/3.cc: New.
+ * 27_io/basic_ofstream/4.cc: New.
+ * 27_io/basic_ofstream/cons/char/2.cc: New.
+ * 27_io/basic_ofstream/open/char/1.cc: New.
+ * 27_io/basic_ofstream/rdbuf/char/2832.cc: New.
+ * 27_io/basic_ostream/1.cc: New.
+ * 27_io/basic_ostream/2.cc: New.
+ * 27_io/basic_ostream/3.cc: New.
+ * 27_io/basic_ostream/4.cc: New.
+ * 27_io/basic_ostream/cons/char/9827.cc: New.
+ * 27_io/basic_ostream/endl/char/1.cc: New.
+ * 27_io/basic_ostream/ends/char/1.cc: New.
+ * 27_io/basic_ostream/ends/char/2.cc: New.
+ * 27_io/basic_ostream/exceptions/char/9561.cc: New.
+ * 27_io/basic_ostream/flush/char/1.cc: New.
+ * 27_io/basic_ostream/inserters_arithmetic/char/1.cc: New.
+ * 27_io/basic_ostream/inserters_arithmetic/char/2.cc: New.
+ * 27_io/basic_ostream/inserters_arithmetic/char/3.cc: New.
+ * 27_io/basic_ostream/inserters_arithmetic/char/4.cc: New.
+ * 27_io/basic_ostream/inserters_arithmetic/char/4402.cc: New.
+ * 27_io/basic_ostream/inserters_arithmetic/char/5.cc: New.
+ * 27_io/basic_ostream/inserters_arithmetic/char/6.cc: New.
+ * 27_io/basic_ostream/inserters_arithmetic/wchar_t/1.cc: New.
+ * 27_io/basic_ostream/inserters_character/char/1.cc: New.
+ * 27_io/basic_ostream/inserters_character/char/2.cc: New.
+ * 27_io/basic_ostream/inserters_character/char/3.cc: New.
+ * 27_io/basic_ostream/inserters_character/char/4.cc: New.
+ * 27_io/basic_ostream/inserters_character/char/5.cc: New.
+ * 27_io/basic_ostream/inserters_character/char/6.cc: New.
+ * 27_io/basic_ostream/inserters_character/char/8.cc: New.
+ * 27_io/basic_ostream/inserters_character/wchar_t/7.cc: New.
+ * 27_io/basic_ostream/inserters_character/wchar_t/8.cc: New.
+ * 27_io/basic_ostream/inserters_other/char/1.cc: New.
+ * 27_io/basic_ostream/inserters_other/char/2.cc: New.
+ * 27_io/basic_ostream/inserters_other/char/3.cc: New.
+ * 27_io/basic_ostream/inserters_other/char/4.cc: New.
+ * 27_io/basic_ostream/inserters_other/char/9318-out.cc: New.
+ * 27_io/basic_ostream/inserters_other/char/9424-out.cc: New.
+ * 27_io/basic_ostream/sentry/char/1.cc: New.
+ * 27_io/basic_ostream/sentry/char/2.cc: New.
+ * 27_io/basic_ostream/sentry/char/3983-fstream.cc: New.
+ * 27_io/basic_ostream/sentry/char/3983-sstream.cc: New.
+ * 27_io/basic_ostream/tellp/char/1.cc: New.
+ * 27_io/basic_ostream/tellp/char/2.cc: New.
+ * 27_io/basic_ostringstream/1.cc: New.
+ * 27_io/basic_ostringstream/2.cc: New.
+ * 27_io/basic_ostringstream/3.cc: New.
+ * 27_io/basic_ostringstream/4.cc: New.
+ * 27_io/basic_ostringstream/cons/char/3.cc: New.
+ * 27_io/basic_ostringstream/rdbuf/char/2832.cc: New.
+ * 27_io/basic_ostringstream/str/char/1.cc: New.
+ * 27_io/basic_ostringstream/str/char/2.cc: New.
+ * 27_io/basic_streambuf/1.cc: New.
+ * 27_io/basic_streambuf/2.cc: New.
+ * 27_io/basic_streambuf/3.cc: New.
+ * 27_io/basic_streambuf/cons/char/1.cc: New.
+ * 27_io/basic_streambuf/imbue/char/1.cc: New.
+ * 27_io/basic_streambuf/imbue/char/9322.cc: New.
+ * 27_io/basic_streambuf/overflow/char/1.cc: New.
+ * 27_io/basic_streambuf/overflow/char/2.cc: New.
+ * 27_io/basic_streambuf/overflow/char/3599.cc: New.
+ * 27_io/basic_streambuf/sgetc/char/1.cc: New.
+ * 27_io/basic_streambuf/sgetn/char/1.cc: New.
+ * 27_io/basic_streambuf/sputbackc/char/9538.cc: New.
+ * 27_io/basic_streambuf/sputc/char/1057.cc: New.
+ * 27_io/basic_streambuf/sputn/char/1.cc: New.
+ * 27_io/basic_streambuf/sputn/char/1057.cc: New.
+ * 27_io/basic_streambuf/sync/char/1057.cc: New.
+ * 27_io/basic_stringbuf/1.cc: New.
+ * 27_io/basic_stringbuf/2.cc: New.
+ * 27_io/basic_stringbuf/3.cc: New.
+ * 27_io/basic_stringbuf/4.cc: New.
+ * 27_io/basic_stringbuf/5.cc: New.
+ * 27_io/basic_stringbuf/imbue/char/1.cc: New.
+ * 27_io/basic_stringbuf/imbue/char/9322.cc: New.
+ * 27_io/basic_stringbuf/in_avail/char/1.cc: New.
+ * 27_io/basic_stringbuf/overflow/char/2.cc: New.
+ * 27_io/basic_stringbuf/overflow/char/3599.cc: New.
+ * 27_io/basic_stringbuf/overflow/char/9988.cc: New.
+ * 27_io/basic_stringbuf/sbumpc/char/1.cc: New.
+ * 27_io/basic_stringbuf/sbumpc/char/9825.cc: New.
+ * 27_io/basic_stringbuf/seekoff/char/1.cc: New.
+ * 27_io/basic_stringbuf/seekoff/char/2.cc: New.
+ * 27_io/basic_stringbuf/seekpos/char/1.cc: New.
+ * 27_io/basic_stringbuf/seekpos/char/2.cc: New.
+ * 27_io/basic_stringbuf/setbuf/char/1.cc: New.
+ * 27_io/basic_stringbuf/setbuf/char/2.cc: New.
+ * 27_io/basic_stringbuf/setbuf/char/3.cc: New.
+ * 27_io/basic_stringbuf/sgetc/char/1.cc: New.
+ * 27_io/basic_stringbuf/sgetn/char/1.cc: New.
+ * 27_io/basic_stringbuf/snextc/char/1.cc: New.
+ * 27_io/basic_stringbuf/sputbackc/char/1.cc: New.
+ * 27_io/basic_stringbuf/sputbackc/char/9425.cc: New.
+ * 27_io/basic_stringbuf/sputc/char/1.cc: New.
+ * 27_io/basic_stringbuf/sputc/char/1057.cc: New.
+ * 27_io/basic_stringbuf/sputc/char/9404-1.cc: New.
+ * 27_io/basic_stringbuf/sputn/char/1.cc: New.
+ * 27_io/basic_stringbuf/sputn/char/1057.cc: New.
+ * 27_io/basic_stringbuf/sputn/char/9404-2.cc: New.
+ * 27_io/basic_stringbuf/str/char/1.cc: New.
+ * 27_io/basic_stringbuf/str/char/2.cc: New.
+ * 27_io/basic_stringbuf/str/char/3.cc: New.
+ * 27_io/basic_stringbuf/str/char/3955.cc: New.
+ * 27_io/basic_stringbuf/sungetc/char/1.cc: New.
+ * 27_io/basic_stringbuf/sync/char/1057.cc: New.
+ * 27_io/basic_stringstream/1.cc: New.
+ * 27_io/basic_stringstream/2.cc: New.
+ * 27_io/basic_stringstream/3.cc: New.
+ * 27_io/basic_stringstream/4.cc: New.
+ * 27_io/basic_stringstream/rdbuf/char/2832.cc: New.
+ * 27_io/basic_stringstream/str/char/1.cc: New.
+ * 27_io/basic_stringstream/str/char/2.cc: New.
+ * 27_io/basic_stringstream/str/char/3.cc: New.
+ * 27_io/basic_stringstream/str/char/4.cc: New.
+ * 27_io/fpos/1.cc: New.
+ * 27_io/fpos/2.cc: New.
+ * 27_io/fpos/3.cc: New.
+ * 27_io/ios_base/callbacks/1.cc: New.
+ * 27_io/ios_base/state/1.cc: New.
+ * 27_io/ios_base/storage/1.cc: New.
+ * 27_io/ios_base/storage/2.cc: New.
+ * 27_io/ios_base/storage/3.cc: New.
+ * 27_io/ios_base/sync_with_stdio/1.cc: New.
+ * 27_io/ios_base/sync_with_stdio/2.cc: New.
+ * 27_io/manipulators/adjustfield/char/1.cc: New.
+ * 27_io/manipulators/adjustfield/char/2.cc: New.
+ * 27_io/manipulators/basefield/char/1.cc: New.
+ * 27_io/manipulators/standard/char/1.cc: New.
+ * 27_io/manipulators/standard/char/2.cc: New.
+ * 27_io/objects/char/1.cc: New.
+ * 27_io/objects/char/2.cc: New.
+ * 27_io/objects/char/2523-1_xin.cc: New.
+ * 27_io/objects/char/2523-1_xin.in: New.
+ * 27_io/objects/char/2523-2_xin.cc: New.
+ * 27_io/objects/char/2523-2_xin.in: New.
+ * 27_io/objects/char/3045.cc: New.
+ * 27_io/objects/char/3647.cc: New.
+ * 27_io/objects/char/3_xin.cc: New.
+ * 27_io/objects/char/3_xin.in: New.
+ * 27_io/objects/char/4_xin.cc: New.
+ * 27_io/objects/char/4_xin.in: New.
+ * 27_io/objects/char/5268.cc: New.
+ * 27_io/objects/char/5280_xin.cc: New.
+ * 27_io/objects/char/5280_xin.in: New.
+ * 27_io/objects/char/6548_xin.cc: New.
+ * 27_io/objects/char/6548_xin.in: New.
+ * 27_io/objects/char/6648-1_xin.cc: New.
+ * 27_io/objects/char/6648-1_xin.in: New.
+ * 27_io/objects/char/6648-2_xin.cc: New.
+ * 27_io/objects/char/6648-2_xin.in: New.
+ * 27_io/objects/char/7744_xin.cc: New.
+ * 27_io/objects/char/7744_xin.in: New.
+ * 27_io/objects/wchar_t/1.cc: New.
+ * 27_io/types/1.cc: New.
+ * 27_io/types/2.cc: New.
+ * data/filebuf_members-1.tst: New.
+ * data/filebuf_members-1.txt: New.
+ * data/filebuf_virtuals-1.tst: New.
+ * data/filebuf_virtuals-1.txt: New.
+ * data/filebuf_virtuals-2.tst: New.
+ * data/filebuf_virtuals-3.tst: New.
+ * data/ifstream_members-1.tst: New.
+ * data/ifstream_members-1.txt: New.
+ * data/ios_base_members_static-1.tst: New.
+ * data/istream_extractor_other-1.tst: New.
+ * data/istream_extractor_other-1.txt: New.
+ * data/istream_extractor_other-2.tst: New.
+ * data/istream_seeks-1.tst: New.
+ * data/istream_seeks-1.txt: New.
+ * data/istream_seeks-2.tst: New.
+ * data/istream_seeks-3.tst: New.
+ * data/istream_unformatted-1.tst: New.
+ * data/istream_unformatted-1.txt: New.
+ * data/ofstream_members-1.tst: New.
+ * data/ostream_inserter_char-1.tst: New.
+ * data/ostream_inserter_char-1.txt: New.
+ * data/ostream_inserter_other-1.tst: New.
+ * data/ostream_inserter_other-2.tst: New.
+ * data/ostream_seeks-1.tst: New.
+
+2003-04-09 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/sstream.tcc (basic_stringbuf::seekpos): Remove
+ requirement that __mode must be strict input or output.
+
+ * include/std/std_streambuf.h (basic_streambuf::setp): Set
+ _M_out_lim.
+
+ * include/std/std_sstream.h (basic_strinbuf::str): Zero length
+ output string shouldn't core.
+ (basic_stringbuf::_M_really_sync): Add base argument. Remove rturn
+ type.
+ * include/bits/sstream.tcc: Adjust _M_really_sync bits here.
+
+ * include/bits/istream.tcc (basic_istream::putback): Set gcount to
+ zero.
+
+2003-04-09 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/data: New directory.
+ * testsuite/lib/libstdc++-v3-dg.exp (libstdc++-v3-init): Modify
+ to copy files from the testsuite data directory.
+ (libstdc++-v3-list-sourcefiles): Add another test list filter, for
+ testfiles containing _xin, which now means this is an interactive
+ test and should be run with the interactive dejagnu hooks.
+ * testsuite/Makefile.am: Remove testsuite_* files.
+ * testsuite/Makefile.in: Regenerate.
+
2003-04-09 Zack Weinberg <zack@codesourcery.com>
* docs/html/install.html: Document complete list of locales
basic_istream<_CharT, _Traits>::
putback(char_type __c)
{
+ _M_gcount = 0;
sentry __cerb(*this, true);
if (__cerb)
{
bool __testout = this->_M_mode & ios_base::out;
if (__builtin_expect(!__testout, false))
return traits_type::eof();
+
bool __testeof = traits_type::eq_int_type(__c, traits_type::eof());
if (__builtin_expect(__testeof, false))
return traits_type::not_eof(__c);
// In virtue of DR 169 (TC) we are allowed to grow more than
// one char the first time and also...
- __size_type __len =
- std::max(__size_type(_M_string.capacity() + 1), this->_M_buf_size_opt);
-
- bool __testwrite = this->_M_out_cur < this->_M_out_end;
- if (__builtin_expect(!__testwrite && __len > _M_string.max_size(), false))
+ __size_type __len = std::max(__size_type(_M_string.capacity() + 1),
+ this->_M_buf_size_opt);
+ bool __testput = this->_M_out_cur < this->_M_out_end;
+ if (__builtin_expect(!__testput && __len > _M_string.max_size(), false))
return traits_type::eof();
// Try to append __c into output sequence in one of two ways.
// Order these tests done in is unspecified by the standard.
- if (!__testwrite)
+ if (!__testput)
{
// Force-allocate, re-sync.
_M_string = this->str();
- // ... the next times. That's easy to implement thanks to the
+ // ... the next time. That's easy to implement thanks to the
// exponential growth policy builtin into basic_string.
_M_string.reserve(__len);
- _M_really_sync(this->_M_in_cur - this->_M_in_beg,
+ _M_really_sync(const_cast<char_type*>(_M_string.data()),
+ this->_M_in_cur - this->_M_in_beg,
this->_M_out_cur - this->_M_out_beg);
}
return this->sputc(traits_type::to_char_type(__c));
char_type* __end = NULL;
bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
- bool __testboth = __testin && __testout;
- __testin &= !(__mode & ios_base::out);
- __testout &= !(__mode & ios_base::in);
// NB: Ordered.
bool __testposi = false;
bool __testposo = false;
- if (__testin || __testboth)
+ if (__testin)
{
__beg = this->eback();
__end = this->egptr();
if (0 <= __pos && __pos <= __end - __beg)
__testposi = true;
}
- if (__testout || __testboth)
+ if (__testout)
{
__beg = this->pbase();
__end = this->epptr();
*/
void
_M_set_indeterminate(void)
- {
- _M_set_determinate(off_type(0));
- }
+ { _M_set_determinate(off_type(0)); }
/**
* @if maint
__string_type
str() const
{
+ __string_type __ret = _M_string;
if (this->_M_mode & ios_base::out)
{
// This is the deal: _M_string.size() is a value that
- // represents the size of the initial string that makes
- // _M_string, and may not be the correct size of the
- // current stringbuf internal buffer.
+ // represents the size of the initial string used to
+ // created the buffer, and may not be the correct size of
+ // the current stringbuf internal buffer.
__size_type __len = _M_string.size();
- if (this->_M_out_lim > this->_M_out_beg)
- __len = std::max(__size_type(this->_M_out_lim
- - this->_M_out_beg), __len);
- return __string_type(this->_M_out_beg, this->_M_out_beg + __len);
+ __size_type __nlen = this->_M_out_lim - this->_M_out_beg;
+ if (__nlen)
+ {
+ __len = std::max(__nlen, __len);
+ __ret = __string_type(this->_M_out_beg,
+ this->_M_out_beg + __len);
+ }
}
- else
- return _M_string;
+ return __ret;
}
/**
// suit particular needs.
this->_M_buf_size_opt = 512;
this->_M_mode = __mode;
+
+ __size_type __len = 0;
if (this->_M_mode & (ios_base::ate | ios_base::app))
- _M_really_sync(0, _M_string.size());
- else
- _M_really_sync(0, 0);
+ __len = _M_string.size();
+ _M_really_sync(const_cast<char_type*>(_M_string.data()), 0, __len);
}
// Overridden virtual functions:
{
if (__s && __n)
{
+ // This is implementation-defined behavior, and assumes
+ // that an external char_type array of length (__s + __n)
+ // exists and has been pre-allocated. If this is not the
+ // case, things will quickly blow up.
+
+ // Step 1: Destroy the current internal array.
_M_string = __string_type(__s, __n);
- _M_really_sync(0, 0);
+
+ // Step 2: Use the external array.
+ this->_M_buf = __s;
+ this->_M_buf_size_opt = this->_M_buf_size = __n;
+ _M_really_sync(__s, 0, 0);
}
return this;
}
* @doctodo
* @endif
*/
- virtual int
- _M_really_sync(__size_type __i, __size_type __o)
+ virtual void
+ _M_really_sync(char_type* __base, __size_type __i, __size_type __o)
{
- char_type* __base = const_cast<char_type*>(_M_string.data());
bool __testin = this->_M_mode & ios_base::in;
bool __testout = this->_M_mode & ios_base::out;
__size_type __len = _M_string.size();
this->_M_out_lim = __base + __len;
this->_M_out_cur += __o;
}
- return 0;
}
};
char_type* _M_out_cur; // Current put area.
char_type* _M_out_end; // End of put area.
- char_type* _M_out_lim; // Right limit of used put area.
+ char_type* _M_out_lim; // End limit of used put area.
//@}
setp(char_type* __pbeg, char_type* __pend)
{
_M_out_beg = _M_out_cur = __pbeg;
- _M_out_end = __pend;
+ _M_out_end = _M_out_lim = __pend;
if (!(_M_mode & ios_base::out) && __pbeg && __pend)
_M_mode = _M_mode | ios_base::out;
}
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <fstream>
+
+// { dg-do compile }
+
+// libstdc++/7216
+void test01()
+{
+ // Check for required typedefs
+ typedef std::filebuf test_type;
+ typedef test_type::char_type char_type;
+ typedef test_type::traits_type traits_type;
+ typedef test_type::int_type int_type;
+ typedef test_type::pos_type pos_type;
+ typedef test_type::off_type off_type;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// test05
+// libstdc++/1886
+// should be able to instantiate basic_filebuf for non-standard types.
+namespace test
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+ typedef short type_t;
+ template class basic_filebuf<type_t, char_traits<type_t> >;
+ template class basic_filebuf<pod_char, char_traits<pod_char> >;
+} // test
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
#include <fstream>
#include <testsuite_hooks.h>
-// { dg-do compile }
-
-// libstdc++/7216
-void test01()
-{
- // Check for required typedefs
- typedef std::filebuf test_type;
- typedef test_type::char_type char_type;
- typedef test_type::traits_type traits_type;
- typedef test_type::int_type int_type;
- typedef test_type::pos_type pos_type;
- typedef test_type::off_type off_type;
-}
-
-// test05
-// libstdc++/1886
-// should be able to instantiate basic_filebuf for non-standard types.
-namespace test
-{
- using namespace std;
- using __gnu_cxx_test::pod_char;
- typedef short type_t;
- template class basic_filebuf<type_t, char_traits<type_t> >;
- template class basic_filebuf<pod_char, char_traits<pod_char> >;
-} // test
-
-
-// test07
// libstdc++/2020
-// should be able to use custom char_type
+// should be able to use custom char_type, custom traits type
class gnu_char_type
{
unsigned long character;
operator unsigned long() const { return character; }
};
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
void test07()
{
bool test = true;
- typedef std::basic_filebuf<gnu_char_type> gnu_filebuf;
+ typedef std::basic_filebuf<gnu_char_type, gnu_char_traits> gnu_filebuf;
try
{ gnu_filebuf obj; }
int main()
{
- test01();
test07();
return 0;
}
// more surf!!!
-
-
-
-
-
-
-
-
-
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <fstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::filebuf test_type;
+ typedef std::streambuf base_type;
+ const test_type& obj = test_type();
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "filebuf_members-1.tst";
+const char name_02[] = "filebuf_members-1.txt";
+
+// Test member functions.
+void test_01()
+{
+ bool test = true;
+ const char* name_03 = "filebuf_members-3"; // empty file, need to create
+
+ std::filebuf fb_01; // in
+ std::filebuf fb_02; // out
+ std::filebuf fb_03; // in | out
+
+ // bool is_open()
+ VERIFY( !fb_01.is_open() );
+ VERIFY( !fb_02.is_open() );
+ VERIFY( !fb_03.is_open() );
+
+ // filebuf_type* open(const char* __s, ios_base::openmode __mode)
+ fb_01.open(name_01, std::ios_base::in | std::ios_base::ate);
+ VERIFY( fb_01.is_open() );
+
+ // Try to open two different files without closing the first:
+ // Should keep the old file attached, and disregard attempt to overthrow.
+ fb_02.open(name_02, std::ios_base::in | std::ios_base::out
+ | std::ios_base::trunc);
+ VERIFY( fb_02.is_open() );
+
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::trunc);
+ VERIFY( fb_03.is_open() );
+
+ // filebuf_type* close()
+ std::filebuf* f;
+ f = fb_01.close();
+ VERIFY( f != NULL );
+ VERIFY( !fb_01.is_open() );
+
+ f = fb_02.close();
+ VERIFY( f != NULL );
+ VERIFY( !fb_02.is_open() );
+
+ f = fb_03.close();
+ VERIFY( f != NULL );
+ VERIFY( !fb_03.is_open() );
+
+ f = fb_03.close();
+ VERIFY( f == NULL );
+ VERIFY( !fb_03.is_open() );
+}
+
+int
+main()
+{
+ test_01();
+ return 0;
+}
+
+
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <ext/stdio_filebuf.h>
+#include <testsuite_hooks.h>
+
+// Verify that std::filebuf doesn't close files that it didn't open
+// when using the following std::filebuf ctor:
+//
+// std::filebuf(__c_file_type* __f,
+// ios_base::openmode __mode,
+// int_type __s);
+//
+// Thanks to "George T. Talbot" <george@moberg.com> for uncovering
+// this bug/situation.
+
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+
+void test_02()
+{
+ bool test = true;
+ int close_num;
+
+ // read (ext)
+ FILE* f2 = fopen(name_01, "r");
+ VERIFY( f2 != NULL );
+ if (f2)
+ {
+ __gnu_cxx::stdio_filebuf<char> fb(f2, std::ios_base::in, 512);
+ close_num = fclose(f2);
+ }
+ VERIFY( close_num == 0 );
+
+ // read (standard)
+ FILE* f = fopen(name_01, "r");
+ VERIFY( f != NULL );
+ if (f)
+ {
+ std::ifstream ifstream1(name_01);
+ VERIFY( ifstream1.is_open() );
+ std::ios_base::iostate st01 = ifstream1.rdstate();
+ VERIFY( st01 == std::ios_base::goodbit );
+ close_num = fclose(f);
+ }
+ VERIFY( close_num == 0 );
+}
+
+int
+main()
+{
+ test_02();
+ return 0;
+}
+
+
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <locale>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char carray_01[] = "santa cruz or sandiego?";
+const char carray_02[] = "memphis, new orleans, and savanah";
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ typedef std::filebuf::int_type int_type;
+ typedef std::filebuf::traits_type traits_type;
+ typedef std::filebuf::pos_type pos_type;
+ typedef std::filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ std::filebuf f_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ fb_01.open(name_01, std::ios_base::in);
+ fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc);
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
+
+ // NB Have to close these suckers. . .
+ // filebuf_type* close()
+ fb_01.close();
+ fb_02.close();
+ fb_03.close();
+ VERIFY( !fb_01.is_open() );
+ VERIFY( !fb_02.is_open() );
+ VERIFY( !fb_03.is_open() );
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <iostream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <testsuite_hooks.h>
+
+// libstdc++/2913, libstdc++/4879
+// John Fardo <jfardo@laurelnetworks.com>, Brad Garcia <garsh@attbi.com>
+void
+test_04()
+{
+ bool test = true;
+ const char* name = "tmp_fifo1";
+ signal(SIGPIPE, SIG_IGN);
+
+ unlink(name);
+ if (0 != mkfifo(name, S_IRWXU))
+ {
+ std::cerr << "failed to create fifo" << std::endl;
+ exit(-1);
+ }
+
+ int fval = fork();
+ if (fval == -1)
+ {
+ std::cerr << "failed to fork" << std::endl;
+ unlink(name);
+ exit(-1);
+ }
+ else if (fval == 0)
+ {
+ std::ifstream ifs(name);
+ sleep(1);
+ ifs.close();
+ exit(0);
+ }
+
+ std::ofstream ofs(name);
+ sleep(2);
+ ofs.put('t');
+
+ /*
+ * ISO/IED 14882:1998(E) 27.8.1.10.4
+ *
+ * void close();
+ *
+ * Effects: Calls rdbuf()->close() and, if that function fails
+ * (returns a null pointer), calls setstate(failbit)...
+ */
+ ofs.close();
+ if (!(ofs.rdstate() & std::ios::failbit))
+ {
+ test = false;
+ VERIFY( test );
+ unlink(name);
+ exit(-1);
+ }
+
+ unlink(name);
+}
+
+int
+main()
+{
+ test_04();
+ return 0;
+}
+
+
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <testsuite_hooks.h>
+
+// libstdc++/9964
+void test_07()
+{
+ using namespace std;
+ bool test = true;
+
+ const char* name = "tmp_fifo3";
+
+ signal(SIGPIPE, SIG_IGN);
+
+ unlink(name);
+ mkfifo(name, S_IRWXU);
+
+ int child = fork();
+ VERIFY( child != -1 );
+
+ if (child == 0)
+ {
+ filebuf fbin;
+ fbin.open(name, ios_base::in);
+ sleep(1);
+ fbin.close();
+ exit(0);
+ }
+
+ filebuf fb;
+ filebuf* ret = fb.open(name, ios_base::out | ios_base::trunc);
+ VERIFY( ret != NULL );
+ VERIFY( fb.is_open() );
+
+ sleep(2);
+ fb.sputc('a');
+
+ ret = fb.close();
+ VERIFY( ret == NULL );
+ VERIFY( !fb.is_open() );
+}
+
+int
+main()
+{
+ test_07();
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+std::filebuf fbuf;
+
+// test the filebuf locale settings
+void test02()
+{
+ std::locale loc_c = std::locale::classic();
+ loc_c = fbuf.getloc();
+ fbuf.pubimbue(loc_c); //This should initialize _M_init to true
+ std::locale loc_tmp = fbuf.getloc();
+ VERIFY( loc_tmp == loc_c );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <locale>
+#include <testsuite_hooks.h>
+
+// libstdc++/9322
+void test07()
+{
+ using std::locale;
+ bool test = true;
+
+ locale loc;
+ std::filebuf ob;
+ VERIFY( ob.getloc() == loc );
+
+ locale::global(locale("en_US"));
+ VERIFY( ob.getloc() == loc );
+
+ locale loc_de ("de_DE");
+ locale ret = ob.pubimbue(loc_de);
+ VERIFY( ob.getloc() == loc_de );
+ VERIFY( ret == loc );
+
+ locale::global(loc);
+ VERIFY( ob.getloc() == loc_de );
+}
+
+main()
+{
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test07);
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <locale>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char carray_01[] = "santa cruz or sandiego?";
+const char carray_02[] = "memphis, new orleans, and savanah";
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ typedef std::filebuf::int_type int_type;
+ typedef std::filebuf::traits_type traits_type;
+ typedef std::filebuf::pos_type pos_type;
+ typedef std::filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ std::filebuf f_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ // GET
+ // int in_avail()
+ // if a read position is available, return _M_in_end - _M_in_cur.
+ // else return showmanyc.
+ strmof_1 = fb_01.in_avail();
+ strmof_2 = fb_02.in_avail();
+ VERIFY( strmof_1 == -1 );
+ VERIFY( strmof_1 == strmof_2 ); //fail because not open
+ strmof_1 = fb_03.in_avail();
+ VERIFY( strmof_1 == strmof_2 );
+ fb_01.open(name_01, std::ios_base::in);
+ fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc);
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
+ strmof_1 = fb_01.in_avail();
+ strmof_2 = fb_02.in_avail();
+ VERIFY( strmof_1 != strmof_2 );
+ VERIFY( strmof_1 >= 0 );
+ VERIFY( strmof_2 == -1 ); // empty file
+ strmof_1 = fb_03.in_avail();
+ VERIFY( strmof_1 == 0 ); // empty file
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "filebuf_members-1.tst";
+const char name_02[] = "filebuf_members-1.txt";
+
+// Test member functions.
+void test_01()
+{
+ bool test = true;
+ const char* name_03 = "filebuf_members-3"; // empty file, need to create
+
+ std::filebuf fb_01; // in
+ std::filebuf fb_02; // out
+ std::filebuf fb_03; // in | out
+
+ // bool is_open()
+ VERIFY( !fb_01.is_open() );
+ VERIFY( !fb_02.is_open() );
+ VERIFY( !fb_03.is_open() );
+
+ // filebuf_type* open(const char* __s, ios_base::openmode __mode)
+ fb_01.open(name_01, std::ios_base::in | std::ios_base::ate);
+ fb_02.open(name_02, std::ios_base::in | std::ios_base::out
+ | std::ios_base::trunc);
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::trunc);
+ VERIFY( fb_01.is_open() );
+ VERIFY( fb_02.is_open() );
+ VERIFY( fb_03.is_open() );
+
+ // filebuf_type* close()
+ fb_01.close();
+ fb_02.close();
+ fb_03.close();
+ VERIFY( !fb_01.is_open() );
+ VERIFY( !fb_02.is_open() );
+ VERIFY( !fb_03.is_open() );
+}
+
+int
+main()
+{
+ test_01();
+ return 0;
+}
+
+
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "filebuf_members-1.tst";
+const char name_02[] = "filebuf_members-1.txt";
+
+// Test member functions.
+void test_01()
+{
+ bool test = true;
+ const char* name_03 = "filebuf_members-3"; // empty file, need to create
+
+ std::filebuf fb_01; // in
+ std::filebuf fb_02; // out
+ std::filebuf fb_03; // in | out
+
+ // bool is_open()
+ VERIFY( !fb_01.is_open() );
+ VERIFY( !fb_02.is_open() );
+ VERIFY( !fb_03.is_open() );
+
+ // filebuf_type* open(const char* __s, ios_base::openmode __mode)
+ fb_01.open(name_01, std::ios_base::in | std::ios_base::ate);
+ VERIFY( fb_01.is_open() );
+
+ // Try to open two different files without closing the first:
+ // Should keep the old file attached, and disregard attempt to overthrow.
+ std::filebuf* f = fb_02.open(name_02, std::ios_base::in | std::ios_base::out
+ | std::ios_base::trunc);
+ VERIFY( f != NULL );
+ VERIFY( fb_02.is_open() );
+
+ f = fb_02.open(name_03, std::ios_base::in | std::ios_base::out);
+ VERIFY( f == NULL );
+ VERIFY( fb_02.is_open() );
+
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::trunc);
+ VERIFY( fb_03.is_open() );
+}
+
+int
+main()
+{
+ test_01();
+ return 0;
+}
+
+
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <ext/stdio_filebuf.h>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+
+void test_03()
+{
+ bool test = true;
+ int first_fd = ::open(name_01, O_RDONLY);
+ VERIFY( first_fd != -1 );
+ FILE* first_file = ::fdopen(first_fd, "r");
+ VERIFY( first_file != NULL );
+ __gnu_cxx::stdio_filebuf<char> fb(first_file, std::ios_base::in);
+
+ int second_fd = fb.fd();
+
+ VERIFY( first_fd == second_fd );
+}
+
+int
+main()
+{
+ test_03();
+ return 0;
+}
+
+
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// Charles Leggett <CGLeggett@lbl.gov>
+void test_05()
+{
+ bool test = true;
+ const char* name = "tmp_file5";
+
+ std::fstream scratch_file;
+
+ scratch_file.open(name, std::ios::out);
+ scratch_file.close();
+
+ scratch_file.open(name, std::ios::in);
+ if (!scratch_file)
+ VERIFY( false );
+ scratch_file.close();
+}
+
+int
+main()
+{
+ test_05();
+ return 0;
+}
+
+
--- /dev/null
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.3 filebuf member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// various tests for filebuf::open() and filebuf::close() including
+// the non-portable functionality in the libstdc++-v3 IO library
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <testsuite_hooks.h>
+
+// libstdc++/9507
+void test_06()
+{
+ bool test = true;
+ const char* name = "tmp_fifo2";
+
+ signal(SIGPIPE, SIG_IGN);
+
+ unlink(name);
+ mkfifo(name, S_IRWXU);
+
+ if (!fork())
+ {
+ std::filebuf fbuf;
+ fbuf.open(name, std::ios_base::in);
+ fbuf.sgetc();
+ fbuf.close();
+ exit(0);
+ }
+
+ std::filebuf fbuf;
+ std::filebuf* r = fbuf.open(name, std::ios_base::out | std::ios_base::ate);
+ VERIFY( !fbuf.is_open() );
+ VERIFY( r == NULL );
+}
+
+int
+main()
+{
+ test_06();
+ return 0;
+}
+
+
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <fstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// test03
+// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00151.html
+template<typename charT, typename traits = std::char_traits<charT> >
+ class basic_nullbuf : public std::basic_filebuf<charT, traits>
+ {
+ protected:
+ typedef typename
+ std::basic_filebuf<charT, traits>::int_type int_type;
+ virtual int_type
+ overflow(int_type c)
+ { return traits::not_eof(c); }
+ };
+
+typedef basic_nullbuf<char> nullbuf;
+
+template<typename T>
+ char
+ print(const T& x)
+ {
+ nullbuf ob;
+ std::ostream out(&ob);
+ out << x << std::endl;
+ return (!out ? '0' : '1');
+ }
+
+void test03()
+{
+ bool test = true;
+ const std::string control01("11111");
+ std::string test01;
+
+ test01 += print(true);
+ test01 += print(3.14159);
+ test01 += print(10);
+ test01 += print('x');
+ test01 += print("pipo");
+
+ VERIFY( test01 == control01 );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <fstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/3599
+class testbuf : public std::filebuf
+{
+public:
+ typedef std::filebuf::traits_type traits_type;
+
+ testbuf() : std::filebuf() { }
+
+protected:
+ int_type
+ overflow(int_type c = traits_type::eof())
+ { return traits_type::not_eof(0); }
+};
+
+void
+test07()
+{
+ bool test = true;
+ testbuf ob;
+ std::ostream out(&ob);
+
+ out << "gasp";
+ VERIFY(out.good());
+
+ out << std::endl;
+ VERIFY(out.good());
+}
+
+int main()
+{
+ test07();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <locale>
+#include <testsuite_hooks.h>
+
+const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
+
+class Cvt_to_upper : public std::codecvt<char, char, mbstate_t>
+{
+ bool do_always_noconv() const throw()
+ {
+ return false;
+ }
+};
+
+// libstdc++/9169
+// filebuf output fails if codecvt<>::out returns noconv
+void test10()
+{
+ using namespace std;
+ bool test = true;
+
+ locale c_loc = locale::classic();
+ locale loc(c_loc, new Cvt_to_upper);
+
+ string str("abcdefghijklmnopqrstuvwxyz");
+ string tmp;
+
+ {
+ ofstream out;
+ out.imbue(loc);
+ out.open(name_04);
+ copy(str.begin(), str.end(), ostreambuf_iterator<char>(out));
+ }
+
+ {
+ ifstream in;
+ in.open(name_04);
+ copy(istreambuf_iterator<char>(in), istreambuf_iterator<char>(),
+ back_inserter(tmp));
+ }
+
+ VERIFY( tmp.size() == str.size() );
+ VERIFY( tmp == str );
+}
+
+main()
+{
+ test10();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <locale>
+#include <testsuite_hooks.h>
+
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+
+class errorcvt : public std::codecvt<char, char, mbstate_t>
+{
+protected:
+ std::codecvt_base::result
+ do_out(mbstate_t&, const char* from, const char*,
+ const char*& from_next, char* to, char*,
+ char*& to_next) const
+ {
+ from_next = from;
+ to_next = to;
+ return std::codecvt<char, char, mbstate_t>::error;
+ }
+
+ virtual bool do_always_noconv() const throw()
+ {
+ return false;
+ }
+};
+
+// libstdc++/9182
+// basic_filebuf<>::sync and overflow do not write out any characters
+// if codecvt<>::out returns error
+void test14()
+{
+ using namespace std;
+ bool test = true;
+
+ locale loc = locale::classic();
+ loc = locale(loc, new errorcvt);
+
+ filebuf fbuf1;
+ fbuf1.pubimbue(loc);
+ fbuf1.pubsetbuf(0, 0);
+ fbuf1.open(name_07, ios_base::out | ios_base::trunc);
+ streamsize n = fbuf1.sputn("onne", 4);
+ VERIFY( n == 0 );
+ fbuf1.close();
+}
+
+main()
+{
+ test14();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
+
+class OverBuf : public std::filebuf
+{
+public:
+ int_type pub_overflow(int_type c = traits_type::eof())
+ { return std::filebuf::overflow(c); }
+};
+
+// libstdc++/9988
+// filebuf::overflow writes EOF to file
+void test15()
+{
+ using namespace std;
+ bool test = true;
+
+ OverBuf fb;
+ fb.open(name_08, ios_base::out | ios_base::trunc);
+
+ fb.sputc('a');
+ fb.pub_overflow('b');
+ fb.pub_overflow();
+ fb.sputc('c');
+ fb.close();
+
+ filebuf fbin;
+ fbin.open(name_08, ios_base::in);
+ filebuf::int_type c;
+ c = fbin.sbumpc();
+ VERIFY( c == 'a' );
+ c = fbin.sbumpc();
+ VERIFY( c == 'b' );
+ c = fbin.sbumpc();
+ VERIFY( c == 'c' );
+ c = fbin.sbumpc();
+ VERIFY( c == filebuf::traits_type::eof() );
+ fbin.close();
+}
+
+main()
+{
+ test15();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ using namespace std;
+ typedef filebuf::int_type int_type;
+ typedef filebuf::traits_type traits_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ filebuf f_tmp;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ // GET
+ fb_01.open(name_01, ios_base::in);
+ fb_02.open(name_02, ios_base::out | ios_base::trunc);
+ fb_03.open(name_03, ios_base::out | ios_base::in | ios_base::trunc);
+ strmof_1 = fb_01.in_avail();
+ strmof_2 = fb_02.in_avail();
+ strmof_1 = fb_03.in_avail();
+
+ // int_type sbumpc()
+ // if read_cur not avail returns uflow(), else return *read_cur & increment
+ int_type c1 = fb_01.sbumpc();
+ int_type c2 = fb_02.sbumpc();
+ VERIFY( c1 != c2 );
+ VERIFY( c1 == '/' );
+ VERIFY( c2 == -1 );
+ int_type c3 = fb_01.sbumpc();
+ int_type c4 = fb_02.sbumpc();
+ VERIFY( c3 != c4 );
+ VERIFY( c1 == c3 ); // fluke, both happen to be '/'
+ VERIFY( c2 == c4 );
+ int_type c5 = fb_03.sbumpc();
+ VERIFY( c5 == traits_type::eof() );
+ // XXX should do some kind of test to make sure that internal
+ // buffers point to the same thing, to check consistancy.
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+
+// libstdc++/9825
+// filebuf::sputbackc breaks sbumpc
+void test12()
+{
+ using namespace std;
+ bool test = true;
+
+ filebuf fbuf;
+
+ fbuf.open(name_06, ios_base::in|ios_base::out|ios_base::trunc);
+ fbuf.sputn("crazy bees!", 11);
+ fbuf.pubseekoff(0, ios_base::beg);
+ fbuf.sbumpc();
+ fbuf.sputbackc('x');
+ filebuf::int_type c = fbuf.sbumpc();
+ VERIFY( c == 'x' );
+ c = fbuf.sbumpc();
+ VERIFY( c == 'r' );
+ c = fbuf.sbumpc();
+ VERIFY( c == 'a' );
+ fbuf.close();
+}
+
+main()
+{
+ test12();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char name_01[] = "filebuf_virtuals-1.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ using namespace std;
+ typedef filebuf::int_type int_type;
+ typedef filebuf::traits_type traits_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ filebuf f_tmp;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ fb_03.open(name_01, ios_base::out | ios_base::in);
+
+ int_type c1;
+ int_type c2;
+ int_type c3;
+
+ // seekoff
+ // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
+ // alters the stream position to off
+ pos_type pt_1(off_type(-1));
+ pos_type pt_2(off_type(0));
+ off_type off_1 = 0;
+ off_type off_2 = 0;
+
+ //IN|OUT
+ // 27filebuf-3.txt = bd23456789:;<=>?...
+ //beg
+ strmsz_1 = fb_03.in_avail();
+ pt_1 = fb_03.pubseekoff(2, ios_base::beg);
+ strmsz_2 = fb_03.in_avail();
+ off_1 = pt_1;
+ VERIFY( off_1 > 0 );
+ c1 = fb_03.snextc(); //current in pointer +1
+ VERIFY( c1 == '9' );
+ c2 = fb_03.sputc('\n'); //current in pointer +1
+ c3 = fb_03.sgetc();
+ VERIFY( c2 != c3 );
+ VERIFY( c3 == '9' );
+ fb_03.pubsync();
+ c1 = fb_03.sgetc();
+ VERIFY( c1 == c3 );
+ //cur
+ // 27filebuf-3.txt = bd2\n456789:;<=>?...
+ pt_2 = fb_03.pubseekoff(2, ios_base::cur);
+ off_2 = pt_2;
+ VERIFY( (off_2 == (off_1 + 2 + 1 + 1)) );
+ c1 = fb_03.snextc(); //current in pointer +1
+ VERIFY( c1 == '1' );
+ c2 = fb_03.sputc('x'); //test current out pointer
+ c3 = fb_03.sputc('\n');
+ c1 = fb_03.sgetc();
+ fb_03.pubsync();
+ c3 = fb_03.sgetc();
+ VERIFY( c1 == c3 );
+ //end
+ // 27filebuf-3.txt = "bd2\n456x\n9"
+ pt_2 = fb_03.pubseekoff(0, ios_base::end, ios_base::in|ios_base::out);
+ off_1 = pt_2;
+ VERIFY( off_1 > off_2 ); //weak, but don't know exactly where it ends
+ c3 = fb_03.sputc('\n');
+ strmsz_1 = fb_03.sputn("because because because. . .", 28);
+ VERIFY( strmsz_1 == 28 );
+ c1 = fb_03.sungetc();
+ // Defect? retval of sungetc is not necessarily the character ungotten.
+ // So re-get it.
+ c1 = fb_03.sgetc();
+ fb_03.pubsync();
+ c3 = fb_03.sgetc();
+ VERIFY( c1 == c3 );
+ // IN
+ // OUT
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1.3 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void test02(std::filebuf& in, bool pass)
+{
+ bool test = true;
+ using namespace std;
+ typedef streambuf::pos_type pos_type;
+ typedef streambuf::off_type off_type;
+ pos_type bad = pos_type(off_type(-1));
+ pos_type p = 0;
+
+ // seekoff
+ p = in.pubseekoff(0, ios_base::beg, ios_base::in);
+ if (pass)
+ VERIFY( p != bad );
+
+ p = in.pubseekoff(0, ios_base::beg, ios_base::out);
+ VERIFY( p == bad );
+
+ p = in.pubseekoff(0, ios_base::beg);
+ if (pass)
+ VERIFY( p != bad );
+}
+
+const char name_01[] = "filebuf_virtuals-1.tst"; // file with data in it
+const char name_03[] = "filebuf_members-1.tst"; // empty file
+
+int main()
+{
+ using namespace std;
+
+ // movie star, submarine scientist!
+ filebuf in1;
+ in1.open(name_01, ios_base::in);
+ filebuf in2;
+ filebuf in3;
+ in3.open(name_03, ios_base::in);
+ test02(in1, true);
+ test02(in2, false);
+ test02(in3, true);
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ using namespace std;
+ typedef filebuf::int_type int_type;
+ typedef filebuf::traits_type traits_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ filebuf f_tmp;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ fb_03.open(name_01, ios_base::out | ios_base::in);
+
+ int_type c1;
+ int_type c2;
+ int_type c3;
+
+ // seekpos
+ // pubseekpos(pos_type sp, ios_base::openmode)
+ // alters the stream position to sp
+ pos_type pt_1(off_type(-1));
+ pos_type pt_2(off_type(0));
+ off_type off_1 = 0;
+ off_type off_2 = 0;
+ //IN|OUT
+ //beg
+ pt_1 = fb_03.pubseekoff(78, ios_base::beg);
+ off_1 = pt_1;
+ VERIFY( off_1 > 0 );
+ c1 = fb_03.snextc(); //current in pointer +1
+ VERIFY( c1 == 't' );
+ c2 = fb_03.sputc('\n'); //test current out pointer
+ c3 = fb_03.sgetc();
+ fb_03.pubsync(); //resets pointers
+ pt_2 = fb_03.pubseekpos(pt_1);
+ off_2 = pt_2;
+ VERIFY( off_1 == off_2 );
+ c3 = fb_03.snextc(); //current in pointer +1
+ VERIFY( c2 == c3 );
+ pt_1 = fb_03.pubseekoff(0, ios_base::end);
+ off_1 = pt_1;
+ VERIFY( off_1 > off_2 );
+ fb_03.sputn("\nof the wonderful things he does!!\nok", 37);
+ fb_03.pubsync();
+
+ // IN
+ // OUT
+
+ // VIRTUALS (indirectly tested)
+ // underflow
+ // if read position avail, returns *gptr()
+
+ // pbackfail(int_type c)
+ // put c back into input sequence
+
+ // overflow
+ // appends c to output seq
+
+ // NB Have to close these suckers. . .
+ // filebuf_type* close()
+ fb_03.close();
+ VERIFY( !fb_03.is_open() );
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1.3 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void test02(std::filebuf& in, bool pass)
+{
+ bool test = true;
+ using namespace std;
+ typedef streambuf::pos_type pos_type;
+ typedef streambuf::off_type off_type;
+ pos_type bad = pos_type(off_type(-1));
+ pos_type p = 0;
+
+ // seekpos
+ p = in.pubseekpos(0, ios_base::in);
+ if (pass)
+ VERIFY( p != bad );
+
+ p = in.pubseekpos(0, ios_base::out);
+ VERIFY( p == bad );
+
+ p = in.pubseekpos(0);
+ if (pass)
+ VERIFY( p != bad );
+}
+
+const char name_01[] = "filebuf_virtuals-1.tst"; // file with data in it
+const char name_03[] = "filebuf_members-1.tst"; // empty file
+
+int main()
+{
+ using namespace std;
+
+ // movie star, submarine scientist!
+ filebuf in1;
+ in1.open(name_01, ios_base::in);
+ filebuf in2;
+ filebuf in3;
+ in3.open(name_03, ios_base::in);
+ test02(in1, true);
+ test02(in2, false);
+ test02(in3, true);
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+class testbuf : public std::filebuf
+{
+public:
+
+ // Typedefs:
+ typedef std::filebuf base_type;
+ typedef base_type::traits_type traits_type;
+ typedef base_type::char_type char_type;
+
+ testbuf(): base_type()
+ { _M_mode = (std::ios_base::in | std::ios_base::out); }
+
+ bool
+ check_pointers()
+ {
+ bool test = true;
+ test = (this->pbase() == NULL);
+ test &= (this->pptr() == NULL);
+ return test;
+ }
+};
+
+const char name_01[] = "filebuf_virtuals-1.txt";
+
+// Test overloaded virtual functions.
+void test05()
+{
+ using namespace std;
+ typedef std::filebuf::int_type int_type;
+ typedef std::filebuf::traits_type traits_type;
+ typedef std::filebuf::pos_type pos_type;
+ typedef std::filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+
+ int_type c1;
+
+ {
+ testbuf f_tmp;
+
+ // setbuf
+ // pubsetbuf(char_type* s, streamsize n)
+ f_tmp.pubsetbuf(0,0);
+ VERIFY( f_tmp.check_pointers() );
+ }
+
+ {
+ testbuf f_tmp;
+
+ f_tmp.open(name_01, ios_base::out | ios_base::in);
+ int_type c1 = f_tmp.sbumpc();
+
+ // setbuf
+ // pubsetbuf(char_type* s, streamsize n)
+ f_tmp.pubsetbuf(0, 0);
+ VERIFY( !f_tmp.check_pointers() );
+ }
+}
+
+main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ using namespace std;
+
+ bool test = true;
+ char buf[512];
+ const char* strlit = "how to tell a story and other essays: mark twain";
+ const size_t strlitsize = std::strlen(strlit);
+ filebuf fbuf;
+ fbuf.open("tmp_setbuf2", ios_base::out);
+ fbuf.pubsetbuf(buf, 512);
+ fbuf.sputn(strlit, strlitsize);
+ VERIFY( std::strncmp(strlit, buf, strlitsize) == 0 );
+}
+
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void test02()
+{
+ using namespace std;
+
+ bool test = true;
+ char buf[512];
+ const char* strlit = "how to tell a story and other essays: mark twain";
+ const size_t strlitsize = std::strlen(strlit);
+ filebuf fbuf01;
+ fbuf01.open("tmp", ios_base::out);
+
+ fbuf01.pubsetbuf(buf, strlitsize);
+ fbuf01.sputn(strlit, strlitsize);
+ VERIFY( std::strncmp(strlit, buf, strlitsize) == 0 );
+}
+
+main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <locale>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char carray_01[] = "santa cruz or sandiego?";
+const char carray_02[] = "memphis, new orleans, and savanah";
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ typedef std::filebuf::int_type int_type;
+ typedef std::filebuf::traits_type traits_type;
+ typedef std::filebuf::pos_type pos_type;
+ typedef std::filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ std::filebuf f_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ // GET
+ fb_01.open(name_01, std::ios_base::in);
+ fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc);
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
+ strmof_1 = fb_01.in_avail();
+ strmof_2 = fb_02.in_avail();
+ strmof_1 = fb_03.in_avail();
+
+ int_type c1 = fb_01.sbumpc();
+ int_type c2 = fb_02.sbumpc();
+ int_type c3 = fb_01.sbumpc();
+ int_type c4 = fb_02.sbumpc();
+ int_type c5 = fb_03.sbumpc();
+
+ // int_type sgetc()
+ // if read_cur not avail, return uflow(), else return *read_cur
+ int_type c6 = fb_01.sgetc();
+ int_type c7 = fb_02.sgetc();
+ VERIFY( c6 != c3 );
+ VERIFY( c7 == c4 ); // both -1
+ int_type c8 = fb_01.sgetc();
+ int_type c9 = fb_02.sgetc();
+ VERIFY( c6 == c8 );
+ VERIFY( c7 == c9 );
+ c5 = fb_03.sgetc();
+ VERIFY( c5 == traits_type::eof() );
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ using namespace std;
+ typedef filebuf::int_type int_type;
+ typedef filebuf::traits_type traits_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ filebuf f_tmp;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ // GET
+ fb_01.open(name_01, ios_base::in);
+ fb_02.open(name_02, ios_base::out | ios_base::trunc);
+ fb_03.open(name_03, ios_base::out | ios_base::in | ios_base::trunc);
+ strmof_1 = fb_01.in_avail();
+ strmof_2 = fb_02.in_avail();
+ strmof_1 = fb_03.in_avail();
+
+ int_type c1 = fb_01.sbumpc();
+ int_type c2 = fb_02.sbumpc();
+ int_type c3 = fb_01.sbumpc();
+ int_type c4 = fb_02.sbumpc();
+ int_type c5 = fb_03.sbumpc();
+
+ int_type c6 = fb_01.sgetc();
+ int_type c7 = fb_02.sgetc();
+ int_type c8 = fb_01.sgetc();
+ int_type c9 = fb_02.sgetc();
+ c5 = fb_03.sgetc();
+
+ // int_type snextc()
+ // calls sbumpc and if sbumpc != eof, return sgetc
+ c6 = fb_01.snextc();
+ c7 = fb_02.snextc();
+ c6 = fb_01.snextc();
+ c7 = fb_02.snextc();
+ c5 = fb_03.snextc();
+
+ // streamsize sgetn(char_type *s, streamsize n)
+ // streamsize xsgetn(char_type *s, streamsize n)
+ // assign up to n chars to s from input sequence, indexing in_cur as
+ // approp and returning the number of chars assigned
+ strmsz_1 = fb_01.in_avail();
+ strmsz_2 = fb_02.in_avail();
+ test = strmsz_1 != strmsz_2;
+ char carray1[13] = "";
+ strmsz_1 = fb_01.sgetn(carray1, 10);
+ char carray2[buffer_size] = "";
+ strmsz_2 = fb_02.sgetn(carray2, 10);
+ VERIFY( strmsz_1 != strmsz_2 );
+ VERIFY( strmsz_1 == 10 );
+ VERIFY( strmsz_2 == 0 );
+ c1 = fb_01.sgetc();
+ c2 = fb_02.sgetc();
+ VERIFY( c1 == '\n' );
+ VERIFY( c7 == c2 ); // n != i
+ strmsz_1 = fb_03.sgetn(carray1, 10);
+ VERIFY( !strmsz_1 ); //zero
+ strmsz_1 = fb_01.in_avail();
+ strmsz_2 = fb_01.sgetn(carray2, strmsz_1 + 5);
+ VERIFY( strmsz_1 == strmsz_2 - 5 );
+ c4 = fb_01.sgetc(); // buffer should have underflowed from above.
+ VERIFY( c4 == 'i' );
+ strmsz_1 = fb_01.in_avail();
+ VERIFY( strmsz_1 > 0 );
+ strmsz_2 = fb_01.sgetn(carray2, strmsz_1 + 5);
+ VERIFY( strmsz_1 == strmsz_2 ); //at the end of the actual file
+ strmsz_1 = fb_02.in_avail();
+ strmsz_2 = fb_02.sgetn(carray2, strmsz_1 + 5);
+ VERIFY( strmsz_1 == -1 );
+ VERIFY( strmsz_2 == 0 );
+ c4 = fb_02.sgetc(); // should be EOF
+ VERIFY( c4 == traits_type::eof() );
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "filebuf_virtuals-1.tst"; // empty file, need to create
+
+void test06()
+{
+ using namespace std;
+
+ bool test = true;
+ char buffer[] = "xxxxxxxxxx";
+ typedef filebuf::int_type int_type;
+ filebuf fbuf01;
+ fbuf01.open(name_01, ios_base::in);
+ int_type len1 = fbuf01.sgetn(buffer, sizeof(buffer));
+ VERIFY( len1 == sizeof(buffer) );
+ VERIFY( buffer[0] == '/' );
+}
+
+main()
+{
+ test06();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ using namespace std;
+ typedef filebuf::int_type int_type;
+ typedef filebuf::traits_type traits_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ filebuf f_tmp;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ // GET
+ fb_01.open(name_01, ios_base::in);
+ fb_02.open(name_02, ios_base::out | ios_base::trunc);
+ fb_03.open(name_03, ios_base::out | ios_base::in | ios_base::trunc);
+ strmof_1 = fb_01.in_avail();
+ strmof_2 = fb_02.in_avail();
+ strmof_1 = fb_03.in_avail();
+
+ int_type c1 = fb_01.sbumpc();
+ int_type c2 = fb_02.sbumpc();
+ int_type c3 = fb_01.sbumpc();
+ int_type c4 = fb_02.sbumpc();
+ int_type c5 = fb_03.sbumpc();
+
+ int_type c6 = fb_01.sgetc();
+ int_type c7 = fb_02.sgetc();
+ int_type c8 = fb_01.sgetc();
+ int_type c9 = fb_02.sgetc();
+ c5 = fb_03.sgetc();
+
+ // int_type snextc()
+ // calls sbumpc and if sbumpc != eof, return sgetc
+ c6 = fb_01.snextc();
+ c7 = fb_02.snextc();
+ VERIFY( c6 != c8 );
+ VERIFY( c7 == c9 ); // -1
+ VERIFY( c6 == '\n' );
+ c6 = fb_01.snextc();
+ c7 = fb_02.snextc();
+ VERIFY( c6 != c8 );
+ VERIFY( c7 == c9 ); // -1
+ VERIFY( c6 == '9' );
+ c5 = fb_03.snextc();
+ VERIFY( c5 == traits_type::eof() );
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <locale>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char carray_01[] = "santa cruz or sandiego?";
+const char carray_02[] = "memphis, new orleans, and savanah";
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ typedef std::filebuf::int_type int_type;
+ typedef std::filebuf::traits_type traits_type;
+ typedef std::filebuf::pos_type pos_type;
+ typedef std::filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ std::filebuf f_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ fb_01.open(name_01, std::ios_base::in);
+ fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc);
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
+
+ int_type c1 = fb_01.sbumpc();
+ int_type c2 = fb_02.sbumpc();
+ int_type c3 = fb_01.sbumpc();
+ int_type c4 = fb_02.sbumpc();
+ int_type c5 = fb_03.sbumpc();
+ int_type c6 = fb_01.sgetc();
+ int_type c7 = fb_02.sgetc();
+ int_type c8 = fb_01.sgetc();
+ int_type c9 = fb_02.sgetc();
+
+ // PUT
+ strmsz_1 = fb_03.sputn("racadabras", 10);//"abracadabras or what?"
+ strmsz_2 = fb_03.sputn(", i wanna reach out and", 10);
+ strmsz_1 = fb_02.sputn("racadabras", 10);
+ strmsz_1 = fb_01.sputn("racadabra", 10);
+
+ // PUTBACK
+ // int_type pbfail(int_type c)
+ // called when gptr() null, gptr() == eback(), or traits::eq(*gptr, c) false
+ // "pending sequence" is:
+ // 1) everything as defined in underflow
+ // 2) + if (traits::eq_int_type(c, traits::eof()), then input
+ // sequence is backed up one char before the pending sequence is
+ // determined.
+ // 3) + if (not 2) then c is prepended. Left unspecified is
+ // whether the input sequence is backedup or modified in any way
+ // returns traits::eof() for failure, unspecified other value for success
+
+ // int_type sputbackc(char_type c)
+ // if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
+ // otherwise decrements in_cur and returns *gptr()
+ c1 = fb_03.sgetc(); // -1
+ c2 = fb_03.sputbackc('z');
+ strmsz_2 = fb_03.in_avail();
+ c3 = fb_03.sgetc();
+ VERIFY( c3 == c2 );
+ VERIFY( c1 != c3 );
+ VERIFY( 1 == strmsz_2 );
+ //test for _in_cur == _in_beg
+ // fb_03._M_out_beg = "bd23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZracada" etc
+ fb_03.pubseekoff(10, std::ios_base::beg,
+ std::ios_base::in | std::ios_base::out);
+ fb_03.sputc('m');
+ strmsz_1 = fb_03.in_avail();
+ c1 = fb_03.sgetc();
+ fb_03.snextc();
+ c2 = fb_03.sputbackc('z');
+ strmsz_2 = fb_03.in_avail();
+ c3 = fb_03.sgetc();
+ VERIFY( c1 != c2 );
+ VERIFY( c3 == c2 );
+ VERIFY( c1 != c3 );
+ VERIFY( c2 == 'z' );
+ // VERIFY( strmsz_1 == strmsz_2 );
+ // test for replacing char with identical one
+ fb_03.snextc();
+ fb_03.sputc('u');
+ fb_03.sputc('v');
+ fb_03.sputc('a');
+ strmsz_1 = fb_03.in_avail();
+ c2 = fb_03.sputbackc('a');
+ strmsz_2 = fb_03.in_avail();
+ c3 = fb_03.sgetc();
+ VERIFY( c3 == c2 );
+ VERIFY( strmsz_1 + 1 == strmsz_2 );
+ //test for ios_base::out
+ c1 = fb_02.sgetc(); // undefined
+ c2 = fb_02.sputbackc('a');
+ VERIFY( c1 == c2 );
+ VERIFY( c1 == -1 );
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+
+// libstdc++/9439, libstdc++/9425
+// basic_filebuf<>::pbackfail calls basic_filebuf<>::seekoff, but
+// fails to check the return value
+void test09()
+{
+ using namespace std;
+ bool test = true;
+
+ filebuf fbuf;
+ fbuf.open(name_01, ios_base::in);
+ filebuf::int_type r = fbuf.sputbackc('a');
+ fbuf.close();
+
+ VERIFY( r == filebuf::traits_type::eof() );
+}
+
+main()
+{
+ test09();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <locale>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char carray_01[] = "santa cruz or sandiego?";
+const char carray_02[] = "memphis, new orleans, and savanah";
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ typedef std::filebuf::int_type int_type;
+ typedef std::filebuf::traits_type traits_type;
+ typedef std::filebuf::pos_type pos_type;
+ typedef std::filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ std::filebuf f_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ fb_01.open(name_01, std::ios_base::in);
+ fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc);
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
+
+ int_type c1 = fb_01.sbumpc();
+ int_type c2 = fb_02.sbumpc();
+ int_type c3 = fb_01.sbumpc();
+ int_type c4 = fb_02.sbumpc();
+ int_type c5 = fb_03.sbumpc();
+ int_type c6 = fb_01.sgetc();
+ int_type c7 = fb_02.sgetc();
+ int_type c8 = fb_01.sgetc();
+ int_type c9 = fb_02.sgetc();
+
+ // PUT
+ // int_type sputc(char_type c)
+ // if out_cur not avail, return overflow(traits_type::to_int_type(c))
+ // else, stores c at out_cur,
+ // increments out_cur, and returns c as int_type
+ // strmsz_1 = fb_03.in_avail(); // XXX valid for in|out??
+ c1 = fb_02.sputc('a');
+ c2 = fb_03.sputc('b');
+ VERIFY( c1 != c2 );
+ c1 = fb_02.sputc('c');
+ c2 = fb_03.sputc('d');
+ VERIFY( c1 != c2 );
+ // strmsz_2 = fb_03.in_avail();
+ // VERIFY( strmsz_1 != strmsz_2 );
+ for (int i = 50; i <= 90; ++i)
+ c2 = fb_02.sputc(char(i));
+ // 27filebuf-2.txt == ac23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX
+ // fb_02._M_out_cur = '2'
+ strmsz_1 = fb_03.in_avail();
+ for (int i = 50; i <= 90; ++i)
+ c2 = fb_03.sputc(char(i));
+ strmsz_2 = fb_03.in_avail();
+ // VERIFY( strmsz_1 != strmsz_2 );
+ // VERIFY( strmsz_1 > 0 );
+ // VERIFY( strmsz_2 > 0 );
+ // 27filebuf-2.txt == bd23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX
+ // fb_02._M_out_cur = '2'
+ c3 = fb_01.sputc('a'); // should be EOF because this is read-only
+ VERIFY( c3 == traits_type::eof() );
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <string>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+class nullsetpbuf : public std::filebuf
+{
+ char foo[64];
+public:
+ nullsetpbuf()
+ {
+ setp(foo, foo + 64);
+ setp(NULL, NULL);
+ }
+};
+
+// libstdc++/1057
+void test05()
+{
+ std::string text1 = "abcdefghijklmn";
+
+ nullsetpbuf nsp;
+ // Immediate crash as sputc writes to null pointer
+ nsp.sputc('a');
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+
+bool over_called;
+
+class Derived_filebuf : public std::filebuf
+{
+public:
+ int_type overflow(int_type c)
+ {
+ over_called = true;
+ return std::filebuf::overflow(c);
+ }
+
+ const char_type* pub_epptr() const
+ { return epptr(); }
+
+ const char_type* pub_pptr() const
+ { return pptr(); }
+};
+
+// libstdc++/9701 (partial)
+void test11()
+{
+ bool test = true;
+
+ bool over_expected;
+
+ // sputc
+ Derived_filebuf dfbuf_01;
+ dfbuf_01.open(name_05, std::ios_base::out);
+ over_called = false;
+ dfbuf_01.sputc('i');
+ VERIFY( !over_called );
+ over_expected = dfbuf_01.pub_epptr() == dfbuf_01.pub_pptr();
+ over_called = false;
+ dfbuf_01.sputc('v');
+ VERIFY( (!over_expected && !over_called)
+ || (over_expected && over_called) );
+ dfbuf_01.close();
+}
+
+main()
+{
+ test11();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <locale>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char carray_01[] = "santa cruz or sandiego?";
+const char carray_02[] = "memphis, new orleans, and savanah";
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ typedef std::filebuf::int_type int_type;
+ typedef std::filebuf::traits_type traits_type;
+ typedef std::filebuf::pos_type pos_type;
+ typedef std::filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ std::filebuf f_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ fb_01.open(name_01, std::ios_base::in);
+ fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc);
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
+
+ int_type c1 = fb_01.sbumpc();
+ int_type c2 = fb_02.sbumpc();
+ int_type c3 = fb_01.sbumpc();
+ int_type c4 = fb_02.sbumpc();
+ int_type c5 = fb_03.sbumpc();
+ int_type c6 = fb_01.sgetc();
+ int_type c7 = fb_02.sgetc();
+ int_type c8 = fb_01.sgetc();
+ int_type c9 = fb_02.sgetc();
+
+ // PUT
+ // streamsize sputn(const char_typs* s, streamsize n)
+ // write up to n chars to out_cur from s, returning number assigned
+ // NB *sputn will happily put '\0' into your stream if you give it a chance*
+ strmsz_1 = fb_03.sputn("racadabras", 10);//"abracadabras or what?"
+ VERIFY( strmsz_1 == 10 );
+ strmsz_2 = fb_03.sputn(", i wanna reach out and", 10);
+ VERIFY( strmsz_2 == 10 );
+ VERIFY( strmsz_1 == strmsz_2 );
+ // fb_03._M_out_beg = "YZracadabras, i wanna FGHIJKLMNOPQRSTUVW"
+ // fb_03._M_out_cur = "FGHIJKLMNOPQRSTUVW"
+ strmsz_1 = fb_02.sputn("racadabras", 10);
+ VERIFY( strmsz_1 == 10 );
+ // fb_02._M_out_beg = "YZracadabras<=>?@ABCDEFGHIJKLMNOPQRSTUVW"
+ // fb_02._M_out_cur = "<=>?@ABCDEFGHIJKLMNOPQRSTUVW"
+ strmsz_1 = fb_01.sputn("racadabra", 10);
+ VERIFY( strmsz_1 == 0 );
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <string>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+class nullsetpbuf : public std::filebuf
+{
+ char foo[64];
+public:
+ nullsetpbuf()
+ {
+ setp(foo, foo + 64);
+ setp(NULL, NULL);
+ }
+};
+
+// libstdc++/1057
+void test05()
+{
+ std::string text1 = "abcdefghijklmn";
+
+ nullsetpbuf nsp;
+ // Immediate crash as xsputn writes to null pointer
+ nsp.sputn(text1.c_str(), text1.length());
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+
+bool over_called;
+
+class Derived_filebuf : public std::filebuf
+{
+public:
+ int_type overflow(int_type c)
+ {
+ over_called = true;
+ return std::filebuf::overflow(c);
+ }
+
+ const char_type* pub_epptr() const
+ {
+ return epptr();
+ }
+
+ const char_type* pub_pptr() const
+ {
+ return pptr();
+ }
+};
+
+// libstdc++/9701 (partial)
+void test11()
+{
+ bool test = true;
+
+ bool over_expected;
+
+ // sputn
+ Derived_filebuf dfbuf_02;
+ dfbuf_02.open(name_05, std::ios_base::out);
+ over_called = false;
+ dfbuf_02.sputn("sonne's", 7);
+ VERIFY( !over_called );
+ over_expected = dfbuf_02.pub_epptr() == dfbuf_02.pub_pptr();
+ over_called = false;
+ dfbuf_02.sputn(" peak", 5);
+ VERIFY( (!over_expected && !over_called)
+ || (over_expected && over_called) );
+ dfbuf_02.close();
+}
+
+main()
+{
+ test11();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <locale>
+#include <testsuite_hooks.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+// NB: This test assumes that _M_buf_size == 40, and not the usual
+// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
+// simulated a bit more readily.
+// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
+const int buffer_size = 8192;
+//const int buffer_size = 40;
+
+const char carray_01[] = "santa cruz or sandiego?";
+const char carray_02[] = "memphis, new orleans, and savanah";
+const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
+const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
+const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
+const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
+const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
+const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
+
+class derived_filebuf: public std::filebuf
+{
+ public:
+ void
+ set_size(int_type __size) { _M_buf_size_opt = __size; }
+};
+
+derived_filebuf fb_01; // in
+derived_filebuf fb_02; // out
+derived_filebuf fb_03; // in | out
+
+// Initialize filebufs to be the same size regardless of platform.
+void test03()
+{
+ fb_01.set_size(buffer_size);
+ fb_02.set_size(buffer_size);
+ fb_03.set_size(buffer_size);
+}
+
+// Test overloaded virtual functions.
+void test05()
+{
+ typedef std::filebuf::int_type int_type;
+ typedef std::filebuf::traits_type traits_type;
+ typedef std::filebuf::pos_type pos_type;
+ typedef std::filebuf::off_type off_type;
+ typedef size_t size_type;
+
+ bool test = true;
+ std::filebuf f_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1, strmof_2;
+ int i = 0, j = 0, k = 0;
+
+ fb_01.open(name_01, std::ios_base::in);
+ fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc);
+ fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
+
+ int_type c1 = fb_01.sbumpc();
+ int_type c2 = fb_02.sbumpc();
+ int_type c3 = fb_01.sbumpc();
+ int_type c4 = fb_02.sbumpc();
+ int_type c5 = fb_03.sbumpc();
+ int_type c6 = fb_01.sgetc();
+ int_type c7 = fb_02.sgetc();
+ int_type c8 = fb_01.sgetc();
+ int_type c9 = fb_02.sgetc();
+
+ // PUT
+ strmsz_1 = fb_03.sputn("racadabras", 10);//"abracadabras or what?"
+ strmsz_2 = fb_03.sputn(", i wanna reach out and", 10);
+ strmsz_1 = fb_02.sputn("racadabras", 10);
+ strmsz_1 = fb_01.sputn("racadabra", 10);
+
+ // PUTBACK
+ // int_type pbfail(int_type c)
+ // called when gptr() null, gptr() == eback(), or traits::eq(*gptr, c) false
+ // "pending sequence" is:
+ // 1) everything as defined in underflow
+ // 2) + if (traits::eq_int_type(c, traits::eof()), then input
+ // sequence is backed up one char before the pending sequence is
+ // determined.
+ // 3) + if (not 2) then c is prepended. Left unspecified is
+ // whether the input sequence is backedup or modified in any way
+ // returns traits::eof() for failure, unspecified other value for success
+
+ // int_type sputbackc(char_type c)
+ // if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
+ // otherwise decrements in_cur and returns *gptr()
+ c1 = fb_03.sgetc(); // -1
+ c2 = fb_03.sputbackc('z');
+ strmsz_2 = fb_03.in_avail();
+ c3 = fb_03.sgetc();
+ //test for _in_cur == _in_beg
+ // fb_03._M_out_beg = "bd23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZracada" etc
+ fb_03.pubseekoff(10, std::ios_base::beg,
+ std::ios_base::in | std::ios_base::out);
+ fb_03.sputc('m');
+ strmsz_1 = fb_03.in_avail();
+ c1 = fb_03.sgetc();
+ fb_03.snextc();
+ c2 = fb_03.sputbackc('z');
+ strmsz_2 = fb_03.in_avail();
+ c3 = fb_03.sgetc();
+ fb_03.snextc();
+ fb_03.sputc('u');
+ fb_03.sputc('v');
+ fb_03.sputc('a');
+ strmsz_1 = fb_03.in_avail();
+ c2 = fb_03.sputbackc('a');
+ strmsz_2 = fb_03.in_avail();
+ c3 = fb_03.sgetc();
+ //test for ios_base::out
+ c1 = fb_02.sgetc(); // undefined
+ c2 = fb_02.sputbackc('a');
+
+ // int_type sungetc()
+ // if in_cur not avail, return pbackfail(), else decrement and
+ // return to_int_type(*gptr())
+ // fb_03._M_out_beg = "uvaacadabras, i wannaZ[\\]^_`abcdefghijkl"
+ // fb_03._M_out_cur = "aacadabras, i wannaZ[\\]^_`abcdefghijkl"
+ strmsz_1 = fb_03.in_avail();
+ c2 = fb_03.sungetc(); // delete the 'a'
+ strmsz_2 = fb_03.in_avail();
+ VERIFY( c2 == 'v' ); // VERIFY( c2 != traits_type::eof() );
+ VERIFY( strmsz_1 + 1 == strmsz_2 );
+ //test for _in_cur == _in_beg
+ for (int i = 50; i < 32 + 29; ++i)
+ fb_02.sputc(char(i));
+ fb_02.pubseekoff(0, std::ios_base::beg, std::ios_base::out);
+ c1 = fb_02.sgetc();
+ strmsz_1 = fb_02.in_avail();
+ c2 = fb_02.sungetc();
+ c3 = fb_02.sgetc();
+ strmsz_2 = fb_02.in_avail();
+ VERIFY( c1 == c2 );
+ VERIFY( c2 == c3 );
+ VERIFY( c1 == traits_type::eof() );
+ VERIFY( strmsz_1 == strmsz_2 );
+ //test for _in_cur == _in_end
+ fb_03.pubseekoff(0, std::ios_base::end);
+ strmsz_1 = fb_03.in_avail(); // -1 cuz at the end
+ c1 = fb_03.sgetc();
+ c2 = fb_03.sungetc();
+ strmsz_2 = fb_03.in_avail(); // 1
+ c3 = fb_03.sgetc();
+ VERIFY( c1 != c2 );
+ // VERIFY( c2 == c3 || c2 == traits_type::not_eof(int(c3)) );
+ VERIFY( strmsz_2 != strmsz_1 );
+ VERIFY( strmsz_2 == 1 );
+ //test for ios_base::out
+}
+
+main()
+{
+ test03();
+ test05();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+class setpbuf : public std::filebuf
+{
+ char buffer[4];
+ std::string result;
+
+public:
+
+ std::string&
+ get_result()
+ { return result; }
+
+ setpbuf()
+ {
+ this->open("tmp_1057", std::ios_base::out | std::ios_base::trunc);
+ char foo [32];
+ setp(foo, foo + 32);
+ setp(buffer, buffer + 4);
+ }
+
+ ~setpbuf()
+ {
+ sync();
+ close();
+ }
+
+ virtual int_type
+ overflow(int_type n)
+ {
+ if (sync() != 0)
+ return traits_type::eof();
+
+ result += traits_type::to_char_type(n);
+
+ return n;
+ }
+
+ virtual int
+ sync()
+ {
+ result.append(pbase(), pptr());
+ setp(buffer, buffer + 4);
+ return 0;
+ }
+};
+
+// libstdc++/1057
+void test04()
+{
+ bool test = true;
+ std::string text = "abcdefghijklmn";
+
+ // 01
+ setpbuf sp1;
+ // Here xsputn writes over sp1.result
+ sp1.sputn(text.c_str(), text.length());
+
+ // This crashes when result is accessed
+ sp1.pubsync();
+ VERIFY( sp1.get_result() == text );
+
+ // 02
+ setpbuf sp2;
+ for (std::string::size_type i = 0; i < text.length(); ++i)
+ {
+ // sputc also writes over result
+ sp2.sputc(text[i]);
+ }
+
+ // Crash here
+ sp2.pubsync();
+ VERIFY( sp2.get_result() == text );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <locale>
+#include <testsuite_hooks.h>
+
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+
+class errorcvt : public std::codecvt<char, char, mbstate_t>
+{
+protected:
+ std::codecvt_base::result
+ do_out(mbstate_t&, const char* from, const char*,
+ const char*& from_next, char* to, char*,
+ char*& to_next) const
+ {
+ from_next = from;
+ to_next = to;
+ return std::codecvt<char, char, mbstate_t>::error;
+ }
+
+ virtual bool do_always_noconv() const throw()
+ {
+ return false;
+ }
+};
+
+// libstdc++/9182
+// basic_filebuf<>::sync and overflow do not write out any characters
+// if codecvt<>::out returns error
+void test13()
+{
+ using namespace std;
+ bool test = true;
+
+ locale loc = locale::classic();
+ loc = locale(loc, new errorcvt);
+
+ filebuf fbuf1;
+ fbuf1.pubimbue(loc);
+ fbuf1.open(name_07, ios_base::out | ios_base::trunc);
+ fbuf1.sputn("ison", 4);
+ int r = fbuf1.pubsync();
+ VERIFY( r == -1 );
+ fbuf1.close();
+}
+
+main()
+{
+ test13();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <testsuite_hooks.h>
+
+class UnderBuf : public std::filebuf
+{
+public:
+ int_type
+ pub_underflow()
+ { return underflow(); }
+
+ std::streamsize
+ pub_showmanyc()
+ { return showmanyc(); }
+};
+
+// libstdc++/10097
+// filebuf::underflow drops characters.
+void test16()
+{
+ using namespace std;
+ bool test = true;
+
+ const char* name = "tmp_fifo1";
+
+ signal(SIGPIPE, SIG_IGN);
+ unlink(name);
+
+ if (0 != mkfifo(name, S_IRWXU))
+ {
+ VERIFY( false );
+ }
+
+ int fval = fork();
+ if (fval == -1)
+ {
+ unlink(name);
+ VERIFY( false );
+ }
+ else if (fval == 0)
+ {
+ filebuf fbout;
+ fbout.open(name, ios_base::out);
+ fbout.sputn("0123456789", 10);
+ fbout.pubsync();
+ sleep(2);
+ fbout.close();
+ exit(0);
+ }
+
+ UnderBuf fb;
+ fb.open(name, ios_base::in);
+ sleep(1);
+
+ fb.sgetc();
+ streamsize n = fb.pub_showmanyc();
+
+ while (n > 0)
+ {
+ --n;
+
+ UnderBuf::int_type c = fb.pub_underflow();
+ VERIFY( c != UnderBuf::traits_type::eof() );
+
+ fb.sbumpc();
+ }
+
+ fb.close();
+}
+
+main()
+{
+ test16();
+ return 0;
+}
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- using __gnu_cxx_test::pod_char;
- typedef short type_t;
- template class basic_fstream<type_t, char_traits<type_t> >;
- template class basic_fstream<pod_char, char_traits<pod_char> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.8.1.11 - Template class basic_fstream
+// NB: This file is for testing basic_fstream with NO OTHER INCLUDES.
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+ typedef short type_t;
+ template class basic_fstream<type_t, char_traits<type_t> >;
+ template class basic_fstream<pod_char, char_traits<pod_char> >;
+} // test
+
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_fstream<gnu_char_type, gnu_char_traits> gnu_fstr;
+
+ try
+ {
+ gnu_fstr obj;
+ }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <iostream>
+#include <fstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::fstream test_type;
+ typedef std::iostream base_type;
+ const test_type& obj = test_type();
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- typedef short type_t;
- template class basic_ifstream<type_t, char_traits<type_t> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.8.1.5 - Template class basic_ifstream
+// NB: This file is for testing basic_ifstream with NO OTHER INCLUDES.
+
+#include <fstream>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ typedef short type_t;
+ template class basic_ifstream<type_t, char_traits<type_t> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_ifstream<gnu_char_type, gnu_char_traits> gnu_ifstr;
+
+ try
+ {
+ gnu_ifstr obj;
+ }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <istream>
+#include <fstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::ifstream test_type;
+ typedef std::istream base_type;
+ const test_type& obj = test_type();
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.7 ifstream member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "ifstream_members-1.tst";
+
+// http://gcc.gnu.org/ml/libstdc++/2000-07/msg00004.html
+void test02()
+{
+ bool test = true;
+ const int more_than_max_open_files = 8200;
+
+ for (int i = 0; ++i < more_than_max_open_files;)
+ {
+ std::ifstream ifs(name_01);
+ VERIFY( static_cast<bool>(ifs) );
+ }
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
+
+
+
--- /dev/null
+// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.7 ifstream member functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "ifstream_members-1.tst";
+
+// http://gcc.gnu.org/ml/libstdc++/2000-06/msg00136.html
+void test01()
+{
+ bool test = true;
+ std::ifstream ifs1;
+ ifs1.close();
+
+ // false as expected:
+ VERIFY( !ifs1.is_open() );
+ // this is now true:
+ VERIFY( !(ifs1) );
+
+ ifs1.open(name_01);
+ VERIFY( ifs1.is_open() );
+ // fail bit still true
+ VERIFY( !(ifs1) );
+ VERIFY( ifs1.rdstate() == std::ios_base::failbit );
+
+ ifs1.close();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+
+
-// Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
const char name_01[] = "ifstream_members-1.tst";
const char name_02[] = "ifstream_members-1.txt";
-// http://gcc.gnu.org/ml/libstdc++/2000-06/msg00136.html
-bool test00()
-{
- bool test = true;
- std::ifstream ifs1;
- ifs1.close();
-
- // false as expected:
- VERIFY( !ifs1.is_open() );
- // this is now true:
- VERIFY( !(ifs1) );
-
- ifs1.open(name_01);
- VERIFY( ifs1.is_open() );
- // fail bit still true
- VERIFY( !(ifs1) );
- VERIFY( ifs1.rdstate() == std::ios_base::failbit );
-
- ifs1.close();
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2000-07/msg00004.html
-bool test01()
-{
- bool test = true;
- const int more_than_max_open_files = 8200;
-
- for(int i = 0; ++i < more_than_max_open_files;)
- {
- std::ifstream ifs(name_01);
- VERIFY( static_cast<bool>(ifs) );
- }
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
void
redirect_buffer(std::ios& stream, std::streambuf* new_buf)
{ stream.rdbuf(new_buf); }
{ return stream.rdbuf(); }
// libstdc++/2832
-void test02()
+void test03()
{
bool test = true;
const char* strlit01 = "fuck war";
int main()
{
- test00();
- test01();
-
- test02();
+ test03();
return 0;
}
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- typedef short type_t;
- template class basic_ios<type_t, char_traits<type_t> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.4 - Template class basic_ios
+// NB: This file is for testing basic_ios with NO OTHER INCLUDES.
+
+#include <ios>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ typedef short type_t;
+ template class basic_ios<type_t, char_traits<type_t> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <ios>
+#include <testsuite_hooks.h>
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+class gnu_ios: public std::basic_ios<gnu_char_type, gnu_char_traits>
+{ };
+
+void test07()
+{
+ bool test = true;
+
+ try
+ { gnu_ios obj; }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <ios>
+#include <sstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::ios test_type;
+ typedef std::ios_base base_type;
+
+ std::stringbuf buf;
+ const test_type& obj = test_type(&buf);
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.4.2 basic_ios member functions
+
+// NB: Don't include any other headers in this file.
+#include <ios>
+#include <testsuite_hooks.h>
+
+// 27.4.4.3 basic_ios iostate flags function
+void test01()
+{
+ bool test = true;
+
+ typedef std::ios_base::fmtflags fmtflags;
+ typedef std::ios_base::iostate iostate;
+ using std::ios_base;
+
+ iostate iostate02, iostate03;
+ const iostate iostate01 = std::ios_base::badbit | std::ios_base::eofbit;
+ const iostate iostate04 = std::ios_base::badbit;
+
+ std::ios ios_01(NULL);
+ std::ios::char_type ct01;
+ std::ios::char_type ct02('x');;
+
+ // bool fail() const
+ VERIFY( ios_01.fail() );
+
+ // bool operator!() const
+ VERIFY( !ios_01 );
+
+ // iostate rdstate() const
+ iostate03 = ios_01.rdstate();
+ VERIFY( static_cast<bool>(iostate03 & std::ios_base::badbit) );
+
+ // void clear(iostate state = goodbit)
+ try {
+ ios_01.clear(std::ios_base::eofbit);
+ iostate02 = ios_01.rdstate();
+ VERIFY( static_cast<bool>(iostate02 & iostate01) );
+ }
+ catch(std::ios_base::failure& fail) {
+ VERIFY( false );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
// 1999-07-23 bkoz
-// Copyright (C) 1999 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
VERIFY( ios_01.precision() == 6 );
VERIFY( ios_01.fill() == ios_01.widen(' ') );
VERIFY( ios_01.getloc() == glocale );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
}
-int main() {
+int main()
+{
test01();
return 0;
}
--- /dev/null
+// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.2.1.6 class ios_base::init
+
+#include <ios>
+#include <testsuite_hooks.h>
+
+// Non-required instantiations don't have the required facets inbued,
+// by default, into the locale object.
+// See 27.4.4.1
+class gnu_ios: public std::basic_ios<char> { };
+
+void test01()
+{
+ bool test = true;
+
+ // 01: Doesn't call basic_ios::init, which uses ctype<char_type>..
+ // This should be unambiguously correct.
+ try
+ {
+ gnu_ios gios;
+ }
+ catch(...)
+ {
+ test = false;
+ }
+ VERIFY( test );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// 27.4.2.1.6 class ios_base::init
-#include <fstream>
#include <sstream>
-#include <iostream>
#include <testsuite_hooks.h>
// char_traits specialization
not_eof(const int_type& __c)
{ return eq_int_type(__c, eof()) ? int_type(0) : __c; }
};
-
- template<>
- struct char_traits<unsigned char>
- {
- typedef unsigned char char_type;
- // Unsigned as wint_t in unsigned.
- typedef unsigned long int_type;
- typedef streampos pos_type;
- typedef streamoff off_type;
- typedef mbstate_t state_type;
-
- static void
- assign(char_type& __c1, const char_type& __c2)
- { __c1 = __c2; }
-
- static bool
- eq(const char_type& __c1, const char_type& __c2)
- { return __c1 == __c2; }
-
- static bool
- lt(const char_type& __c1, const char_type& __c2)
- { return __c1 < __c2; }
-
- static int
- compare(const char_type* __s1, const char_type* __s2, size_t __n)
- {
- for (size_t __i = 0; __i < __n; ++__i)
- if (!eq(__s1[__i], __s2[__i]))
- return lt(__s1[__i], __s2[__i]) ? -1 : 1;
- return 0;
- }
-
- static size_t
- length(const char_type* __s)
- {
- const char_type* __p = __s;
- while (__p && *__p)
- ++__p;
- return (__p - __s);
- }
-
- static const char_type*
- find(const char_type* __s, size_t __n, const char_type& __a)
- {
- for (const char_type* __p = __s; size_t(__p - __s) < __n; ++__p)
- if (*__p == __a) return __p;
- return 0;
- }
-
- static char_type*
- move(char_type* __s1, const char_type* __s2, size_t __n)
- { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }
-
- static char_type*
- copy(char_type* __s1, const char_type* __s2, size_t __n)
- { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }
-
- static char_type*
- assign(char_type* __s, size_t __n, char_type __a)
- {
- for (char_type* __p = __s; __p < __s + __n; ++__p)
- assign(*__p, __a);
- return __s;
- }
-
- static char_type
- to_char_type(const int_type& __c)
- { return char_type(); }
-
- static int_type
- to_int_type(const char_type& __c) { return int_type(); }
-
- static bool
- eq_int_type(const int_type& __c1, const int_type& __c2)
- { return __c1 == __c2; }
-
- static int_type
- eof() { return static_cast<int_type>(-1); }
-
- static int_type
- not_eof(const int_type& __c)
- { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
- };
} // namespace std
-class gnu_filebuf: public std::filebuf
-{
- int i;
-public:
- gnu_filebuf(int j = 1): i(j) { }
- ~gnu_filebuf() { --i; }
- int get_i() { return i;}
-};
-
-const int initial = 4;
-gnu_filebuf buf(initial);
-
-// libstdc++/3045, in a vague way.
-void test01()
-{
- bool test = true;
- int k1;
-
- // 1 normal
- k1 = buf.get_i();
- VERIFY( k1 == initial );
- {
- std::cout.rdbuf(&buf);
- }
- k1 = buf.get_i();
- VERIFY( k1 == initial );
-
- // 2 syncd off
- k1 = buf.get_i();
- VERIFY( k1 == initial );
- {
- std::cout.rdbuf(&buf);
- std::ios_base::sync_with_stdio(false); // make sure doesn't clobber buf
- }
- k1 = buf.get_i();
- VERIFY( k1 == initial );
-
- // 3 callling init
- k1 = buf.get_i();
- VERIFY( k1 == initial );
- {
- std::cout.rdbuf(&buf);
- std::ios_base::Init make_sure_initialized;
- }
- k1 = buf.get_i();
- VERIFY( k1 == initial );
-}
-
// Non-required instantiations don't have the required facets inbued,
// by default, into the locale object.
// See 27.4.4.1
-class gnu_ios: public std::basic_ios<char> { };
void test02()
{
bool test = true;
- // 01: Doesn't call basic_ios::init, which uses ctype<char_type>..
- // This should be unambiguously correct.
- try
- {
- gnu_ios gios;
- }
- catch(...)
- {
- test = false;
- }
-
// 02: Calls basic_ios::init, which may call ctype<char_type>...
try
{
VERIFY( test );
}
-// libstdc++/3983
-void test03()
-{
- using namespace std;
- bool test = true;
-
- // input streams
- basic_istringstream<unsigned char> iss_uc;
- unsigned char arr[6] = { 'a', 'b', 'c', 'd', 'e' };
-
- // Sentry uses locale info, so have to try one formatted input.
- try
- {
- int i;
- iss_uc >> i;
- }
- catch (bad_cast& obj)
- { }
- catch (exception& obj)
- { test = false; }
-
- try
- {
- iss_uc >> arr;
- }
- catch (bad_cast& obj)
- { }
- catch (exception& obj)
- { test = false; }
-
- try
- {
- iss_uc >> ws;
- }
- catch (bad_cast& obj)
- { }
- catch (exception& obj)
- { test = false; }
-
- try
- {
- basic_string<unsigned char> s_uc(arr);
- iss_uc >> s_uc;
- }
- catch (bad_cast& obj)
- { }
- catch (exception& obj)
- { test = false; }
-
- // output streams
- basic_ostringstream<unsigned char> oss_uc;
-
- try
- {
- bool b = true;
- oss_uc << b;
- }
- catch (bad_cast& obj)
- { }
- catch (exception& obj)
- { test = false; }
-
- VERIFY( test );
-}
-
-// libstdc++/5268
-int test04()
-{
- std::stringbuf b1;
- std::cout.rdbuf( &b1 );
- std::cout << "hello\n";
- return 0;
-}
-
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
template
unsigned short
std::basic_string<unsigned short>::_Rep::_S_terminal;
-
-template
- std::basic_string<unsigned char>::size_type
- std::basic_string<unsigned char>::_Rep::_S_max_size;
-
-template
- unsigned char
- std::basic_string<unsigned char>::_Rep::_S_terminal;
#endif
int main()
{
- test01();
test02();
- test03();
- test04();
return 0;
}
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.4.2 basic_ios member functions
+
+// NB: Don't include any other headers in this file.
+#include <ios>
+#include <testsuite_hooks.h>
+
+// 27.4.4.3 basic_ios iostate flags function
+void test02()
+{
+ bool test = true;
+
+ typedef std::ios_base::fmtflags fmtflags;
+ typedef std::ios_base::iostate iostate;
+ using std::ios_base;
+
+ iostate iostate02, iostate03;
+ const iostate iostate01 = std::ios_base::badbit | std::ios_base::eofbit;
+ const iostate iostate04 = std::ios_base::badbit;
+
+ // basic_ios& copyfmt(const basic_ios& rhs)
+ {
+ std::ios ios_01(NULL);
+ std::ios ios_02(NULL);
+ ios_01.exceptions(std::ios_base::eofbit);
+ ios_02.exceptions(std::ios_base::eofbit);
+
+ try {
+ ios_01.copyfmt(ios_02);
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+ }
+
+ {
+ std::ios ios_01(NULL);
+ std::ios ios_02(NULL);
+ ios_01.clear(std::ios_base::eofbit);
+ ios_02.exceptions(std::ios_base::eofbit);
+
+ try {
+ ios_01.copyfmt(ios_02);
+ VERIFY( false );
+ }
+ catch(std::ios_base::failure& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+ }
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.4.2 basic_ios member functions
+
+// NB: Don't include any other headers in this file.
+#include <ios>
+#include <testsuite_hooks.h>
+
+// copyfmt and locales.
+void test03()
+{
+ bool test = true;
+
+ using namespace std;
+
+ typedef std::ios_base::fmtflags fmtflags;
+ typedef std::ios_base::iostate iostate;
+ locale loc_c = locale::classic();
+ locale loc_de("de_DE");
+ std::ios ios_01(NULL);
+ std::ios ios_02(NULL);
+ ios_01.imbue(loc_c);
+ ios_02.imbue(loc_de);
+ ios_02.setstate(ios_base::badbit);
+ VERIFY( loc_c == ios_01.getloc() );
+ VERIFY( loc_de == ios_02.getloc() );
+
+ iostate ios1 = ios_01.rdstate();
+ iostate ios2 = ios_02.rdstate();
+ streambuf* sb1 = ios_01.rdbuf();
+ streambuf* sb2 = ios_02.rdbuf();
+ ios_01.copyfmt(ios_02);
+
+ VERIFY( loc_de == ios_01.getloc() );
+ VERIFY( ios_01.getloc() == ios_02.getloc() );
+ VERIFY( ios1 == ios_01.rdstate() );
+ VERIFY( ios2 == ios_02.rdstate() );
+ VERIFY( sb1 == ios_01.rdbuf() );
+ VERIFY( sb2 == ios_02.rdbuf() );
+}
+
+int main()
+{
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
+ return 0;
+}
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.4.2 basic_ios member functions
+
+// NB: Don't include any other headers in this file.
+#include <ios>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test = true;
+
+ typedef std::ios_base::fmtflags fmtflags;
+ typedef std::ios_base::iostate iostate;
+ using std::ios_base;
+
+ iostate iostate02, iostate03;
+ const iostate iostate01 = std::ios_base::badbit | std::ios_base::eofbit;
+ const iostate iostate04 = std::ios_base::badbit;
+
+ // iostate exceptions() const
+ {
+ std::ios ios_01(NULL);
+ VERIFY( ios_01.exceptions() == std::ios_base::goodbit );
+ }
+
+ // void exceptions(iostate except)
+ {
+ std::ios ios_01(NULL);
+ try {
+ ios_01.exceptions(std::ios_base::eofbit);
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+ iostate02 = ios_01.exceptions();
+ VERIFY( static_cast<bool>(iostate02 & std::ios_base::eofbit) );
+ }
+
+ {
+ std::ios ios_01(NULL);
+ ios_01.clear(std::ios_base::eofbit);
+ try {
+ ios_01.exceptions(std::ios_base::eofbit);
+ VERIFY( false );
+ }
+ catch(std::ios_base::failure& fail) {
+ iostate02 = ios_01.exceptions();
+ VERIFY( static_cast<bool>(iostate02 & std::ios_base::eofbit) );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+ }
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.4.2 basic_ios member functions
+
+// NB: Don't include any other headers in this file.
+#include <ios>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test = true;
+
+ std::ios_base::fmtflags flag02, flag03;
+ const std::ios_base::fmtflags flag01 = std::ios_base::skipws
+ | std::ios_base::dec;
+
+ const std::locale c_loc = std::locale::classic();
+
+ std::ios ios_01(NULL);
+ std::ios::char_type ct01;
+ std::ios::char_type ct02('x');;
+
+ // 27.4.2.3 locales
+ ios_01.imbue(c_loc);
+
+ // char narrow(char_type c, char dfault) const;
+ char c1 = ios_01.narrow(ct02, 0);
+ VERIFY( c1 == 'x' );
+
+ // char_type widen(char c) const;
+ ct01 = ios_01.widen('c');
+ VERIFY( ct01 == 'c' );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- typedef short type_t;
- template class basic_iostream<type_t, char_traits<type_t> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 2002-01-08 bkoz
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.6.1.5 - Template class basic_iostream
+// NB: This file is for testing iostream with NO OTHER INCLUDES.
+
+// { dg-do compile }
+
+#include <istream>
+
+namespace test
+{
+ using namespace std;
+ typedef short type_t;
+ template class basic_iostream<type_t, char_traits<type_t> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <iostream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_iostream<gnu_char_type, gnu_char_traits> gnu_iostr;
+
+ try
+ {
+ gnu_iostr obj(NULL);
+ }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <iostream>
+#include <sstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::iostream test_type;
+ typedef std::istream base_type1;
+ typedef std::ostream base_type2;
+
+ std::stringbuf buf;
+ const test_type& obj = test_type(&buf);
+ const base_type1* base1 = &obj;
+ const base_type2* base2 = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- using __gnu_cxx_test::pod_char;
- typedef short type_t;
- template class basic_istream<type_t, char_traits<type_t> >;
- template class basic_istream<pod_char, char_traits<pod_char> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.6.1.1 basic_istream
+// NB: This file is for testing istream with NO OTHER INCLUDES.
+
+#include <istream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+ typedef short type_t;
+ template class basic_istream<type_t, char_traits<type_t> >;
+ template class basic_istream<pod_char, char_traits<pod_char> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <istream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_istream<gnu_char_type, gnu_char_traits> gnu_istr;
+
+ try
+ { gnu_istr obj(NULL); }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <istream>
+#include <sstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::istream test_type;
+ typedef std::ios base_type;
+
+ std::stringbuf buf;
+ const test_type& obj = test_type(&buf);
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
// 1999-07-26 bkoz
-// Copyright (C) 1999 Free Software Foundation
+// Copyright (C) 1999, 2003 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <sstream>
#include <testsuite_hooks.h>
-bool test01() {
-
+void test01()
+{
bool test = true;
std::string str_01;
const std::string str_02("coltrane playing 'softly as a morning sunrise'");
VERIFY( state1 == state2 );
VERIFY( !static_cast<bool>(state2 & statefail) );
-
// template<_CharT, _Traits>
// basic_istream& operator>>(istream&, unsigned char*)
unsigned char array2[n];
VERIFY( array2[6] == 'y' );
int1 = is_02.peek(); // should be ' '
VERIFY( int1 == ' ' );
-
-
- // template<_CharT, _Traits>
+
+ // template<_CharT, _Traits>
// basic_istream& operator>>(istream&, signed char*)
signed char array3[n];
state1 = is_02.rdstate();
VERIFY( array3[1] == 's' );
int1 = is_02.peek(); // should be ' '
VERIFY( int1 == ' ' );
-
-
- // testing with width() control enabled.
- is_02.width(8);
- state1 = is_02.rdstate();
- is_02 >> array1; // should snake a
- state2 = is_02.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( !ctraits_type::compare(array1, "a", 2) );
-
- is_02.width(1);
- state1 = is_02.rdstate();
- is_02 >> array1; // should snake nothing, set failbit
- state2 = is_02.rdstate();
- VERIFY( state1 != state2 );
- VERIFY( state2 == statefail );
- VERIFY( array1[0] == '\0' );
-
- is_02.width(8);
- is_02.clear();
- state1 = is_02.rdstate();
- VERIFY( !state1 );
- is_02 >> array1; // should snake "morning"
- state2 = is_02.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( !ctraits_type::compare(array1, "morning", 8) );
-
- // testing for correct exception setting
- const std::string str_04(" impulse!!");
- std::stringbuf isbuf_03(str_04, std::ios_base::in);
- std::stringbuf isbuf_04(str_04, std::ios_base::in);
- std::istream is_03(&isbuf_03);
- std::istream is_04(&isbuf_04);
-
- is_03 >> array1;
- VERIFY( !ctraits_type::compare(array1,"impulse!!", 10) );
- VERIFY( is_03.rdstate() == std::ios_base::eofbit );
-
- is_04.width(9);
- is_04 >> array1;
- VERIFY( ! std::ios::traits_type::compare(array1,"impulse!", 9) );
- VERIFY( !is_04.rdstate() );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
}
-bool test02() {
-
- typedef std::ios::traits_type ctraits_type;
-
- bool test = true;
- std::string str_01;
- const std::string str_02("or coltrane playing tunji with jimmy garrison");
- const std::string str_03("coltrane");
-
- std::stringbuf isbuf_01(std::ios_base::in);
- std::stringbuf isbuf_02(str_02, std::ios_base::in);
- std::istream is_01(NULL);
- std::istream is_02(&isbuf_02);
- std::ios_base::iostate state1, state2, statefail;
- statefail = std::ios_base::failbit;
-
- // template<_CharT, _Traits>
- // basic_istream& operator>>(istream&, _CharT&)
- char c1 = 'c', c2 = 'c';
- state1 = is_01.rdstate();
- is_01 >> c1;
- state2 = is_01.rdstate();
- VERIFY( state1 != state2 );
- VERIFY( c1 == c2 );
- VERIFY( static_cast<bool>(state2 & statefail) );
-
- state1 = is_02.rdstate();
- is_02 >> c1;
- state2 = is_02.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( c1 == 'o' );
- is_02 >> c1;
- is_02 >> c1;
- VERIFY( c1 == 'c' );
- VERIFY( !static_cast<bool>(state2 & statefail) );
-
- // template<_CharT, _Traits>
- // basic_istream& operator>>(istream&, unsigned char&)
- unsigned char uc1 = 'c';
- state1 = is_02.rdstate();
- is_02 >> uc1;
- state2 = is_02.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( uc1 == 'o' );
- is_02 >> uc1;
- is_02 >> uc1;
- VERIFY( uc1 == 't' );
-
- // template<_CharT, _Traits>
- // basic_istream& operator>>(istream&, signed char&)
- signed char sc1 = 'c';
- state1 = is_02.rdstate();
- is_02 >> sc1;
- state2 = is_02.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( sc1 == 'r' );
- is_02 >> sc1;
- is_02 >> sc1;
- VERIFY( sc1 == 'n' );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-
int main()
{
test01();
- test02();
-
return 0;
}
--- /dev/null
+// 1999-07-26 bkoz
+
+// Copyright (C) 1999, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.2.3 character extractors
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test02()
+{
+ typedef std::ios::traits_type ctraits_type;
+
+ bool test = true;
+ std::string str_01;
+ const std::string str_02("or coltrane playing tunji with jimmy garrison");
+ const std::string str_03("coltrane");
+
+ std::stringbuf isbuf_01(std::ios_base::in);
+ std::stringbuf isbuf_02(str_02, std::ios_base::in);
+ std::istream is_01(NULL);
+ std::istream is_02(&isbuf_02);
+ std::ios_base::iostate state1, state2, statefail;
+ statefail = std::ios_base::failbit;
+
+ // template<_CharT, _Traits>
+ // basic_istream& operator>>(istream&, _CharT&)
+ char c1 = 'c', c2 = 'c';
+ state1 = is_01.rdstate();
+ is_01 >> c1;
+ state2 = is_01.rdstate();
+ VERIFY( state1 != state2 );
+ VERIFY( c1 == c2 );
+ VERIFY( static_cast<bool>(state2 & statefail) );
+
+ state1 = is_02.rdstate();
+ is_02 >> c1;
+ state2 = is_02.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( c1 == 'o' );
+ is_02 >> c1;
+ is_02 >> c1;
+ VERIFY( c1 == 'c' );
+ VERIFY( !static_cast<bool>(state2 & statefail) );
+
+ // template<_CharT, _Traits>
+ // basic_istream& operator>>(istream&, unsigned char&)
+ unsigned char uc1 = 'c';
+ state1 = is_02.rdstate();
+ is_02 >> uc1;
+ state2 = is_02.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( uc1 == 'o' );
+ is_02 >> uc1;
+ is_02 >> uc1;
+ VERIFY( uc1 == 't' );
+
+ // template<_CharT, _Traits>
+ // basic_istream& operator>>(istream&, signed char&)
+ signed char sc1 = 'c';
+ state1 = is_02.rdstate();
+ is_02 >> sc1;
+ state2 = is_02.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( sc1 == 'r' );
+ is_02 >> sc1;
+ is_02 >> sc1;
+ VERIFY( sc1 == 'n' );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 1999-07-26 bkoz
+
+// Copyright (C) 1999, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.2.3 character extractors
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test = true;
+ std::string str_01;
+ const std::string str_02("coltrane playing 'softly as a morning sunrise'");
+ const std::string str_03("coltrane");
+
+ std::stringbuf isbuf_01(std::ios_base::in);
+ std::stringbuf isbuf_02(str_02, std::ios_base::in);
+ std::istream is_01(NULL);
+ std::istream is_02(&isbuf_02);
+
+ std::ios_base::iostate state1, state2, statefail;
+ statefail = std::ios_base::failbit;
+
+ // template<_CharT, _Traits>
+ // basic_istream& operator>>(istream&, _CharT*)
+ int n = 20;
+ char array1[n];
+ typedef std::ios::traits_type ctraits_type;
+ ctraits_type::int_type i1, i2;
+
+ // testing with width() control enabled.
+ is_02.width(8);
+ state1 = is_02.rdstate();
+ is_02 >> array1; // should snake "coltran"
+ state2 = is_02.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( !ctraits_type::compare(array1, "coltran", 7) );
+
+ is_02.width(1);
+ state1 = is_02.rdstate();
+ is_02 >> array1; // should snake nothing, set failbit
+ state2 = is_02.rdstate();
+ VERIFY( state1 != state2 );
+ VERIFY( state2 == statefail );
+ VERIFY( array1[0] == '\0' );
+
+ is_02.width(8);
+ is_02.clear();
+ state1 = is_02.rdstate();
+ VERIFY( !state1 );
+ is_02 >> array1; // should snake "e"
+ state2 = is_02.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( !ctraits_type::compare(array1, "e", 1) );
+
+ // testing for correct exception setting
+ const std::string str_04(" impulse!!");
+ std::stringbuf isbuf_03(str_04, std::ios_base::in);
+ std::stringbuf isbuf_04(str_04, std::ios_base::in);
+ std::istream is_03(&isbuf_03);
+ std::istream is_04(&isbuf_04);
+
+ is_03 >> array1;
+ VERIFY( !ctraits_type::compare(array1,"impulse!!", 10) );
+ VERIFY( is_03.rdstate() == std::ios_base::eofbit );
+
+ is_04.width(9);
+ is_04 >> array1;
+ VERIFY( ! std::ios::traits_type::compare(array1,"impulse!", 9) );
+ VERIFY( !is_04.rdstate() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
// { dg-do compile }
-// libstdc++/7216
-void test01()
-{
- // Check for required typedefs
- typedef std::stringstream test_type;
- typedef test_type::char_type char_type;
- typedef test_type::traits_type traits_type;
- typedef test_type::int_type int_type;
- typedef test_type::pos_type pos_type;
- typedef test_type::off_type off_type;
-}
-
-namespace test
-{
- using namespace std;
- using __gnu_cxx_test::pod_char;
- typedef short type_t;
- template class basic_stringstream<type_t, char_traits<type_t> >;
- template class basic_stringstream<pod_char, char_traits<pod_char> >;
-} // test
-
// libstdc++/9826
void test02()
{
int main()
{
- test01();
test02();
return 0;
}
// 1999-07-28 bkoz
-// Copyright (C) 1999, 2001 Free Software Foundation
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <fstream>
#include <testsuite_hooks.h>
-
// stringbufs.
-bool test01() {
-
+void test01()
+{
typedef std::ios::traits_type ctraits_type;
bool test = true;
VERIFY( strtmp == str_02 ); // as only an "in" buffer
VERIFY( isbuf_03.sgetc() == 'a' );
VERIFY( is_04.peek() == ctraits_type::eof() );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-// filebufs.
-bool test02() {
-
- bool test = true;
- typedef std::ios::traits_type ctraits_type;
- const char name_01[] = "istream_extractor_other-1.txt"; //read
- const char name_02[] = "istream_extractor_other-2.txt"; //write
-
- std::filebuf fbin, fbout;
- fbin.open(name_01, std::ios_base::in);
- fbout.open(name_02, std::ios_base::out | std::ios_base::trunc);
- VERIFY( fbin.is_open() );
- VERIFY( fbout.is_open() );
-
- if (test)
- {
- std::istream is(&fbin);
- is.unsetf(std::ios_base::skipws);
- is >> &fbout;
- }
-
- fbout.close();
- fbin.close();
- VERIFY( !fbin.is_open() );
- VERIFY( !fbout.is_open() );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-void test03()
-{
- using namespace std;
- bool test = true;
-
- // template<_CharT, _Traits>
- // basic_istream& operator>>(ios_base& (*pf) (ios_base&))
- {
- int i = 0;
- std::istringstream iss(" 43");
- iss >> std::noskipws >> i;
- std::ios::iostate i3 = iss.rdstate();
- VERIFY ( !iss ); //should set failbit
- }
-
- // template<_CharT, _Traits>
- // basic_istream& operator>>(basic_ios& (*pf) (basic_ios&))
-
- // template<_CharT, _Traits>
- // basic_istream& operator>>(basic_istream& (*pf) (basic_istream&))
}
-
int main()
{
test01();
- test02();
- test03();
return 0;
}
--- /dev/null
+// 1999-07-28 bkoz
+
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.2.3 basic_istream::operator>>
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// filebufs.
+void test02()
+{
+ bool test = true;
+ typedef std::ios::traits_type ctraits_type;
+ const char name_01[] = "istream_extractor_other-1.txt"; //read
+ const char name_02[] = "istream_extractor_other-2.txt"; //write
+
+ std::filebuf fbin, fbout;
+ fbin.open(name_01, std::ios_base::in);
+ fbout.open(name_02, std::ios_base::out | std::ios_base::trunc);
+ VERIFY( fbin.is_open() );
+ VERIFY( fbout.is_open() );
+
+ if (test)
+ {
+ std::istream is(&fbin);
+ is.unsetf(std::ios_base::skipws);
+ is >> &fbout;
+ }
+
+ fbout.close();
+ fbin.close();
+ VERIFY( !fbin.is_open() );
+ VERIFY( !fbout.is_open() );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 1999-07-28 bkoz
+
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.2.3 basic_istream::operator>>
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void test03()
+{
+ using namespace std;
+ bool test = true;
+
+ // template<_CharT, _Traits>
+ // basic_istream& operator>>(ios_base& (*pf) (ios_base&))
+ {
+ int i = 0;
+ std::istringstream iss(" 43");
+ iss >> std::noskipws >> i;
+ std::ios::iostate i3 = iss.rdstate();
+ VERIFY ( !iss ); //should set failbit
+ }
+
+ // template<_CharT, _Traits>
+ // basic_istream& operator>>(basic_ios& (*pf) (basic_ios&))
+
+ // template<_CharT, _Traits>
+ // basic_istream& operator>>(basic_istream& (*pf) (basic_istream&))
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <cstring> // for memset, memcmp
+#include <streambuf>
+#include <sstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9318
+class Outbuf : public std::streambuf
+{
+public:
+ typedef std::streambuf::traits_type traits_type;
+
+ std::string result() const { return str; }
+
+protected:
+ virtual int_type overflow(int_type c = traits_type::eof())
+ {
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
+ str.push_back(traits_type::to_char_type(c));
+ return traits_type::not_eof(c);
+ }
+
+private:
+ std::string str;
+};
+
+void test09()
+{
+ bool test = true;
+
+ std::istringstream stream("Bad Moon Rising");
+ Outbuf buf;
+ stream >> &buf;
+
+ VERIFY( buf.result() == "Bad Moon Rising" );
+}
+
+int main()
+{
+ test09();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <cstring> // for memset, memcmp
+#include <streambuf>
+#include <sstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9424
+class Outbuf_2 : public std::streambuf
+{
+ char buf[1];
+
+public:
+ Outbuf_2()
+ {
+ setp(buf, buf + 1);
+ }
+
+ int_type overflow(int_type c)
+ {
+ int_type eof = traits_type::eof();
+
+ if (pptr() < epptr())
+ {
+ if (traits_type::eq_int_type(c, eof))
+ return traits_type::not_eof(c);
+
+ *pptr() = traits_type::to_char_type(c);
+ pbump(1);
+ return c;
+ }
+
+ return eof;
+ }
+};
+
+class Inbuf_2 : public std::streambuf
+{
+ static const char buf[];
+ const char* current;
+ int size;
+
+public:
+ Inbuf_2()
+ {
+ current = buf;
+ size = std::strlen(buf);
+ }
+
+ int_type underflow()
+ {
+ if (current < buf + size)
+ return traits_type::to_int_type(*current);
+ return traits_type::eof();
+ }
+
+ int_type uflow()
+ {
+ if (current < buf + size)
+ return traits_type::to_int_type(*current++);
+ return traits_type::eof();
+ }
+};
+
+const char Inbuf_2::buf[] = "Atteivlis";
+
+void test11()
+{
+ bool test = true;
+
+ Inbuf_2 inbuf1;
+ std::istream is(&inbuf1);
+ Outbuf_2 outbuf1;
+ is >> &outbuf1;
+ VERIFY( inbuf1.sgetc() == 't' );
+ VERIFY( is.good() );
+}
+
+int main()
+{
+ test11();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void
+test03()
+{
+ typedef std::char_traits<char> traits_type;
+
+ bool test = true;
+ const char str_lit01[] =
+ " sun*ra \n\t\t\t & his arkestra, featuring john gilmore: \n"
+ " "
+ "jazz in silhouette: images and forecasts of tomorrow";
+
+ std::string str01(str_lit01);
+ std::string strtmp;
+
+ std::stringbuf sbuf_03;
+ std::stringbuf sbuf_04(str01, std::ios_base::in);
+ std::stringbuf sbuf_05(str01, std::ios_base::in);
+
+ std::istream is_00(NULL);
+ std::istream is_04(&sbuf_04);
+ std::istream is_05(&sbuf_05);
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+ std::streamsize count1, count2;
+ char carray1[400] = "";
+
+ // int_type get()
+ // istream& get(char*, streamsize, char delim)
+ // istream& get(char*, streamsize)
+ // istream& get(streambuf&, char delim)
+ // istream& get(streambuf&)
+ is_00.get(carray1, 2);
+ VERIFY( static_cast<bool>(is_00.rdstate() & statefail) );
+ VERIFY( is_00.gcount() == 0 );
+
+ is_04.get(carray1, 4);
+ VERIFY( !(is_04.rdstate() & statefail) );
+ VERIFY( !traits_type::compare(carray1, " ", 4) );
+ VERIFY( is_04.gcount() == 3 );
+
+ is_04.clear();
+ is_04.get(carray1 + 3, 200);
+ VERIFY( !(is_04.rdstate() & statefail) );
+ VERIFY( !(is_04.rdstate() & stateeof) );
+ VERIFY( !traits_type::compare(carray1, str_lit01, 10) );
+ VERIFY( is_04.gcount() == 7 );
+
+ is_04.clear();
+ is_04.get(carray1, 200);
+ VERIFY( !(is_04.rdstate() & stateeof) );
+ VERIFY( static_cast<bool>(is_04.rdstate() & statefail) ); // delimiter
+ VERIFY( is_04.gcount() == 0 );
+ is_04.clear();
+ is_04.get(carray1, 200, '[');
+ VERIFY( static_cast<bool>(is_04.rdstate() & stateeof) );
+ VERIFY( !(is_04.rdstate() & statefail) );
+ VERIFY( is_04.gcount() == 125 );
+ is_04.clear();
+ is_04.get(carray1, 200);
+ VERIFY( static_cast<bool>(is_04.rdstate() & stateeof) );
+ VERIFY( static_cast<bool>(is_04.rdstate() & statefail) );
+ VERIFY( is_04.gcount() == 0 );
+
+ std::stringbuf sbuf_02(std::ios_base::in);
+ is_05.clear();
+ is_05.get(sbuf_02);
+ VERIFY( is_05.gcount() == 0 );
+ VERIFY( static_cast<bool>(is_05.rdstate() & statefail) );
+ VERIFY( !(is_05.rdstate() & stateeof) );
+
+ is_05.clear();
+ is_05.get(sbuf_03);
+ VERIFY( is_05.gcount() == 10 );
+ VERIFY( sbuf_03.str() == " sun*ra " );
+ VERIFY( !(is_05.rdstate() & statefail) );
+ VERIFY( !(is_05.rdstate() & stateeof) );
+
+ is_05.clear();
+ is_05.get(sbuf_03, '|');
+ VERIFY( is_05.gcount() == 125 );
+ VERIFY( sbuf_03.str() == str_lit01 );
+ VERIFY( !(is_05.rdstate() & statefail) );
+ VERIFY( static_cast<bool>(is_05.rdstate() & stateeof) );
+
+ is_05.clear();
+ is_05.get(sbuf_03, '|');
+ VERIFY( is_05.gcount() == 0 );
+ VERIFY( static_cast<bool>(is_05.rdstate() & stateeof) );
+ VERIFY( static_cast<bool>(is_05.rdstate() & statefail) );
+}
+
+int
+main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+//libstdc++/92: Bug in istream::get(basic_streambuf*)
+// bug reported by bgarcia@laurelnetworks.com
+// http://gcc.gnu.org/ml/libstdc++-prs/2000-q3/msg00041.html
+void
+test07()
+{
+ bool test = true;
+ const char* tfn = "istream_unformatted-1.txt";
+ std::ifstream infile;
+ infile.open(tfn);
+ VERIFY( !(!infile) );
+ while (infile)
+ {
+ std::string line;
+ std::ostringstream line_ss;
+ while (infile.peek() == '\n')
+ infile.get();
+ infile.get(*(line_ss.rdbuf()));
+ line = line_ss.str();
+ VERIFY( line == "1234567890" || line == "" );
+ }
+}
+
+int
+main()
+{
+ test07();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void
+test02()
+{
+ typedef std::char_traits<char> traits_type;
+
+ bool test = true;
+ const char str_lit01[] = "\t\t\t sun*ra \n"
+ " "
+ "and his myth science arkestra present\n"
+ " "
+ "angles and demons @ play\n"
+ " "
+ "the nubians of plutonia";
+ std::string str01(str_lit01);
+ std::string strtmp;
+
+ std::stringbuf sbuf_04(str01, std::ios_base::in);
+
+ std::istream is_00(NULL);
+ std::istream is_04(&sbuf_04);
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+ std::streamsize count1, count2;
+ char carray1[400] = "";
+
+ // istream& getline(char* s, streamsize n, char delim)
+ // istream& getline(char* s, streamsize n)
+ state1 = is_00.rdstate();
+ is_00.getline(carray1, 20, '*');
+ state2 = is_00.rdstate();
+ // make sure failbit was set, since we couldn't extract
+ // from the NULL streambuf...
+ VERIFY( state1 != state2 );
+ VERIFY( static_cast<bool>(state2 & statefail) );
+
+ VERIFY( is_04.gcount() == 0 );
+ state1 = is_04.rdstate();
+ is_04.getline(carray1, 1, '\t'); // extracts, throws away
+ state2 = is_04.rdstate();
+ VERIFY( is_04.gcount() == 1 );
+ VERIFY( state1 == state2 );
+ VERIFY( state1 == 0 );
+ VERIFY( !traits_type::compare("", carray1, 1) );
+
+ state1 = is_04.rdstate();
+ is_04.getline(carray1, 20, '*');
+ state2 = is_04.rdstate();
+ VERIFY( is_04.gcount() == 10 );
+ VERIFY( state1 == state2 );
+ VERIFY( state1 == 0 );
+ VERIFY( !traits_type::compare("\t\t sun", carray1, 10) );
+
+ state1 = is_04.rdstate();
+ is_04.getline(carray1, 20);
+ state2 = is_04.rdstate();
+ VERIFY( is_04.gcount() == 4 );
+ VERIFY( state1 == state2 );
+ VERIFY( state1 == 0 );
+ VERIFY( !traits_type::compare("ra ", carray1, 4) );
+
+ state1 = is_04.rdstate();
+ is_04.getline(carray1, 65);
+ state2 = is_04.rdstate();
+ VERIFY( is_04.gcount() == 64 );
+ VERIFY( state1 != state2 );
+ VERIFY( state2 == statefail );
+ VERIFY( !traits_type::compare(
+ " and his myth science arkestra presen",
+ carray1, 65) );
+
+ is_04.clear();
+ state1 = is_04.rdstate();
+ is_04.getline(carray1, 120, '|');
+ state2 = is_04.rdstate();
+ VERIFY( is_04.gcount() == 106 );
+ VERIFY( state1 != state2 );
+ VERIFY( state2 == stateeof );
+
+ is_04.clear();
+ state1 = is_04.rdstate();
+ is_04.getline(carray1, 100, '|');
+ state2 = is_04.rdstate();
+ VERIFY( is_04.gcount() == 0 );
+ VERIFY( state1 != state2 );
+ VERIFY( static_cast<bool>(state2 & stateeof) );
+ VERIFY( static_cast<bool>(state2 & statefail) );
+}
+
+int
+main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// [patch] bits/istream.tcc - getline(char_type*,streamsize,char_type)
+// http://gcc.gnu.org/ml/libstdc++/2000-07/msg00003.html
+void
+test05()
+{
+ const char* charray = "\n"
+"a\n"
+"aa\n"
+"aaa\n"
+"aaaa\n"
+"aaaaa\n"
+"aaaaaa\n"
+"aaaaaaa\n"
+"aaaaaaaa\n"
+"aaaaaaaaa\n"
+"aaaaaaaaaa\n"
+"aaaaaaaaaaa\n"
+"aaaaaaaaaaaa\n"
+"aaaaaaaaaaaaa\n"
+"aaaaaaaaaaaaaa\n";
+
+ bool test = true;
+ const std::streamsize it = 5;
+ std::streamsize br = 0;
+ char tmp[it];
+ std::stringbuf sb(charray, std::ios_base::in);
+ std::istream ifs(&sb);
+ std::streamsize blen = std::strlen(charray);
+ VERIFY(!(!ifs));
+ while(ifs.getline(tmp, it) || ifs.gcount())
+ {
+ br += ifs.gcount();
+ if(ifs.eof())
+ {
+ // Just sanity checks to make sure we've extracted the same
+ // number of chars that were in the streambuf
+ VERIFY(br == blen);
+ // Also, we should only set the failbit if we could
+ // _extract_ no chars from the stream, i.e. the first read
+ // returned EOF.
+ VERIFY(ifs.fail() && ifs.gcount() == 0);
+ }
+ else if(ifs.fail())
+ {
+ // delimiter not read
+ //
+ // either
+ // -> extracted no characters
+ // or
+ // -> n - 1 characters are stored
+ ifs.clear(ifs.rdstate() & ~std::ios::failbit);
+ VERIFY((ifs.gcount() == 0) || (std::strlen(tmp) == it - 1));
+ VERIFY(!(!ifs));
+ continue;
+ }
+ else
+ {
+ // delimiter was read.
+ //
+ // -> strlen(__s) < n - 1
+ // -> delimiter was seen -> gcount() > strlen(__s)
+ VERIFY(ifs.gcount() == std::strlen(tmp) + 1);
+ continue;
+ }
+ }
+}
+
+int
+main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// [bug] istream::getline(char*,streamsize) still broken
+// http://gcc.gnu.org/ml/libstdc++/2000-07/msg00126.html
+// brent verner <brent at rcfile dot org
+void
+test06()
+{
+ using namespace std;
+
+ bool test = true;
+ const streamsize it = 5;
+ char tmp[it];
+ const char* str_lit = "abcd\n";
+
+ stringbuf strbuf(str_lit, std::ios_base::in);
+ istream istr(&strbuf);
+
+ istr.getline(tmp,it);
+ VERIFY( istr.gcount() == it ); // extracted whole string
+ VERIFY( strlen(tmp) == 4 ); // stored all but '\n'
+ VERIFY( !istr.eof() ); // extracted up to but not eof
+ VERIFY( !istr.fail() ); // failbit not set
+
+ char c = 'z';
+ istr.get(c);
+ VERIFY( c == 'z' );
+ VERIFY( istr.eof() );
+}
+
+int
+main()
+{
+ test06();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ typedef std::ios::traits_type traits_type;
+
+ bool test = true;
+ const std::string str_01;
+ const std::string str_02("soul eyes: john coltrane quartet");
+ std::string strtmp;
+
+ std::stringbuf isbuf_03(str_02, std::ios_base::in);
+ std::stringbuf isbuf_04(str_02, std::ios_base::in);
+
+ std::istream is_00(NULL);
+ std::istream is_03(&isbuf_03);
+ std::istream is_04(&isbuf_04);
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+
+ // istream& read(char_type* s, streamsize n)
+ char carray[60] = "";
+ is_04.read(carray, 9);
+ VERIFY( is_04.peek() == ':' );
+
+ // istream& ignore(streamsize n = 1, int_type delim = traits::eof())
+ state1 = is_04.rdstate();
+ is_04.ignore();
+ VERIFY( is_04.gcount() == 1 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( is_04.peek() == ' ' );
+
+ state1 = is_04.rdstate();
+ is_04.ignore(0);
+ VERIFY( is_04.gcount() == 0 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( is_04.peek() == ' ' );
+
+ state1 = is_04.rdstate();
+ is_04.ignore(5, traits_type::to_int_type(' '));
+ VERIFY( is_04.gcount() == 1 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( is_04.peek() == 'j' );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// 2002-04-19 PR libstdc++ 6360
+void
+test08()
+{
+ using namespace std;
+ bool test = true;
+
+ stringstream ss("abcd" "\xFF" "1234ina donna coolbrith");
+ char c;
+ ss >> c;
+ VERIFY( c == 'a' );
+ ss.ignore(8);
+ ss >> c;
+ VERIFY( c == 'i' );
+}
+
+int
+main()
+{
+ test08();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/70220
+void
+test10()
+{
+ using namespace std;
+ bool test = true;
+ typedef string string_type;
+ typedef stringbuf stringbuf_type;
+ typedef istream istream_type;
+
+ int res = 0;
+ streamsize n;
+ string_type input("abcdefg\n");
+ stringbuf_type sbuf(input);
+ istream_type istr(&sbuf);
+
+ istr.ignore(0);
+ if (istr.gcount() != 0)
+ test = false;
+ VERIFY( test );
+
+ istr.ignore(0, 'b');
+ if (istr.gcount() != 0)
+ test = false;
+ VERIFY( test );
+
+ istr.ignore(); // Advance to next position.
+ istr.ignore(0, 'b');
+ if ((n=istr.gcount()) != 0)
+ test = false;
+ VERIFY( test );
+
+ if (istr.peek() != 'b')
+ test = false;
+ VERIFY( test );
+}
+
+int
+main()
+{
+ test10();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ typedef std::ios::traits_type traits_type;
+
+ bool test = true;
+ const std::string str_01;
+ const std::string str_02("soul eyes: john coltrane quartet");
+ std::string strtmp;
+
+ std::stringbuf isbuf_03(str_02, std::ios_base::in);
+ std::stringbuf isbuf_04(str_02, std::ios_base::in);
+
+ std::istream is_00(NULL);
+ std::istream is_03(&isbuf_03);
+ std::istream is_04(&isbuf_04);
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+
+ char carray[60] = "";
+
+ // istream& ignore(streamsize n = 1, int_type delim = traits::eof())
+ is_04.read(carray, 9);
+ VERIFY( is_04.peek() == ':' );
+
+ state1 = is_04.rdstate();
+ is_04.ignore();
+ VERIFY( is_04.gcount() == 1 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( is_04.peek() == ' ' );
+
+ state1 = is_04.rdstate();
+ is_04.ignore(0);
+ VERIFY( is_04.gcount() == 0 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( is_04.peek() == ' ' );
+
+ state1 = is_04.rdstate();
+ is_04.ignore(5, traits_type::to_int_type(' '));
+ VERIFY( is_04.gcount() == 1 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( is_04.peek() == 'j' );
+
+ // int_type peek()
+ state1 = is_04.rdstate();
+ VERIFY( is_04.peek() == 'j' );
+ VERIFY( is_04.gcount() == 0 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+
+ is_04.ignore(30);
+ state1 = is_04.rdstate();
+ VERIFY( is_04.peek() == traits_type::eof() );
+ VERIFY( is_04.gcount() == 0 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 != state2 );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// fstreams
+void test04(void)
+{
+ bool test = true;
+ std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ const char str_lit01[] = "istream_seeks-1.txt";
+ std::ifstream if01(str_lit01, std::ios_base::in | std::ios_base::out);
+
+ // libstdc++/6414
+ if01.seekg(0, std::ios_base::beg);
+ pos01 = if01.tellg();
+ if01.peek();
+ pos02 = if01.tellg();
+ VERIFY( pos02 == pos01 );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ typedef std::ios::traits_type traits_type;
+
+ bool test = true;
+ const std::string str_01;
+ const std::string str_02("soul eyes: john coltrane quartet");
+ std::string strtmp;
+
+ std::stringbuf isbuf_03(str_02, std::ios_base::in);
+ std::stringbuf isbuf_04(str_02, std::ios_base::in);
+
+ std::istream is_00(NULL);
+ std::istream is_03(&isbuf_03);
+ std::istream is_04(&isbuf_04);
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+
+ char carray[60] = "";
+
+ // istream& putback(char c)
+ is_04.ignore(30);
+ is_04.clear();
+ state1 = is_04.rdstate();
+ is_04.putback('|');
+ VERIFY( is_04.gcount() == 0 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( is_04.peek() == '|' );
+
+ // istream& unget()
+ is_04.clear();
+ state1 = is_04.rdstate();
+ is_04.unget();
+ VERIFY( is_04.gcount() == 0 );
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( is_04.peek() == 'r' );
+
+ // int sync()
+ int i = is_00.sync();
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ typedef std::ios::traits_type traits_type;
+
+ bool test = true;
+ const std::string str_01;
+ const std::string str_02("soul eyes: john coltrane quartet");
+ std::string strtmp;
+
+ std::stringbuf isbuf_03(str_02, std::ios_base::in);
+ std::stringbuf isbuf_04(str_02, std::ios_base::in);
+
+ std::istream is_00(NULL);
+ std::istream is_03(&isbuf_03);
+ std::istream is_04(&isbuf_04);
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+
+ // istream& read(char_type* s, streamsize n)
+ char carray[60] = "";
+ state1 = is_04.rdstate();
+ is_04.read(carray, 0);
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+
+ state1 = is_04.rdstate();
+ is_04.read(carray, 9);
+ state2 = is_04.rdstate();
+ VERIFY( state1 == state2 );
+ VERIFY( !std::strncmp(carray, "soul eyes", 9) );
+ VERIFY( is_04.peek() == ':' );
+
+ state1 = is_03.rdstate();
+ is_03.read(carray, 60);
+ state2 = is_03.rdstate();
+ VERIFY( state1 != state2 );
+ VERIFY( static_cast<bool>(state2 & stateeof) );
+ VERIFY( static_cast<bool>(state2 & statefail) );
+ VERIFY( !std::strncmp(carray, "soul eyes: john coltrane quartet", 35) );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// Jim Parsons <parsons at clearway dot com>
+// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00177.html
+void
+test04()
+{
+ bool test = true;
+
+ const std::string str_00("Red_Garland_Qunitet-Soul_Junction");
+ std::string strtmp;
+ char c_array[str_00.size() + 4];
+
+ std::stringbuf isbuf_00(str_00, std::ios_base::in);
+ std::istream is_00(&isbuf_00);
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+
+ state1 = stateeof | statefail;
+ VERIFY( is_00.gcount() == 0 );
+ is_00.read(c_array, str_00.size() + 1);
+ VERIFY( is_00.gcount() == str_00.size() );
+ VERIFY( is_00.rdstate() == state1 );
+
+ is_00.read(c_array, str_00.size());
+ VERIFY( is_00.rdstate() == state1 );
+}
+
+int
+main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// Theodore Papadopoulo
+void
+test09()
+{
+ using namespace std;
+ bool test = true;
+
+ istringstream iss("Juana Briones");
+ char tab[13];
+ iss.read(tab, 13);
+ if (!iss)
+ test = false;
+ VERIFY( test );
+}
+
+int
+main()
+{
+ test09();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/6746
+void test12()
+{
+ using namespace std;
+ bool test = true;
+ streamsize sum = 0;
+ istringstream iss("shamma shamma");
+
+ // test01
+ size_t i = iss.rdbuf()->in_avail();
+ VERIFY( i != 0 );
+
+ // test02
+ streamsize extracted;
+ do
+ {
+ char buf[1024];
+ extracted = iss.readsome(buf, sizeof buf);
+ sum += extracted;
+ }
+ while (iss.good() && extracted);
+ VERIFY( sum != 0 );
+}
+
+int
+main()
+{
+ test12();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/6746
+void test13()
+{
+ using namespace std;
+ bool test = true;
+ streamsize sum = 0;
+ ifstream ifs("istream_unformatted-1.tst");
+
+ // test01
+ size_t i = ifs.rdbuf()->in_avail();
+ VERIFY( i != 0 );
+
+ // test02
+ streamsize extracted;
+ do
+ {
+ char buf[1024];
+ extracted = ifs.readsome(buf, sizeof buf);
+ sum += extracted;
+ }
+ while (ifs.good() && extracted);
+ VERIFY( sum != 0 );
+}
+
+int
+main()
+{
+ test13();
+ return 0;
+}
--- /dev/null
+// 1999-08-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <cstring> // for strncmp,...
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8258
+class mybuf : public std::basic_streambuf<char>
+{ };
+
+void test11()
+{
+ bool test = true;
+ using namespace std;
+ char arr[10];
+ mybuf sbuf;
+ basic_istream<char, char_traits<char> > istr(&sbuf);
+
+ VERIFY(istr.rdstate() == ios_base::goodbit);
+ VERIFY(istr.readsome(arr, 10) == 0);
+ VERIFY(istr.rdstate() == ios_base::goodbit);
+}
+
+int
+main()
+{
+ test11();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char* s = " lootpack, peanut butter wolf, rob swift, madlib, quasimoto";
+const int times = 10;
+
+void write_rewind(std::iostream& stream)
+{
+ for (int j = 0; j < times; j++)
+ {
+ bool test = true;
+ std::streampos begin = stream.tellg();
+
+ for (int i = 0; i < times; ++i)
+ stream << j << '-' << i << s << '\n';
+
+ stream.seekg(begin);
+ std::streampos end = stream.tellg();
+ std::streampos badpos = std::streampos(std::streambuf::off_type(-1));
+ }
+}
+
+void check_contents(std::iostream& stream)
+{
+ bool test = true;
+
+ stream.clear();
+ stream.seekg(0, std::ios::beg);
+ int i = 0;
+ int loop = times * times + 2;
+ while (i < loop)
+ {
+ stream.ignore(80, '\n');
+ if (stream.good())
+ ++i;
+ else
+ break;
+ }
+ VERIFY( i == times );
+}
+
+// fstream
+// libstdc++/2346
+void test02()
+{
+ std::fstream ofstrm;
+ ofstrm.open("istream_seeks-3.txt", std::ios::out);
+ if (!ofstrm)
+ std::abort();
+ write_rewind(ofstrm);
+ ofstrm.close();
+
+ std::fstream ifstrm;
+ ifstrm.open("istream_seeks-3.txt", std::ios::in);
+ check_contents(ifstrm);
+ ifstrm.close();
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char* s = " lootpack, peanut butter wolf, rob swift, madlib, quasimoto";
+const int times = 10;
+
+void write_rewind(std::iostream& stream)
+{
+ for (int j = 0; j < times; j++)
+ {
+ bool test = true;
+ std::streampos begin = stream.tellg();
+
+ for (int i = 0; i < times; ++i)
+ stream << j << '-' << i << s << '\n';
+
+ stream.seekg(begin);
+ std::streampos end = stream.tellg();
+ std::streampos badpos = std::streampos(std::streambuf::off_type(-1));
+ }
+}
+
+void check_contents(std::iostream& stream)
+{
+ bool test = true;
+
+ stream.clear();
+ stream.seekg(0, std::ios::beg);
+ int i = 0;
+ int loop = times * times + 2;
+ while (i < loop)
+ {
+ stream.ignore(80, '\n');
+ if (stream.good())
+ ++i;
+ else
+ break;
+ }
+ VERIFY( i == times );
+}
+
+// stringstream
+// libstdc++/2346
+void test03()
+{
+ std::stringstream sstrm;
+
+ write_rewind(sstrm);
+ check_contents(sstrm);
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8348
+void test06(void)
+{
+ using namespace std;
+ bool test = true;
+ string num1("555");
+
+ // seekg
+ {
+ istringstream iss(num1);
+ istream::pos_type pos1 = iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.seekg(pos1);
+ VERIFY( test = !iss.fail() );
+ }
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8348
+void test06(void)
+{
+ using namespace std;
+ bool test = true;
+ string num1("555");
+
+ // seekg
+ {
+ istringstream iss(num1);
+ istream::pos_type pos1 = iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.seekg(0, ios_base::beg);
+ VERIFY( test = !iss.fail() );
+ }
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// fstreams
+void test04(void)
+{
+ typedef std::istream::off_type off_type;
+
+ bool test = true;
+ std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ std::ios_base::iostate state01, state02;
+ const char str_lit01[] = "istream_seeks-1.txt";
+ const char str_lit02[] = "istream_seeks-2.txt";
+ std::ifstream if01(str_lit01, std::ios_base::in | std::ios_base::out);
+ std::ifstream if02(str_lit01, std::ios_base::in);
+ std::ifstream if03(str_lit02, std::ios_base::out | std::ios_base::trunc);
+ VERIFY( if01.good() );
+ VERIFY( if02.good() );
+ VERIFY( if03.good() );
+
+ std::istream is01(if01.rdbuf());
+ std::istream is02(if02.rdbuf());
+ std::istream is03(if03.rdbuf());
+
+ pos01 = is01.tellg();
+ pos02 = is01.tellg();
+ pos03 = is02.tellg();
+ pos04 = is02.tellg();
+ pos05 = is03.tellg();
+ pos06 = is03.tellg();
+
+ // istream& seekg(pos_type)
+ // istream& seekg(off_type, ios_base::seekdir)
+
+ // cur
+ // NB: see library issues list 136. It's the v-3 interp that seekg
+ // only sets the input buffer, or else istreams with buffers that
+ // have _M_mode == ios_base::out will fail to have consistency
+ // between seekg and tellg.
+ state01 = is01.rdstate();
+ is01.seekg(10, std::ios_base::cur);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(10, std::ios_base::cur);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(10, std::ios_base::cur);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+
+ // beg
+ state01 = is01.rdstate();
+ is01.seekg(20, std::ios_base::beg);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(20, std::ios_base::beg);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(20, std::ios_base::beg);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// stringstreams
+void test05(void)
+{
+ typedef std::istream::off_type off_type;
+
+ bool test = true;
+ std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ std::ios_base::iostate state01, state02;
+ const char str_lit01[] = "istream_seeks-1.tst";
+ std::ifstream if01(str_lit01);
+ std::ifstream if02(str_lit01);
+ std::ifstream if03(str_lit01);
+ VERIFY( if01.good() );
+ VERIFY( if02.good() );
+ VERIFY( if03.good() );
+
+ std::stringbuf strbuf01(std::ios_base::in | std::ios_base::out);
+ if01 >> &strbuf01;
+ // initialize stringbufs that are ios_base::out
+ std::stringbuf strbuf03(strbuf01.str(), std::ios_base::out);
+ // initialize stringbufs that are ios_base::in
+ std::stringbuf strbuf02(strbuf01.str(), std::ios_base::in);
+
+ std::istream is01(&strbuf01);
+ std::istream is02(&strbuf02);
+ std::istream is03(&strbuf03);
+
+ // pos_type tellg()
+ // in | out
+ pos01 = is01.tellg();
+ pos02 = is01.tellg();
+ pos03 = is02.tellg();
+ pos04 = is02.tellg();
+ pos05 = is03.tellg();
+ pos06 = is03.tellg();
+
+ // istream& seekg(pos_type)
+ // istream& seekg(off_type, ios_base::seekdir)
+
+ // cur
+ // NB: see library issues list 136. It's the v-3 interp that seekg
+ // only sets the input buffer, or else istreams with buffers that
+ // have _M_mode == ios_base::out will fail to have consistency
+ // between seekg and tellg.
+ state01 = is01.rdstate();
+ is01.seekg(10, std::ios_base::cur);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(10, std::ios_base::cur);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(10, std::ios_base::cur);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 ); // as only out buffer
+ VERIFY( state01 != state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+
+ // beg
+ state01 = is01.rdstate();
+ is01.seekg(20, std::ios_base::beg);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(20, std::ios_base::beg);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(20, std::ios_base::beg);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 ); // as only out buffer
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
// 1999-10-14 bkoz
-// Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
VERIFY( bool(sentry04) == true );
}
-// libstdc++/944
-void
-test02()
-{
- using namespace std;
- istringstream in("80.21 56.89 12.3");
- bool test = true;
- int i = 0;
- double x;
-
- // ios_base::eof == 2
- while (in >> x)
- {
- ++i;
- if (i > 3)
- break;
- }
- VERIFY( i == 3 );
-}
-
-// libstdc++/9562
-void
-test03()
-{
- bool test = true;
-
- std::stringbuf strbuf01;
- std::istream strm1(&strbuf01);
- const std::istream::sentry sentry1(strm1);
-
- VERIFY( bool(sentry1) == false );
-}
-
int main()
{
test01();
- test02();
- test03();
return 0;
}
--- /dev/null
+// 1999-10-14 bkoz
+
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.6.1.1.2 class basic_istream::sentry
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/944
+void
+test02()
+{
+ using namespace std;
+ istringstream in("80.21 56.89 12.3");
+ bool test = true;
+ int i = 0;
+ double x;
+
+ // ios_base::eof == 2
+ while (in >> x)
+ {
+ ++i;
+ if (i > 3)
+ break;
+ }
+ VERIFY( i == 3 );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 1999-10-14 bkoz
+
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.6.1.1.2 class basic_istream::sentry
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9562
+void
+test03()
+{
+ bool test = true;
+
+ std::stringbuf strbuf01;
+ std::istream strm1(&strbuf01);
+ const std::istream::sentry sentry1(strm1);
+
+ VERIFY( bool(sentry1) == false );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.2.1.6 class ios_base::init
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// char_traits specialization
+namespace std
+{
+ template<>
+ struct char_traits<unsigned char>
+ {
+ typedef unsigned char char_type;
+ // Unsigned as wint_t in unsigned.
+ typedef unsigned long int_type;
+ typedef streampos pos_type;
+ typedef streamoff off_type;
+ typedef mbstate_t state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2)
+ { __c1 = __c2; }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2)
+ { return __c1 == __c2; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2)
+ { return __c1 < __c2; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ {
+ for (size_t __i = 0; __i < __n; ++__i)
+ if (!eq(__s1[__i], __s2[__i]))
+ return lt(__s1[__i], __s2[__i]) ? -1 : 1;
+ return 0;
+ }
+
+ static size_t
+ length(const char_type* __s)
+ {
+ const char_type* __p = __s;
+ while (__p && *__p)
+ ++__p;
+ return (__p - __s);
+ }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ {
+ for (const char_type* __p = __s; size_t(__p - __s) < __n; ++__p)
+ if (*__p == __a) return __p;
+ return 0;
+ }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ {
+ for (char_type* __p = __s; __p < __s + __n; ++__p)
+ assign(*__p, __a);
+ return __s;
+ }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c) { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return __c1 == __c2; }
+
+ static int_type
+ eof() { return static_cast<int_type>(-1); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
+ };
+} // namespace std
+
+// libstdc++/3983
+// Sentry uses locale info, so have to try one formatted input/output.
+void test03()
+{
+ using namespace std;
+ bool test = true;
+
+ // input streams
+ basic_ifstream<unsigned char> ifs_uc;
+ unsigned char arr[6] = { 'a', 'b', 'c', 'd', 'e' };
+
+ try
+ {
+ int i;
+ ifs_uc >> i;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ try
+ {
+ ifs_uc >> arr;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ try
+ {
+ ifs_uc >> ws;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ try
+ {
+ basic_string<unsigned char> s_uc(arr);
+ ifs_uc >> s_uc;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ VERIFY( test );
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_string<unsigned char>::size_type
+ std::basic_string<unsigned char>::_Rep::_S_max_size;
+
+template
+ unsigned char
+ std::basic_string<unsigned char>::_Rep::_S_terminal;
+#endif
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.2.1.6 class ios_base::init
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// char_traits specialization
+namespace std
+{
+ template<>
+ struct char_traits<unsigned char>
+ {
+ typedef unsigned char char_type;
+ // Unsigned as wint_t in unsigned.
+ typedef unsigned long int_type;
+ typedef streampos pos_type;
+ typedef streamoff off_type;
+ typedef mbstate_t state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2)
+ { __c1 = __c2; }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2)
+ { return __c1 == __c2; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2)
+ { return __c1 < __c2; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ {
+ for (size_t __i = 0; __i < __n; ++__i)
+ if (!eq(__s1[__i], __s2[__i]))
+ return lt(__s1[__i], __s2[__i]) ? -1 : 1;
+ return 0;
+ }
+
+ static size_t
+ length(const char_type* __s)
+ {
+ const char_type* __p = __s;
+ while (__p && *__p)
+ ++__p;
+ return (__p - __s);
+ }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ {
+ for (const char_type* __p = __s; size_t(__p - __s) < __n; ++__p)
+ if (*__p == __a) return __p;
+ return 0;
+ }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ {
+ for (char_type* __p = __s; __p < __s + __n; ++__p)
+ assign(*__p, __a);
+ return __s;
+ }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c) { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return __c1 == __c2; }
+
+ static int_type
+ eof() { return static_cast<int_type>(-1); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
+ };
+} // namespace std
+
+// libstdc++/3983
+// Sentry uses locale info, so have to try one formatted input/output.
+void test03()
+{
+ using namespace std;
+ bool test = true;
+
+ // input streams
+ basic_istringstream<unsigned char> iss_uc;
+ unsigned char arr[6] = { 'a', 'b', 'c', 'd', 'e' };
+
+ try
+ {
+ int i;
+ iss_uc >> i;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ try
+ {
+ iss_uc >> arr;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ try
+ {
+ iss_uc >> ws;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ try
+ {
+ basic_string<unsigned char> s_uc(arr);
+ iss_uc >> s_uc;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ VERIFY( test );
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_string<unsigned char>::size_type
+ std::basic_string<unsigned char>::_Rep::_S_max_size;
+
+template
+ unsigned char
+ std::basic_string<unsigned char>::_Rep::_S_terminal;
+#endif
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ using namespace std;
+ typedef ios::pos_type pos_type;
+
+ bool test = true;
+ const char str_lit01[] = "istream_seeks-1.tst";
+
+ // in
+ // test default ctors leave things in the same positions...
+ istringstream ist1;
+ pos_type p3 = ist1.tellg();
+
+ ifstream ifs1;
+ pos_type p4 = ifs1.tellg();
+
+ VERIFY( p3 == p4 );
+
+ // in
+ // test ctors leave things in the same positions...
+ istringstream ist2("bob_marley:kaya");
+ p3 = ist2.tellg();
+
+ ifstream ifs2(str_lit01);
+ p4 = ifs2.tellg();
+
+ VERIFY( p3 == p4 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8348
+void test06(void)
+{
+ using namespace std;
+ bool test = true;
+ string num1("555");
+
+ // tellg
+ {
+ istringstream iss(num1);
+ istream::pos_type pos1 = iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.tellg();
+ VERIFY( test = !iss.fail() );
+ }
+
+ // seekg
+ {
+ istringstream iss(num1);
+ istream::pos_type pos1 = iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.seekg(0, ios_base::beg);
+ VERIFY( test = !iss.fail() );
+ }
+
+ // seekg
+ {
+ istringstream iss(num1);
+ istream::pos_type pos1 = iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.seekg(pos1);
+ VERIFY( test = !iss.fail() );
+ }
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// fstreams
+void test04(void)
+{
+ typedef std::istream::off_type off_type;
+
+ bool test = true;
+ std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ std::ios_base::iostate state01, state02;
+ const char str_lit01[] = "istream_seeks-1.txt";
+ const char str_lit02[] = "istream_seeks-2.txt";
+ std::ifstream if01(str_lit01, std::ios_base::in | std::ios_base::out);
+ std::ifstream if02(str_lit01, std::ios_base::in);
+ std::ifstream if03(str_lit02, std::ios_base::out | std::ios_base::trunc);
+ VERIFY( if01.good() );
+ VERIFY( if02.good() );
+ VERIFY( if03.good() );
+
+ std::istream is01(if01.rdbuf());
+ std::istream is02(if02.rdbuf());
+ std::istream is03(if03.rdbuf());
+
+ // pos_type tellg()
+ // in | out
+ pos01 = is01.tellg();
+ pos02 = is01.tellg();
+ VERIFY( pos01 == pos02 );
+
+ // in
+ pos03 = is02.tellg();
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ // out
+ pos05 = is03.tellg();
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+
+ // cur
+ // NB: see library issues list 136. It's the v-3 interp that seekg
+ // only sets the input buffer, or else istreams with buffers that
+ // have _M_mode == ios_base::out will fail to have consistency
+ // between seekg and tellg.
+ state01 = is01.rdstate();
+ is01.seekg(10, std::ios_base::cur);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// stringstreams
+void test05(void)
+{
+ typedef std::istream::off_type off_type;
+
+ bool test = true;
+ std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ std::ios_base::iostate state01, state02;
+ const char str_lit01[] = "istream_seeks-1.tst";
+ std::ifstream if01(str_lit01);
+ std::ifstream if02(str_lit01);
+ std::ifstream if03(str_lit01);
+ VERIFY( if01.good() );
+ VERIFY( if02.good() );
+ VERIFY( if03.good() );
+
+ std::stringbuf strbuf01(std::ios_base::in | std::ios_base::out);
+ if01 >> &strbuf01;
+ // initialize stringbufs that are ios_base::out
+ std::stringbuf strbuf03(strbuf01.str(), std::ios_base::out);
+ // initialize stringbufs that are ios_base::in
+ std::stringbuf strbuf02(strbuf01.str(), std::ios_base::in);
+
+ std::istream is01(&strbuf01);
+ std::istream is02(&strbuf02);
+ std::istream is03(&strbuf03);
+
+ // pos_type tellg()
+ // in | out
+ pos01 = is01.tellg();
+ pos02 = is01.tellg();
+ VERIFY( pos01 == pos02 );
+
+ // in
+ pos03 = is02.tellg();
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ // out
+ pos05 = is03.tellg();
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+
+ // cur
+ // NB: see library issues list 136. It's the v-3 interp that seekg
+ // only sets the input buffer, or else istreams with buffers that
+ // have _M_mode == ios_base::out will fail to have consistency
+ // between seekg and tellg.
+ state01 = is01.rdstate();
+ is01.seekg(10, std::ios_base::cur);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
// 1999-07-22 bkoz
-// Copyright (C) 1994, 1999, 2001 Free Software Foundation, Inc.
+// Copyright (C) 1994, 1999, 2001, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <stdexcept>
#include <testsuite_hooks.h>
-bool test01(void)
+void test01(void)
{
bool test = true;
iss01 >> std::ws;
VERIFY( !iss01.fail() );
VERIFY( iss01.eof() );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
}
int main()
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- typedef short type_t;
- template class basic_istringstream<type_t, char_traits<type_t> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.7.2 - Template class basic_istringstream
+// NB: This file is for testing basic_istringstream with NO OTHER INCLUDES.
+
+#include <sstream>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ typedef short type_t;
+ template class basic_istringstream<type_t, char_traits<type_t> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_istringstream<gnu_char_type, gnu_char_traits> gnu_isstr;
+
+ try
+ {
+ gnu_isstr obj;
+ }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <istream>
+#include <sstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::istringstream test_type;
+ typedef std::istream base_type;
+ const test_type& obj = test_type();
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
// 2000-01-10 bkoz
-// Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <sstream>
#include <testsuite_hooks.h>
-void test01()
-{
- bool test = true;
- std::istringstream is01;
- const std::string str00;
- const std::string str01 = "123";
- std::string str02;
- const int i01 = 123;
- int a,b;
-
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
-
- // string str() const
- str02 = is01.str();
- VERIFY( str00 == str02 );
-
- // void str(const basic_string&)
- is01.str(str01);
- str02 = is01.str();
- VERIFY( str01 == str02 );
- state1 = is01.rdstate();
- is01 >> a;
- state2 = is01.rdstate();
- VERIFY( a = i01 );
- // 22.2.2.1.2 num_get virtual functions
- // p 13
- // in any case, if stage 2 processing was terminated by the test for
- // in == end then err != ios_base::eofbit is performed.
- VERIFY( state1 != state2 );
- VERIFY( state2 == stateeof );
-
- is01.str(str01);
- is01 >> b;
- VERIFY( b != a );
- // as is01.good() is false, istream::sentry blocks extraction.
-
- is01.clear();
- state1 = is01.rdstate();
- is01 >> b;
- state2 = is01.rdstate();
- VERIFY( b == a );
- VERIFY( state1 != state2 );
- VERIFY( state2 == stateeof );
-
- #ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
void
redirect_buffer(std::ios& stream, std::streambuf* new_buf)
{ stream.rdbuf(new_buf); }
int main()
{
- test01();
test02();
return 0;
}
--- /dev/null
+// 2000-01-10 bkoz
+
+// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.2.2 member functions (istringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test = true;
+ std::istringstream is01;
+ const std::string str00;
+ const std::string str01 = "123";
+ std::string str02;
+ const int i01 = 123;
+ int a,b;
+
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+
+ // string str() const
+ str02 = is01.str();
+ VERIFY( str00 == str02 );
+
+ // void str(const basic_string&)
+ is01.str(str01);
+ str02 = is01.str();
+ VERIFY( str01 == str02 );
+ state1 = is01.rdstate();
+ is01 >> a;
+ state2 = is01.rdstate();
+ VERIFY( a = i01 );
+ // 22.2.2.1.2 num_get virtual functions
+ // p 13
+ // in any case, if stage 2 processing was terminated by the test for
+ // in == end then err != ios_base::eofbit is performed.
+ VERIFY( state1 != state2 );
+ VERIFY( state2 == stateeof );
+
+ is01.str(str01);
+ is01 >> b;
+ VERIFY( b != a );
+ // as is01.good() is false, istream::sentry blocks extraction.
+
+ is01.clear();
+ state1 = is01.rdstate();
+ is01 >> b;
+ state2 = is01.rdstate();
+ VERIFY( b == a );
+ VERIFY( state1 != state2 );
+ VERIFY( state2 == stateeof );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+
+
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- typedef short type_t;
- template class basic_ifstream<type_t, char_traits<type_t> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.8.1.8 - Template class basic_ofstream
+// NB: This file is for testing basic_ofstream with NO OTHER INCLUDES.
+
+#include <fstream>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ typedef short type_t;
+ template class basic_ifstream<type_t, char_traits<type_t> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_ofstream<gnu_char_type, gnu_char_traits> gnu_ofstr;
+
+ try
+ {
+ gnu_ofstr obj;
+ }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <ostream>
+#include <fstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::ofstream test_type;
+ typedef std::ostream base_type;
+ const test_type& obj = test_type();
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.10 ofstream member functions
+// @require@ %-*.tst
+// @diff@ %-*.tst %-*.txt
+
+#include <ostream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_02[] = "ofstream_members-1.txt";
+
+// http://gcc.gnu.org/ml/libstdc++/2000-07/msg00004.html
+void test02()
+{
+ bool test = true;
+ const int more_than_max_open_files = 8200;
+
+ for(int i = 0; ++i < more_than_max_open_files;)
+ {
+ std::ofstream ifs(name_02);
+ VERIFY( static_cast<bool>(ifs) );
+ }
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
+
+
+
--- /dev/null
+// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.10 ofstream member functions
+// @require@ %-*.tst
+// @diff@ %-*.tst %-*.txt
+
+#include <ostream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const char name_01[] = "ofstream_members-1.tst";
+const char name_02[] = "ofstream_members-1.txt";
+
+// http://gcc.gnu.org/ml/libstdc++/2000-06/msg00136.html
+void test01()
+{
+ bool test = true;
+ std::ofstream ofs1;
+ ofs1.close();
+
+ // false as expected:
+ VERIFY( !ofs1.is_open() );
+ // this is now true:
+ VERIFY( !(ofs1) );
+
+ ofs1.open(name_02);
+ VERIFY( ofs1.is_open() );
+ // fail bit still true
+ VERIFY( !(ofs1) );
+ VERIFY( ofs1.rdstate() == std::ios_base::failbit );
+
+ ofs1.close();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+
+
-// Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <testsuite_hooks.h>
const char name_01[] = "ofstream_members-1.tst";
-const char name_02[] = "ofstream_members-1.txt";
-
-// http://gcc.gnu.org/ml/libstdc++/2000-06/msg00136.html
-bool test00()
-{
- bool test = true;
- std::ofstream ofs1;
- ofs1.close();
-
- // false as expected:
- VERIFY( !ofs1.is_open() );
- // this is now true:
- VERIFY( !(ofs1) );
-
- ofs1.open(name_02);
- VERIFY( ofs1.is_open() );
- // fail bit still true
- VERIFY( !(ofs1) );
- VERIFY( ofs1.rdstate() == std::ios_base::failbit );
-
- ofs1.close();
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-
-// http://gcc.gnu.org/ml/libstdc++/2000-07/msg00004.html
-bool test01()
-{
- bool test = true;
- const int more_than_max_open_files = 8200;
-
- for(int i = 0; ++i < more_than_max_open_files;)
- {
- std::ofstream ifs(name_02);
- VERIFY( static_cast<bool>(ifs) );
- }
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
void
redirect_buffer(std::ios& stream, std::streambuf* new_buf)
{ return stream.rdbuf(); }
// libstdc++/2832
-void test02()
+void test03()
{
bool test = true;
const char* strlit01 = "fuck war";
int main()
{
- test00();
- test01();
-
- test02();
+ test03();
return 0;
}
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- using __gnu_cxx_test::pod_char;
- typedef short type_t;
- template class basic_ostream<type_t, char_traits<type_t> >;
- template class basic_ostream<pod_char, char_traits<pod_char> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.6.2.1 basic_ostream
+// NB: This file is for testing ostream with NO OTHER INCLUDES.
+
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+ typedef short type_t;
+ template class basic_ostream<type_t, char_traits<type_t> >;
+ template class basic_ostream<pod_char, char_traits<pod_char> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_ostream<gnu_char_type, gnu_char_traits> gnu_ostr;
+
+ try
+ {
+ gnu_ostr obj(NULL);
+ }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <ostream>
+#include <sstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::ostream test_type;
+ typedef std::ios base_type;
+
+ std::stringbuf buf;
+ const test_type& obj = test_type(&buf);
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
{
};
-bool test01()
+void test01()
{
using namespace std;
bool test = true;
Buf buf;
- ostream stream (&buf);
+ ostream stream(&buf);
stream << 1;
VERIFY(!stream.good());
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
}
-
int main()
{
test01();
--- /dev/null
+// 1999-07-22 bkoz
+
+// Copyright (C) 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.7 standard basic_ostream manipulators
+
+#include <ostream>
+#include <sstream>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+void test01(void)
+{
+ bool test = true;
+
+ const char str_lit01[] = " venice ";
+ const std::string str01(" santa barbara ");
+ std::string str02(str_lit01);
+ std::string str04;
+ std::string str05;
+ std::ios_base::iostate flag1, flag2, flag3, flag4, flag5;
+
+ std::ostringstream oss01(str01);
+ std::ostringstream oss02;
+ std::ostringstream::int_type i01, i02;
+ typedef std::ostringstream::traits_type traits_type;
+
+ // template<_CharT, _Traits>
+ // basic_ostream<_CharT, _Traits>& ends(basic_ostream<_Char, _Traits>& os)
+ oss01 << std::endl;
+ str04 = oss01.str();
+ VERIFY( str04.size() == str01.size() );
+
+ oss02 << std::endl;
+ str05 = oss02.str();
+ VERIFY( str05.size() == 1 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-07-22 bkoz
+
+// Copyright (C) 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.7 standard basic_ostream manipulators
+
+#include <ostream>
+#include <sstream>
+#include <stdexcept>
+//#include <testsuite_hooks.h>
+#define VERIFY(x) test&=x
+
+void test01(void)
+{
+ bool test = true;
+
+ const char str_lit01[] = " venice ";
+ const std::string str01(" santa barbara ");
+ std::string str02(str_lit01);
+ std::string str04;
+ std::string str05;
+ std::ios_base::iostate flag1, flag2, flag3, flag4, flag5;
+
+ std::ostringstream oss01(str01);
+ std::ostringstream oss02;
+ std::ostringstream::int_type i01, i02;
+ typedef std::ostringstream::traits_type traits_type;
+
+ // template<_CharT, _Traits>
+ // basic_ostream<_CharT, _Traits>& ends(basic_ostream<_Char, _Traits>& os)
+ oss01 << std::ends;
+ str04 = oss01.str();
+ VERIFY( str04.size() == str01.size() );
+
+ oss02 << std::ends;
+ str05 = oss02.str();
+ VERIFY( str05.size() == 1 );
+ VERIFY( str05[0] == char() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
// 1999-07-22 bkoz
-// Copyright (C) 1994, 1999, 2000 Free Software Foundation, Inc.
+// Copyright (C) 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <stdexcept>
#include <testsuite_hooks.h>
-bool test01(void)
-{
- bool test = true;
-
- const char str_lit01[] = " venice ";
- const std::string str01(" santa barbara ");
- std::string str02(str_lit01);
- std::string str04;
- std::string str05;
- std::ios_base::iostate flag1, flag2, flag3, flag4, flag5;
-
- // template<_CharT, _Traits>
- // basic_ostream<_CharT, _Traits>& endl(basic_ostream<_Char, _Traits>& os)
- std::ostringstream oss01(str01);
- std::ostringstream oss02;
- std::ostringstream::int_type i01, i02;
- typedef std::ostringstream::traits_type traits_type;
-
- oss01 << std::endl;
- str04 = oss01.str();
- VERIFY( str04.size() == str01.size() );
-
- oss02 << std::endl;
- str05 = oss02.str();
- VERIFY( str05.size() == 1 );
-
- // template<_CharT, _Traits>
- // basic_ostream<_CharT, _Traits>& ends(basic_ostream<_Char, _Traits>& os)
- oss01 << std::ends;
- str04 = oss01.str();
- VERIFY( str04.size() == str01.size() );
- VERIFY( str04[1] == char() );
-
- oss02 << std::ends;
- str05 = oss02.str();
- VERIFY( str05.size() == 2 );
- VERIFY( str05[1] == char() );
-
- // template<_CharT, _Traits>
- // basic_ostream<_CharT, _Traits>& flush(basic_ostream<_Char, _Traits>& os)
- oss01.flush();
- str04 = oss01.str();
- VERIFY( str04.size() == str01.size() );
-
- oss02.flush();
- str05 = oss02.str();
- VERIFY( str05.size() == 2 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-
// based vaguely on this:
// http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00109.html
-bool test02()
+void test02()
{
using namespace std;
typedef ostringstream::int_type int_type;
int_type len5 = osst_01.str().size();
VERIFY( len3 < len5 );
VERIFY( len5 == len3 + len4 + 1 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
}
int main()
{
- test01();
test02();
return 0;
}
VERIFY(false);
}
-
int main()
{
test01();
--- /dev/null
+// 1999-07-22 bkoz
+
+// Copyright (C) 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.7 standard basic_ostream manipulators
+
+#include <ostream>
+#include <sstream>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+void test01(void)
+{
+ bool test = true;
+
+ const char str_lit01[] = " venice ";
+ const std::string str01(" santa barbara ");
+ std::string str02(str_lit01);
+ std::string str04;
+ std::string str05;
+ std::ios_base::iostate flag1, flag2, flag3, flag4, flag5;
+
+ std::ostringstream oss01(str01);
+ std::ostringstream oss02;
+ std::ostringstream::int_type i01, i02;
+ typedef std::ostringstream::traits_type traits_type;
+
+ // template<_CharT, _Traits>
+ // basic_ostream<_CharT, _Traits>& flush(basic_ostream<_Char, _Traits>& os)
+ oss01.flush();
+ str04 = oss01.str();
+ VERIFY( str04.size() == str01.size() );
+
+ oss02.flush();
+ str05 = oss02.str();
+ VERIFY( str05.size() == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-11-15 Kevin Ediger <kediger@licor.com>
+// test the floating point inserters (facet num_put)
+
+// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <cstdio> // for sprintf
+#include <cmath> // for abs
+#include <cfloat> // for DBL_EPSILON
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <limits>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+#ifndef DEBUG_ASSERT
+# define TEST_NUMPUT_VERBOSE 1
+#endif
+
+struct _TestCase
+{
+ double val;
+
+ int precision;
+ int width;
+ char decimal;
+ char fill;
+
+ bool fixed;
+ bool scientific;
+ bool showpos;
+ bool showpoint;
+ bool uppercase;
+ bool internal;
+ bool left;
+ bool right;
+
+ const char* result;
+};
+
+static bool T=true;
+static bool F=false;
+
+static _TestCase testcases[] =
+{
+ // standard output (no formatting applied)
+ { 1.2, 6,0,'.',' ', F,F,F,F,F,F,F,F, "1.2" },
+ { 54, 6,0,'.',' ', F,F,F,F,F,F,F,F, "54" },
+ { -.012, 6,0,'.',' ', F,F,F,F,F,F,F,F, "-0.012" },
+ { -.00000012, 6,0,'.',' ', F,F,F,F,F,F,F,F, "-1.2e-07" },
+
+ // fixed formatting
+ { 10.2345, 0,0,'.',' ', T,F,F,F,F,F,F,F, "10" },
+ { 10.2345, 0,0,'.',' ', T,F,F,T,F,F,F,F, "10." },
+ { 10.2345, 1,0,'.',' ', T,F,F,F,F,F,F,F, "10.2" },
+ { 10.2345, 4,0,'.',' ', T,F,F,F,F,F,F,F, "10.2345" },
+ { 10.2345, 6,0,'.',' ', T,F,T,F,F,F,F,F, "+10.234500" },
+ { -10.2345, 6,0,'.',' ', T,F,F,F,F,F,F,F, "-10.234500" },
+ { -10.2345, 6,0,',',' ', T,F,F,F,F,F,F,F, "-10,234500" },
+
+ // fixed formatting with width
+ { 10.2345, 4,5,'.',' ', T,F,F,F,F,F,F,F, "10.2345" },
+ { 10.2345, 4,6,'.',' ', T,F,F,F,F,F,F,F, "10.2345" },
+ { 10.2345, 4,7,'.',' ', T,F,F,F,F,F,F,F, "10.2345" },
+ { 10.2345, 4,8,'.',' ', T,F,F,F,F,F,F,F, " 10.2345" },
+ { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,F,F, " 10.2345" },
+ { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,T,F, "10.2345 " },
+ { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,F,T, " 10.2345" },
+ { 10.2345, 4,10,'.',' ', T,F,F,F,F,T,F,F, " 10.2345" },
+ { -10.2345, 4,10,'.',' ', T,F,F,F,F,T,F,F, "- 10.2345" },
+ { -10.2345, 4,10,'.','A', T,F,F,F,F,T,F,F, "-AA10.2345" },
+ { 10.2345, 4,10,'.','#', T,F,T,F,F,T,F,F, "+##10.2345" },
+
+ // scientific formatting
+ { 1.23e+12, 1,0,'.',' ', F,T,F,F,F,F,F,F, "1.2e+12" },
+ { 1.23e+12, 1,0,'.',' ', F,T,F,F,T,F,F,F, "1.2E+12" },
+ { 1.23e+12, 2,0,'.',' ', F,T,F,F,F,F,F,F, "1.23e+12" },
+ { 1.23e+12, 3,0,'.',' ', F,T,F,F,F,F,F,F, "1.230e+12" },
+ { 1.23e+12, 3,0,'.',' ', F,T,T,F,F,F,F,F, "+1.230e+12" },
+ { -1.23e-12, 3,0,'.',' ', F,T,F,F,F,F,F,F, "-1.230e-12" },
+ { 1.23e+12, 3,0,',',' ', F,T,F,F,F,F,F,F, "1,230e+12" },
+};
+
+template<typename _CharT>
+class testpunct : public numpunct<_CharT>
+{
+public:
+ typedef _CharT char_type;
+ const char_type dchar;
+
+ explicit
+ testpunct(char_type decimal_char) : numpunct<_CharT>(), dchar(decimal_char)
+ { }
+
+protected:
+ char_type
+ do_decimal_point() const
+ { return dchar; }
+
+ char_type
+ do_thousands_sep() const
+ { return ','; }
+
+ string
+ do_grouping() const
+ { return string(); }
+};
+
+template<typename _CharT>
+void apply_formatting(const _TestCase & tc, basic_ostream<_CharT> & os)
+{
+ os.precision(tc.precision);
+ os.width(tc.width);
+ os.fill(static_cast<_CharT>(tc.fill));
+ if (tc.fixed)
+ os.setf(ios::fixed);
+ if (tc.scientific)
+ os.setf(ios::scientific);
+ if (tc.showpos)
+ os.setf(ios::showpos);
+ if (tc.showpoint)
+ os.setf(ios::showpoint);
+ if (tc.uppercase)
+ os.setf(ios::uppercase);
+ if (tc.internal)
+ os.setf(ios::internal);
+ if (tc.left)
+ os.setf(ios::left);
+ if (tc.right)
+ os.setf(ios::right);
+}
+
+void
+test01()
+{
+ bool test = true;
+ for (int j=0; j<sizeof(testcases)/sizeof(testcases[0]); j++)
+ {
+ _TestCase & tc = testcases[j];
+#ifdef TEST_NUMPUT_VERBOSE
+ cout << "expect: " << tc.result << endl;
+#endif
+ // test double with char type
+ {
+ testpunct<char>* __tp = new testpunct<char>(tc.decimal);
+ ostringstream os;
+ locale __loc(os.getloc(), __tp);
+ os.imbue(__loc);
+ apply_formatting(tc, os);
+ os << tc.val;
+#ifdef TEST_NUMPUT_VERBOSE
+ cout << j << "result 1: " << os.str() << endl;
+#endif
+ VERIFY( os && os.str() == tc.result );
+ }
+ // test long double with char type
+ {
+ testpunct<char>* __tp = new testpunct<char>(tc.decimal);
+ ostringstream os;
+ locale __loc(os.getloc(), __tp);
+ os.imbue(__loc);
+ apply_formatting(tc, os);
+ os << (long double)tc.val;
+#ifdef TEST_NUMPUT_VERBOSE
+ cout << j << "result 2: " << os.str() << endl;
+#endif
+ VERIFY( os && os.str() == tc.result );
+ }
+ }
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-11-15 Kevin Ediger <kediger@licor.com>
+// test the floating point inserters (facet num_put)
+
+// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <cstdio> // for sprintf
+#include <iostream>
+#include <iomanip>
+#include <locale>
+#include <sstream>
+#include <limits>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+void
+test02()
+{
+ bool test = true;
+
+ // Make sure we can output a long float in fixed format
+ // without seg-faulting (libstdc++/4402)
+ double val2 = 3.5e230;
+
+ ostringstream os2;
+ os2.precision(3);
+ os2.setf(ios::fixed);
+
+ // Check it can be done in a locale with grouping on.
+ locale loc2("de_DE");
+ os2.imbue(loc2);
+ os2 << fixed << setprecision(3) << val2 << endl;
+ os2 << endl;
+ os2 << fixed << setprecision(1) << val2 << endl;
+}
+
+int
+main()
+{
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
+ return 0;
+}
--- /dev/null
+// 1999-11-15 Kevin Ediger <kediger@licor.com>
+// test the floating point inserters (facet num_put)
+
+// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <limits>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+template<typename T>
+bool
+test03_check(T n)
+{
+ stringbuf strbuf;
+ ostream o(&strbuf);
+ const char *expect;
+ bool test = true;
+
+ if (numeric_limits<T>::digits + 1 == 16)
+ expect = "177777 ffff";
+ else if (numeric_limits<T>::digits + 1 == 32)
+ expect = "37777777777 ffffffff";
+ else if (numeric_limits<T>::digits + 1 == 64)
+ expect = "1777777777777777777777 ffffffffffffffff";
+ else
+ expect = "wow, you've got some big numbers here";
+
+ o << oct << n << ' ' << hex << n;
+ VERIFY ( strbuf.str() == expect );
+
+ return test;
+}
+
+void
+test03()
+{
+ short s = -1;
+ int i = -1;
+ long l = -1;
+
+ test03_check (s);
+ test03_check (i);
+ test03_check (l);
+}
+
+int
+main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-11-15 Kevin Ediger <kediger@licor.com>
+// test the floating point inserters (facet num_put)
+
+// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iomanip>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+// libstdc++/3655
+int
+test04()
+{
+ stringbuf strbuf1, strbuf2;
+ ostream o1(&strbuf1), o2(&strbuf2);
+ bool test = true;
+
+ o1 << hex << showbase << setw(6) << internal << 0xff;
+ VERIFY( strbuf1.str() == "0x ff" );
+
+ // ... vs internal-adjusted const char*-type objects
+ o2 << hex << showbase << setw(6) << internal << "0xff";
+ VERIFY( strbuf2.str() == " 0xff" );
+
+ return 0;
+}
+
+int
+main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 1999-11-15 Kevin Ediger <kediger@licor.com>
+// test the floating point inserters (facet num_put)
+
+// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <cstdio> // for sprintf
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <limits>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+void
+test02()
+{
+ bool test = true;
+ // make sure we can output a very long float
+ long double val = 1.2345678901234567890123456789e+1000L;
+ int prec = numeric_limits<long double>::digits10;
+
+ ostringstream os;
+ os.precision(prec);
+ os.setf(ios::scientific);
+ os << val;
+
+ char largebuf[512];
+ sprintf(largebuf, "%.*Le", prec, val);
+#ifdef TEST_NUMPUT_VERBOSE
+ cout << "expect: " << largebuf << endl;
+ cout << "result: " << os.str() << endl;
+#endif
+ VERIFY(os && os.str() == largebuf);
+
+ // Make sure we can output a long float in fixed format
+ // without seg-faulting (libstdc++/4402)
+ double val2 = 3.5e230;
+
+ ostringstream os2;
+ os2.precision(3);
+ os2.setf(ios::fixed);
+ os2 << val2;
+
+ sprintf(largebuf, "%.*f", 3, val2);
+#ifdef TEST_NUMPUT_VERBOSE
+ cout << "expect: " << largebuf << endl;
+ cout << "result: " << os2.str() << endl;
+#endif
+ VERIFY(os2 && os2.str() == largebuf);
+}
+
+int
+main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 1999-11-15 Kevin Ediger <kediger@licor.com>
+// test the floating point inserters (facet num_put)
+
+// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <cmath> // for abs
+#include <cfloat> // for DBL_EPSILON
+#include <sstream>
+#include <limits>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+void
+test05()
+{
+ bool test = true;
+ double pi = 3.14159265358979323846;
+ ostringstream ostr;
+ ostr.precision(20);
+ ostr << pi;
+ string sval = ostr.str();
+ istringstream istr (sval);
+ double d;
+ istr >> d;
+ VERIFY( abs(pi-d)/pi < DBL_EPSILON );
+}
+
+int
+main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 1999-11-15 Kevin Ediger <kediger@licor.com>
+// test the floating point inserters (facet num_put)
+
+// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <cmath> // for abs
+#include <cfloat> // for DBL_EPSILON
+#include <sstream>
+#include <limits>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+// libstdc++/9151
+int
+test06()
+{
+ bool test = true;
+ int prec = numeric_limits<double>::digits10 + 2;
+ double oval = numeric_limits<double>::min();
+
+ stringstream ostr;
+ ostr.precision(prec);
+ ostr << oval;
+ string sval = ostr.str();
+ istringstream istr (sval);
+ double ival;
+ istr >> ival;
+ VERIFY( abs(oval-ival)/oval < DBL_EPSILON );
+ return 0;
+}
+
+int
+main()
+{
+ test06();
+ return 0;
+}
--- /dev/null
+// 1999-11-15 Kevin Ediger <kediger@licor.com>
+// test the floating point inserters (facet num_put)
+
+// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <cstdio> // for sprintf
+#include <cmath> // for abs
+#include <cfloat> // for DBL_EPSILON
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <limits>
+#include <testsuite_hooks.h>
+
+using namespace std;
+
+#ifndef DEBUG_ASSERT
+# define TEST_NUMPUT_VERBOSE 1
+#endif
+
+struct _TestCase
+{
+ double val;
+
+ int precision;
+ int width;
+ char decimal;
+ char fill;
+
+ bool fixed;
+ bool scientific;
+ bool showpos;
+ bool showpoint;
+ bool uppercase;
+ bool internal;
+ bool left;
+ bool right;
+
+ const char* result;
+ const wchar_t* wresult;
+};
+
+static bool T=true;
+static bool F=false;
+
+static _TestCase testcases[] =
+{
+ // standard output (no formatting applied) 1-4
+ { 1.2, 6,0,'.',' ', F,F,F,F,F,F,F,F, "1.2",L"1.2" },
+ { 54, 6,0,'.',' ', F,F,F,F,F,F,F,F, "54",L"54" },
+ { -.012, 6,0,'.',' ', F,F,F,F,F,F,F,F, "-0.012",L"-0.012" },
+ { -.00000012, 6,0,'.',' ', F,F,F,F,F,F,F,F, "-1.2e-07",L"-1.2e-07" },
+
+ // fixed formatting 5-11
+ { 10.2345, 0,0,'.',' ', T,F,F,F,F,F,F,F, "10",L"10" },
+ { 10.2345, 0,0,'.',' ', T,F,F,T,F,F,F,F, "10.",L"10." },
+ { 10.2345, 1,0,'.',' ', T,F,F,F,F,F,F,F, "10.2",L"10.2" },
+ { 10.2345, 4,0,'.',' ', T,F,F,F,F,F,F,F, "10.2345",L"10.2345" },
+ { 10.2345, 6,0,'.',' ', T,F,T,F,F,F,F,F, "+10.234500",L"+10.234500" },
+ { -10.2345, 6,0,'.',' ', T,F,F,F,F,F,F,F, "-10.234500",L"-10.234500" },
+ { -10.2345, 6,0,',',' ', T,F,F,F,F,F,F,F, "-10,234500",L"-10,234500" },
+
+ // fixed formatting with width 12-22
+ { 10.2345, 4,5,'.',' ', T,F,F,F,F,F,F,F, "10.2345",L"10.2345" },
+ { 10.2345, 4,6,'.',' ', T,F,F,F,F,F,F,F, "10.2345",L"10.2345" },
+ { 10.2345, 4,7,'.',' ', T,F,F,F,F,F,F,F, "10.2345",L"10.2345" },
+ { 10.2345, 4,8,'.',' ', T,F,F,F,F,F,F,F, " 10.2345",L" 10.2345" },
+ { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,F,F, " 10.2345",L" 10.2345" },
+ { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,T,F, "10.2345 ",L"10.2345 " },
+ { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,F,T, " 10.2345",L" 10.2345" },
+ { 10.2345, 4,10,'.',' ', T,F,F,F,F,T,F,F, " 10.2345",L" 10.2345" },
+ { -10.2345, 4,10,'.',' ', T,F,F,F,F,T,F,F, "- 10.2345",L"- 10.2345" },
+ { -10.2345, 4,10,'.','A', T,F,F,F,F,T,F,F, "-AA10.2345",L"-AA10.2345" },
+ { 10.2345, 4,10,'.','#', T,F,T,F,F,T,F,F, "+##10.2345",L"+##10.2345" },
+
+ // scientific formatting 23-29
+ { 1.23e+12, 1,0,'.',' ', F,T,F,F,F,F,F,F, "1.2e+12",L"1.2e+12" },
+ { 1.23e+12, 1,0,'.',' ', F,T,F,F,T,F,F,F, "1.2E+12",L"1.2E+12" },
+ { 1.23e+12, 2,0,'.',' ', F,T,F,F,F,F,F,F, "1.23e+12",L"1.23e+12" },
+ { 1.23e+12, 3,0,'.',' ', F,T,F,F,F,F,F,F, "1.230e+12",L"1.230e+12" },
+ { 1.23e+12, 3,0,'.',' ', F,T,T,F,F,F,F,F, "+1.230e+12",L"+1.230e+12" },
+ { -1.23e-12, 3,0,'.',' ', F,T,F,F,F,F,F,F, "-1.230e-12",L"-1.230e-12" },
+ { 1.23e+12, 3,0,',',' ', F,T,F,F,F,F,F,F, "1,230e+12",L"1,230e+12" },
+};
+
+template<typename _CharT>
+class testpunct : public numpunct<_CharT>
+{
+public:
+ typedef _CharT char_type;
+ const char_type dchar;
+
+ explicit
+ testpunct(char_type decimal_char) : numpunct<_CharT>(), dchar(decimal_char)
+ { }
+
+protected:
+ char_type
+ do_decimal_point() const
+ { return dchar; }
+
+ char_type
+ do_thousands_sep() const
+ { return ','; }
+
+ string
+ do_grouping() const
+ { return string(); }
+};
+
+template<typename _CharT>
+void apply_formatting(const _TestCase & tc, basic_ostream<_CharT> & os)
+{
+ os.precision(tc.precision);
+ os.width(tc.width);
+ os.fill(static_cast<_CharT>(tc.fill));
+ if (tc.fixed)
+ os.setf(ios::fixed);
+ if (tc.scientific)
+ os.setf(ios::scientific);
+ if (tc.showpos)
+ os.setf(ios::showpos);
+ if (tc.showpoint)
+ os.setf(ios::showpoint);
+ if (tc.uppercase)
+ os.setf(ios::uppercase);
+ if (tc.internal)
+ os.setf(ios::internal);
+ if (tc.left)
+ os.setf(ios::left);
+ if (tc.right)
+ os.setf(ios::right);
+}
+
+void
+test01()
+{
+ bool test = true;
+ for (int j=0; j<sizeof(testcases)/sizeof(testcases[0]); j++)
+ {
+ _TestCase & tc = testcases[j];
+#ifdef TEST_NUMPUT_VERBOSE
+ cout << "expect: " << tc.result << endl;
+#endif
+ // test double with wchar_t type
+ {
+ testpunct<wchar_t>* __tp = new testpunct<wchar_t>(tc.decimal);
+ wostringstream os;
+ locale __loc(os.getloc(), __tp);
+ os.imbue(__loc);
+ apply_formatting(tc, os);
+ os << tc.val;
+ VERIFY( os && os.str() == tc.wresult );
+ }
+ // test long double with wchar_t type
+ {
+ testpunct<wchar_t>* __tp = new testpunct<wchar_t>(tc.decimal);
+ wostringstream os;
+ locale __loc(os.getloc(), __tp);
+ os.imbue(__loc);
+ apply_formatting(tc, os);
+ os << (long double)tc.val;
+ VERIFY( os && os.str() == tc.wresult );
+ }
+ }
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// ofstream
+void test01()
+{
+ std::string str01;
+ const int size = 1000;
+ const char name_02[] = "ostream_inserter_char-1.txt";
+
+ // initialize string
+ for(int i=0 ; i < size; i++) {
+ str01 += '1';
+ str01 += '2';
+ str01 += '3';
+ str01 += '4';
+ str01 += '5';
+ str01 += '6';
+ str01 += '7';
+ str01 += '8';
+ str01 += '9';
+ str01 += '\n';
+ }
+ std::ofstream f(name_02);
+
+ f << str01;
+ f.close();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// ostringstream width() != zero
+// left
+void
+test02(void)
+{
+ bool test = true;
+ std::string tmp;
+
+ std::string str01 = "";
+ std::ostringstream oss01;
+ oss01.width(5);
+ oss01.fill('0');
+ oss01.flags(std::ios_base::left);
+ oss01 << str01;
+ tmp = oss01.str();
+ VERIFY( tmp == "00000" );
+
+ std::string str02 = "1";
+ std::ostringstream oss02;
+ oss02.width(5);
+ oss02.fill('0');
+ oss02.flags(std::ios_base::left);
+ oss02 << str02;
+ tmp = oss02.str();
+ VERIFY( tmp == "10000" );
+
+ std::string str03 = "909909";
+ std::ostringstream oss03;
+ oss03.width(5);
+ oss03.fill('0');
+ oss03.flags(std::ios_base::left);
+ oss03 << str03;
+ tmp = oss03.str();
+ VERIFY( tmp == "909909" );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// width() != zero
+// right
+void test03(void)
+{
+ bool test = true;
+ std::string tmp;
+
+ std::string str01 = "";
+ std::ostringstream oss01;
+ oss01.width(5);
+ oss01.fill('0');
+ oss01.flags(std::ios_base::right);
+ oss01 << str01;
+ tmp = oss01.str();
+ VERIFY( tmp == "00000" );
+
+ std::string str02 = "1";
+ std::ostringstream oss02;
+ oss02.width(5);
+ oss02.fill('0');
+ oss02.flags(std::ios_base::right);
+ oss02 << str02;
+ tmp = oss02.str();
+ VERIFY( tmp == "00001" );
+
+ std::string str03 = "909909";
+ std::ostringstream oss03;
+ oss03.width(5);
+ oss03.fill('0');
+ oss03.flags(std::ios_base::right);
+ oss03 << str03;
+ tmp = oss03.str();
+ VERIFY( tmp == "909909" );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// stringstream and large strings
+void
+test04()
+{
+ bool test = true;
+ std::string str_01;
+ const std::string str_02("coltrane playing 'softly as a morning sunrise'");
+ const std::string str_03("coltrane");
+ std::string str_tmp;
+ const int i_max=250;
+
+ std::ostringstream oss_01(std::ios_base::out);
+ std::ostringstream oss_02(str_01, std::ios_base::out);
+
+ std::ios_base::iostate state1, state2, statefail;
+ statefail = std::ios_base::failbit;
+
+ // template<_CharT, _Traits>
+ // basic_ostream& operator<<(ostream&, const char*)
+ for (int i = 0; i < i_max; ++i)
+ oss_02 << "Test: " << i << std::endl;
+ str_tmp = oss_02.str();
+ VERIFY( !oss_02.bad() );
+ VERIFY( oss_02.good() );
+ VERIFY( str_tmp != str_01 );
+ VERIFY( str_tmp.size() == 2390 );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// ostringstream and large strings number 2
+void
+test05()
+{
+ bool test = true;
+ std::string str05, str10;
+
+ typedef std::ostream::pos_type pos_type;
+ typedef std::ostream::off_type off_type;
+ std::string str01;
+ const int size = 1000;
+
+ // initialize string
+ for(int i=0 ; i < size; i++) {
+ str01 += '1';
+ str01 += '2';
+ str01 += '3';
+ str01 += '4';
+ str01 += '5';
+ str01 += '6';
+ str01 += '7';
+ str01 += '8';
+ str01 += '9';
+ str01 += '\n';
+ }
+
+ // test 1: out
+ std::ostringstream sstr01(str01, std::ios_base::out);
+ std::ostringstream sstr02;
+ sstr02 << str01;
+ str05 = sstr01.str();
+ str10 = sstr02.str();
+ VERIFY( str05 == str01 );
+ VERIFY( str10 == str01 );
+
+ // test 2: in | out
+ std::ostringstream sstr04(str01, std::ios_base::out | std::ios_base::in);
+ std::ostringstream sstr05(std::ios_base::in | std::ios_base::out);
+ sstr05 << str01;
+ str05 = sstr04.str();
+ str10 = sstr05.str();
+ VERIFY( str05 == str01 );
+ VERIFY( str10 == str01 );
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// ostringstream and positioning, multiple writes
+// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00326.html
+void test06()
+{
+ bool test = true;
+ const char carray01[] = "mos def & talib kweli are black star";
+
+ // normal
+ std::ostringstream ostr1("mos def");
+ VERIFY( ostr1.str() == "mos def" );
+ ostr1 << " & talib kweli"; // should overwrite first part of buffer
+ VERIFY( ostr1.str() == " & talib kweli" );
+ ostr1 << " are black star"; // should append to string from above
+ VERIFY( ostr1.str() != carray01 );
+ VERIFY( ostr1.str() == " & talib kweli are black star" );
+
+ // appending
+ std::ostringstream ostr2("blackalicious",
+ std::ios_base::out | std::ios_base::ate);
+ VERIFY( ostr2.str() == "blackalicious" );
+ ostr2 << " NIA "; // should not overwrite first part of buffer
+ VERIFY( ostr2.str() == "blackalicious NIA " );
+ ostr2 << "4: deception (5:19)"; // should append to full string from above
+ VERIFY( ostr2.str() == "blackalicious NIA 4: deception (5:19)" );
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void test08()
+{
+ bool test = true;
+ char* pt = NULL;
+
+ // 1
+ std::ostringstream oss;
+ oss << pt;
+ VERIFY( oss.bad() );
+ VERIFY( oss.str().size() == 0 );
+
+ oss.clear();
+ oss << "";
+ VERIFY( oss.good() );
+}
+
+int main()
+{
+ test08();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// Global counter, needs to be reset after use.
+bool used;
+
+class gnu_ctype : public std::ctype<wchar_t>
+{
+protected:
+ char_type
+ do_widen(char c) const
+ {
+ used = true;
+ return std::ctype<wchar_t>::do_widen(c);
+ }
+
+ const char*
+ do_widen(const char* low, const char* high, char_type* dest) const
+ {
+ used = true;
+ return std::ctype<wchar_t>::do_widen(low, high, dest);
+ }
+};
+
+// 27.6.2.5.4 - Character inserter template functions
+// [lib.ostream.inserters.character]
+void test07()
+{
+ using namespace std;
+ bool test = true;
+
+ const char* buffer = "SFPL 5th floor, outside carrol, the Asian side";
+
+ wostringstream oss;
+ oss.imbue(locale(locale::classic(), new gnu_ctype));
+
+ // 1
+ // template<class charT, class traits>
+ // basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& out,
+ // const char* s);
+ used = false;
+ oss << buffer;
+ VERIFY( used ); // Only required for char_type != char
+ wstring str = oss.str();
+ wchar_t c1 = oss.widen(buffer[0]);
+ VERIFY( str[0] == c1 );
+ wchar_t c2 = oss.widen(buffer[1]);
+ VERIFY( str[1] == c2 );
+
+ // 2
+ // template<class charT, class traits>
+ // basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& out,
+ // char c);
+ used = false;
+ oss.str(wstring());
+ oss << 'b';
+ VERIFY( used ); // Only required for char_type != char
+ str = oss.str();
+ wchar_t c3 = oss.widen('b');
+ VERIFY( str[0] == c3 );
+}
+
+int main()
+{
+ test07();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+
+// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+
+#include <string>
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+void test08()
+{
+ bool test = true;
+ char* pt = NULL;
+
+ // 2
+ std::wostringstream woss;
+ woss << pt;
+ VERIFY( woss.bad() );
+ VERIFY( woss.str().size() == 0 );
+
+ woss.clear();
+ woss << "";
+ VERIFY( woss.good() );
+
+ // 3
+ wchar_t* wt = NULL;
+ woss.clear();
+ woss << wt;
+ VERIFY( woss.bad() );
+ VERIFY( woss.str().size() == 0 );
+
+ woss.clear();
+ woss << L"";
+ VERIFY( woss.good() );
+}
+
+int main()
+{
+ test08();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+// 1999-11-01 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+const int size = 1000;
+const char name_01[] = "ostream_inserter_other-1.tst";
+const char name_02[] = "ostream_inserter_other-1.txt";
+const char name_03[] = "ostream_inserter_other-2.tst";
+const char name_04[] = "ostream_inserter_other-2.txt";
+
+// fstream
+void
+test02()
+{
+ typedef std::ios_base::iostate iostate;
+ bool test = true;
+
+ // basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sb)
+ // filebuf-> NULL
+ std::ifstream f_in1(name_01);
+ std::ofstream f_out1(name_02);
+ std::stringbuf* strbuf01 = NULL;
+ iostate state01 = f_in1.rdstate();
+ f_in1 >> strbuf01;
+ iostate state02 = f_in1.rdstate();
+ VERIFY( state01 != state02 );
+ VERIFY( (state02 & std::ios_base::failbit) != 0 );
+ state01 = f_out1.rdstate();
+ f_out1 << strbuf01;
+ state02 = f_out1.rdstate();
+ VERIFY( state01 != state02 );
+ VERIFY( (state02 & std::ios_base::badbit) != 0 );
+
+ // filebuf->filebuf
+ std::ifstream f_in(name_01);
+ std::ofstream f_out(name_02);
+ f_out << f_in.rdbuf();
+ f_in.close();
+ f_out.close();
+
+ // filebuf->stringbuf->filebuf
+ std::ifstream f_in2(name_03);
+ std::ofstream f_out2(name_04); // should be different name
+ std::stringbuf strbuf02;
+ f_in2 >> &strbuf02;
+ f_out2 << &strbuf02;
+ f_in2.close();
+ f_out2.close();
+}
+
+int
+main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+// 1999-11-01 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// via Brent Verner <brent@rcfile.org>
+// http://gcc.gnu.org/ml/libstdc++/2000-06/msg00005.html
+void
+test03(void)
+{
+ using namespace std;
+
+ typedef ios::pos_type pos_type;
+
+ const char* TEST_IN = "ostream_inserter_other_in";
+ const char* TEST_OUT = "ostream_inserter_other_out";
+ pos_type i_read, i_wrote, rs, ws;
+ double tf_size = BUFSIZ * 2.5;
+ ofstream testfile(TEST_IN);
+
+ for (int i = 0; i < tf_size; ++i)
+ testfile.put('.');
+ testfile.close();
+
+ ifstream in(TEST_IN);
+ ofstream out(TEST_OUT);
+ out << in.rdbuf();
+ in.seekg(0,ios_base::beg);
+ out.seekp(0,ios_base::beg);
+ rs = in.tellg();
+ ws = out.tellp();
+ in.seekg(0,ios_base::end);
+ out.seekp(0,ios_base::end);
+ i_read = in.tellg() - rs;
+ i_wrote = out.tellp() - ws;
+ in.close();
+ out.close();
+}
+
+int
+main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-08-16 bkoz
+// 1999-11-01 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.5.4 basic_ostream character inserters
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <ostream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/3272
+void test04()
+{
+ using namespace std;
+ bool test = true;
+ istringstream istr("inside betty carter");
+ ostringstream ostr;
+ ostr << istr.rdbuf() << endl;
+
+ if (ostr.rdstate() & ios_base::eofbit)
+ test = false;
+
+ VERIFY( test );
+}
+
+int
+main()
+{
+ test04();
+ return 0;
+}
// 1999-08-16 bkoz
// 1999-11-01 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <fstream>
#include <testsuite_hooks.h>
-const int size = 1000;
-const char name_01[] = "ostream_inserter_other-1.tst";
-const char name_02[] = "ostream_inserter_other-1.txt";
-const char name_03[] = "ostream_inserter_other-2.tst";
-const char name_04[] = "ostream_inserter_other-2.txt";
-
-
-// stringstream
-int
-test01()
-{
- bool test = true;
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return 0;
-}
-
-// fstream
-int
-test02()
-{
- typedef std::ios_base::iostate iostate;
- bool test = true;
-
- // basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sb)
- // filebuf-> NULL
- std::ifstream f_in1(name_01);
- std::ofstream f_out1(name_02);
- std::stringbuf* strbuf01 = NULL;
- iostate state01 = f_in1.rdstate();
- f_in1 >> strbuf01;
- iostate state02 = f_in1.rdstate();
- VERIFY( state01 != state02 );
- VERIFY( (state02 & std::ios_base::failbit) != 0 );
- state01 = f_out1.rdstate();
- f_out1 << strbuf01;
- state02 = f_out1.rdstate();
- VERIFY( state01 != state02 );
- VERIFY( (state02 & std::ios_base::badbit) != 0 );
-
- // filebuf->filebuf
- std::ifstream f_in(name_01);
- std::ofstream f_out(name_02);
- f_out << f_in.rdbuf();
- f_in.close();
- f_out.close();
-
- // filebuf->stringbuf->filebuf
- std::ifstream f_in2(name_03);
- std::ofstream f_out2(name_04); // should be different name
- std::stringbuf strbuf02;
- f_in2 >> &strbuf02;
- f_out2 << &strbuf02;
- f_in2.close();
- f_out2.close();
-
- // no characters inserted
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return 0;
-}
-
-// via Brent Verner <brent@rcfile.org>
-// http://gcc.gnu.org/ml/libstdc++/2000-06/msg00005.html
-int
-test03(void)
-{
- using namespace std;
-
- typedef ios::pos_type pos_type;
-
- const char* TEST_IN = "ostream_inserter_other_in";
- const char* TEST_OUT = "ostream_inserter_other_out";
- pos_type i_read, i_wrote, rs, ws;
- double tf_size = BUFSIZ * 2.5;
- ofstream testfile(TEST_IN);
-
- for (int i = 0; i < tf_size; ++i)
- testfile.put('.');
- testfile.close();
-
- ifstream in(TEST_IN);
- ofstream out(TEST_OUT);
- out << in.rdbuf();
- in.seekg(0,ios_base::beg);
- out.seekp(0,ios_base::beg);
- rs = in.tellg();
- ws = out.tellp();
- in.seekg(0,ios_base::end);
- out.seekp(0,ios_base::end);
- i_read = in.tellg() - rs;
- i_wrote = out.tellp() - ws;
- in.close();
- out.close();
-
-#ifdef DEBUG_ASSERT
- assert(i_read == i_wrote);
-#endif
-
- return 0;
-}
-
-// libstdc++/3272
-void test04()
-{
- using namespace std;
- bool test = true;
- istringstream istr("inside betty carter");
- ostringstream ostr;
- ostr << istr.rdbuf() << endl;
-
- if (ostr.rdstate() & ios_base::eofbit)
- test = false;
-
- VERIFY( test );
-}
-
-
class test_buffer_1 : public std::streambuf
{
public:
int
main()
{
- test01();
- test02();
- test03();
- test04();
-
test05();
return 0;
}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <sstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9318
+class Outbuf : public std::streambuf
+{
+public:
+ typedef std::streambuf::traits_type traits_type;
+
+ std::string result() const { return str; }
+
+protected:
+ virtual int_type overflow(int_type c = traits_type::eof())
+ {
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
+ str.push_back(traits_type::to_char_type(c));
+ return traits_type::not_eof(c);
+ }
+
+private:
+ std::string str;
+};
+
+void test10()
+{
+ bool test = true;
+
+ std::stringbuf sbuf("Bad Moon Rising", std::ios::in);
+ Outbuf buf;
+ std::ostream stream(&buf);
+ stream << &sbuf;
+
+ VERIFY( buf.result() == "Bad Moon Rising" );
+}
+
+int main()
+{
+ test10();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <cstring> // for memset, memcmp
+#include <streambuf>
+#include <sstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9424
+class Outbuf_2 : public std::streambuf
+{
+ char buf[1];
+
+public:
+ Outbuf_2()
+ {
+ setp(buf, buf + 1);
+ }
+
+ int_type overflow(int_type c)
+ {
+ int_type eof = traits_type::eof();
+
+ if (pptr() < epptr())
+ {
+ if (traits_type::eq_int_type(c, eof))
+ return traits_type::not_eof(c);
+
+ *pptr() = traits_type::to_char_type(c);
+ pbump(1);
+ return c;
+ }
+
+ return eof;
+ }
+};
+
+class Inbuf_2 : public std::streambuf
+{
+ static const char buf[];
+ const char* current;
+ int size;
+
+public:
+ Inbuf_2()
+ {
+ current = buf;
+ size = std::strlen(buf);
+ }
+
+ int_type underflow()
+ {
+ if (current < buf + size)
+ return traits_type::to_int_type(*current);
+ return traits_type::eof();
+ }
+
+ int_type uflow()
+ {
+ if (current < buf + size)
+ return traits_type::to_int_type(*current++);
+ return traits_type::eof();
+ }
+};
+
+const char Inbuf_2::buf[] = "Atteivlis";
+
+void test12()
+{
+ bool test = true;
+
+ Outbuf_2 outbuf2;
+ std::ostream os (&outbuf2);
+ Inbuf_2 inbuf2;
+ os << &inbuf2;
+ VERIFY( inbuf2.sgetc() == 't' );
+ VERIFY( os.good() );
+}
+
+int main()
+{
+ test12();
+ return 0;
+}
--- /dev/null
+// 2003-02-06 Paolo Carlini <pcarlini@unitus.it>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.6.2.3 class basic_ostream::sentry
+
+#include <ostream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9562
+void
+test01()
+{
+ bool test = true;
+
+ std::stringbuf strbuf01;
+ std::ostream strm1(&strbuf01);
+ const std::ostream::sentry sentry1(strm1);
+
+ VERIFY( bool(sentry1) == true );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
#include <sstream>
#include <testsuite_hooks.h>
-// libstdc++/9562
-void
-test01()
-{
- bool test = true;
-
- std::stringbuf strbuf01;
- std::ostream strm1(&strbuf01);
- const std::ostream::sentry sentry1(strm1);
-
- VERIFY( bool(sentry1) == true );
-}
-
// libstdc++/9563
struct buf: std::streambuf
{
int main()
{
- test01();
test02();
return 0;
}
--- /dev/null
+// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.2.1.6 class ios_base::init
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// char_traits specialization
+namespace std
+{
+ template<>
+ struct char_traits<unsigned char>
+ {
+ typedef unsigned char char_type;
+ // Unsigned as wint_t in unsigned.
+ typedef unsigned long int_type;
+ typedef streampos pos_type;
+ typedef streamoff off_type;
+ typedef mbstate_t state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2)
+ { __c1 = __c2; }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2)
+ { return __c1 == __c2; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2)
+ { return __c1 < __c2; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ {
+ for (size_t __i = 0; __i < __n; ++__i)
+ if (!eq(__s1[__i], __s2[__i]))
+ return lt(__s1[__i], __s2[__i]) ? -1 : 1;
+ return 0;
+ }
+
+ static size_t
+ length(const char_type* __s)
+ {
+ const char_type* __p = __s;
+ while (__p && *__p)
+ ++__p;
+ return (__p - __s);
+ }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ {
+ for (const char_type* __p = __s; size_t(__p - __s) < __n; ++__p)
+ if (*__p == __a) return __p;
+ return 0;
+ }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ {
+ for (char_type* __p = __s; __p < __s + __n; ++__p)
+ assign(*__p, __a);
+ return __s;
+ }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c) { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return __c1 == __c2; }
+
+ static int_type
+ eof() { return static_cast<int_type>(-1); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
+ };
+} // namespace std
+
+// libstdc++/3983
+// Sentry uses locale info, so have to try one formatted input/output.
+void test03()
+{
+ using namespace std;
+ bool test = true;
+
+ // output streams
+ basic_ofstream<unsigned char> ofs_uc;
+
+ try
+ {
+ bool b = true;
+ ofs_uc << b;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ VERIFY( test );
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_string<unsigned char>::size_type
+ std::basic_string<unsigned char>::_Rep::_S_max_size;
+
+template
+ unsigned char
+ std::basic_string<unsigned char>::_Rep::_S_terminal;
+#endif
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.2.1.6 class ios_base::init
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// char_traits specialization
+namespace std
+{
+ template<>
+ struct char_traits<unsigned char>
+ {
+ typedef unsigned char char_type;
+ // Unsigned as wint_t in unsigned.
+ typedef unsigned long int_type;
+ typedef streampos pos_type;
+ typedef streamoff off_type;
+ typedef mbstate_t state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2)
+ { __c1 = __c2; }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2)
+ { return __c1 == __c2; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2)
+ { return __c1 < __c2; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ {
+ for (size_t __i = 0; __i < __n; ++__i)
+ if (!eq(__s1[__i], __s2[__i]))
+ return lt(__s1[__i], __s2[__i]) ? -1 : 1;
+ return 0;
+ }
+
+ static size_t
+ length(const char_type* __s)
+ {
+ const char_type* __p = __s;
+ while (__p && *__p)
+ ++__p;
+ return (__p - __s);
+ }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ {
+ for (const char_type* __p = __s; size_t(__p - __s) < __n; ++__p)
+ if (*__p == __a) return __p;
+ return 0;
+ }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ {
+ for (char_type* __p = __s; __p < __s + __n; ++__p)
+ assign(*__p, __a);
+ return __s;
+ }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c) { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return __c1 == __c2; }
+
+ static int_type
+ eof() { return static_cast<int_type>(-1); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
+ };
+} // namespace std
+
+// libstdc++/3983
+// Sentry uses locale info, so have to try one formatted input/output.
+void test03()
+{
+ using namespace std;
+ bool test = true;
+
+ // output streams
+ basic_ostringstream<unsigned char> oss_uc;
+
+ try
+ {
+ bool b = true;
+ oss_uc << b;
+ }
+ catch (bad_cast& obj)
+ { }
+ catch (exception& obj)
+ { test = false; }
+
+ VERIFY( test );
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_string<unsigned char>::size_type
+ std::basic_string<unsigned char>::_Rep::_S_max_size;
+
+template
+ unsigned char
+ std::basic_string<unsigned char>::_Rep::_S_terminal;
+#endif
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.2.4 basic_ostream seek members
+
+#include <ostream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+
+void test01()
+{
+ using namespace std;
+ typedef ios::pos_type pos_type;
+
+ bool test = true;
+ const char str_lit01[] = "ostream_seeks-1.txt";
+
+ // out
+ // test default ctors leave things in the same positions...
+ ostringstream ost1;
+ pos_type p1 = ost1.tellp();
+
+ ofstream ofs1;
+ pos_type p2 = ofs1.tellp();
+
+ VERIFY( p1 == p2 );
+
+ // out
+ // test ctors leave things in the same positions...
+ ostringstream ost2("bob_marley:kaya");
+ p1 = ost2.tellp();
+
+ ofstream ofs2(str_lit01);
+ p2 = ofs2.tellp();
+
+ VERIFY( p1 == p2 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
// 2000-03-23 bkoz
-// Copyright (C) 2000 Free Software Foundation
+// Copyright (C) 2000, 2003 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <ostream>
#include <testsuite_hooks.h>
-
void test01()
{
using namespace std;
ost << "ghost dog: way of the samurai";
pos1 = ost.tellp();
VERIFY( pos1 == pos_type(33) );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
}
int main()
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- typedef short type_t;
- template class basic_ostringstream<type_t, char_traits<type_t> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.7.3 - Class basic_ostringstream
+// NB: This file is for testing basic_ostringstream with NO OTHER INCLUDES.
+
+#include <sstream>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ typedef short type_t;
+ template class basic_ostringstream<type_t, char_traits<type_t> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_ostringstream<gnu_char_type, gnu_char_traits> gnu_osstr;
+
+ try
+ {
+ gnu_osstr obj;
+ }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <ostream>
+#include <sstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::ostringstream test_type;
+ typedef std::ostream base_type;
+ const test_type& obj = test_type();
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// 2001-05-23 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.3.2 member functions (ostringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// 03: sanity checks for strings, stringbufs
+void
+test03()
+{
+ bool test = false;
+
+ // Empty string sanity check.
+ std::string str01;
+ std::string::iterator __i_start = str01.begin();
+ std::string::iterator __i_end = str01.end();
+ std::string::size_type len = str01.size();
+ test = __i_start == __i_end;
+ VERIFY( len == 0 );
+
+ // Full string sanity check.
+ std::string str02("these golden days, i spend waiting for you:\n"
+ "Betty Carter on Verve with I'm Yours and You're Mine.");
+ __i_start = str02.begin();
+ __i_end = str02.end();
+ len = str02.size();
+ VERIFY( __i_start != __i_end );
+ VERIFY( len != 0 );
+
+ // Test an empty ostringstream for sanity.
+ std::ostringstream ostrstream0;
+ std::string str03 = ostrstream0.str();
+ __i_start = str03.begin();
+ __i_end = str03.end();
+ len = str03.size();
+ VERIFY( __i_start == __i_end );
+ VERIFY( len == 0 );
+ VERIFY( str01 == str03 );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
// 2001-05-23 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <sstream>
#include <testsuite_hooks.h>
-void test01()
-{
- bool test = true;
- std::ostringstream os01;
- const std::string str00;
- const std::string str01 = "123";
- std::string str02;
- const int i01 = 123;
- int a,b;
-
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
-
- // string str() const
- str02 = os01.str();
- VERIFY( str00 == str02 );
-
- // void str(const basic_string&)
- os01.str(str01);
- str02 = os01.str();
- VERIFY( str01 == str02 );
-
- #ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
void
redirect_buffer(std::ios& stream, std::streambuf* new_buf)
{ stream.rdbuf(new_buf); }
// These semantics are a joke, a serious defect, and incredibly lame.
}
-// 03: sanity checks for strings, stringbufs
-void
-test03()
-{
- bool test = false;
-
- // Empty string sanity check.
- std::string str01;
- std::string::iterator __i_start = str01.begin();
- std::string::iterator __i_end = str01.end();
- std::string::size_type len = str01.size();
- test = __i_start == __i_end;
- VERIFY( len == 0 );
-
- // Full string sanity check.
- std::string str02("these golden days, i spend waiting for you:\n"
- "Betty Carter on Verve with I'm Yours and You're Mine.");
- __i_start = str02.begin();
- __i_end = str02.end();
- len = str02.size();
- VERIFY( __i_start != __i_end );
- VERIFY( len != 0 );
-
- // Test an empty ostringstream for sanity.
- std::ostringstream ostrstream0;
- std::string str03 = ostrstream0.str();
- __i_start = str03.begin();
- __i_end = str03.end();
- len = str03.size();
- VERIFY( __i_start == __i_end );
- VERIFY( len == 0 );
- VERIFY( str01 == str03 );
-}
-
-// user-reported error
-class derived_oss: public std::ostringstream
-{
-public:
- derived_oss() : std::ostringstream() { }
-};
-
-void
-test04()
-{
- bool test = true;
- derived_oss yy;
- yy << "buena vista social club\n";
- VERIFY( yy.str() == std::string("buena vista social club\n") );
-}
-
int main()
{
- test01();
test02();
- test03();
- test04();
return 0;
}
--- /dev/null
+// 2001-05-23 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.3.2 member functions (ostringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test = true;
+ std::ostringstream os01;
+ const std::string str00;
+ const std::string str01 = "123";
+ std::string str02;
+ const int i01 = 123;
+ int a,b;
+
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+
+ // string str() const
+ str02 = os01.str();
+ VERIFY( str00 == str02 );
+
+ // void str(const basic_string&)
+ os01.str(str01);
+ str02 = os01.str();
+ VERIFY( str01 == str02 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 2001-05-23 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.3.2 member functions (ostringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// user-reported error
+class derived_oss: public std::ostringstream
+{
+public:
+ derived_oss() : std::ostringstream() { }
+};
+
+void
+test04()
+{
+ bool test = true;
+ derived_oss yy;
+ yy << "buena vista social club\n";
+ VERIFY( yy.str() == std::string("buena vista social club\n") );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
typedef test_type::pos_type pos_type;
typedef test_type::off_type off_type;
}
-
-namespace test
-{
- using namespace std;
- using __gnu_cxx_test::pod_char;
- typedef short type_t;
- template class basic_streambuf<type_t, char_traits<type_t> >;
- template class basic_streambuf<pod_char, char_traits<pod_char> >;
-} // test
-
-int main()
-{
- test01();
- return 0;
-}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 - Template class basic_streambuf
+// NB: This file is for testing basic_streambuf with NO OTHER INCLUDES.
+
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+ typedef short type_t;
+ template class basic_streambuf<type_t, char_traits<type_t> >;
+ template class basic_streambuf<pod_char, char_traits<pod_char> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+class gnu_sbuf: public std::basic_streambuf<gnu_char_type, gnu_char_traits>
+{ };
+
+void test07()
+{
+ bool test = true;
+
+ try
+ { gnu_sbuf obj; }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+class testbuf : public std::streambuf
+{
+public:
+
+ // Typedefs:
+ typedef std::streambuf::traits_type traits_type;
+ typedef std::streambuf::char_type char_type;
+
+ testbuf(): std::streambuf()
+ { _M_mode = (std::ios_base::in | std::ios_base::out); }
+
+ bool
+ check_pointers()
+ {
+ bool test = true;
+ VERIFY( this->eback() == NULL );
+ VERIFY( this->gptr() == NULL );
+ VERIFY( this->egptr() == NULL );
+ VERIFY( this->pbase() == NULL );
+ VERIFY( this->pptr() == NULL );
+ VERIFY( this->epptr() == NULL );
+ return test;
+ }
+
+ int_type
+ pub_uflow()
+ { return (this->uflow()); }
+
+ int_type
+ pub_overflow(int_type __c = traits_type::eof())
+ { return (this->overflow(__c)); }
+
+ int_type
+ pub_pbackfail(int_type __c)
+ { return (this->pbackfail(__c)); }
+
+ void
+ pub_setg(char* beg, char* cur, char *end)
+ { this->setg(beg, cur, end); }
+
+ void
+ pub_setp(char* beg, char* end)
+ { this->setp(beg, end); }
+
+protected:
+ int_type
+ underflow()
+ {
+ int_type __retval = traits_type::eof();
+ if (this->gptr() < this->egptr())
+ __retval = traits_type::not_eof(0);
+ return __retval;
+ }
+};
+
+void test01()
+{
+ typedef testbuf::traits_type traits_type;
+ typedef testbuf::int_type int_type;
+
+ bool test = true;
+ char* lit01 = "chicago underground trio/possible cube on delmark";
+ testbuf buf01;
+
+ // 27.5.2.1 basic_streambuf ctors
+ // default ctor initializes
+ // - all pointer members to null pointers
+ // - locale to current global locale
+ VERIFY( buf01.check_pointers() );
+ VERIFY( buf01.getloc() == std::locale() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+class testbuf : public std::streambuf
+{
+public:
+ typedef std::streambuf::traits_type traits_type;
+
+ testbuf() : std::streambuf() { }
+};
+
+// test the streambuf locale settings
+void test02()
+{
+ testbuf buf;
+ std::locale loc_c = std::locale::classic();
+ loc_c = buf.getloc();
+ buf.pubimbue(loc_c); //This should initialize _M_init to true
+ std::locale loc_tmp = buf.getloc();
+ VERIFY( loc_tmp == loc_c );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <cstring> // for memset, memcmp
+#include <streambuf>
+#include <sstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+class testbuf : public std::streambuf
+{
+public:
+ typedef std::streambuf::traits_type traits_type;
+
+ testbuf() : std::streambuf() { }
+};
+
+// libstdc++/9322
+void test08()
+{
+ using std::locale;
+ bool test = true;
+
+ locale loc;
+ testbuf ob;
+ VERIFY( ob.getloc() == loc );
+
+ locale::global(locale("en_US"));
+ VERIFY( ob.getloc() == loc );
+
+ locale loc_de ("de_DE");
+ locale ret = ob.pubimbue(loc_de);
+ VERIFY( ob.getloc() == loc_de );
+ VERIFY( ret == loc );
+
+ locale::global(loc);
+ VERIFY( ob.getloc() == loc_de );
+}
+
+int main()
+{
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test08);
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+class testbuf : public std::streambuf
+{
+public:
+
+ // Typedefs:
+ typedef std::streambuf::traits_type traits_type;
+ typedef std::streambuf::char_type char_type;
+
+ testbuf(): std::streambuf()
+ { _M_mode = (std::ios_base::in | std::ios_base::out); }
+
+ bool
+ check_pointers()
+ {
+ bool test = true;
+ VERIFY( this->eback() == NULL );
+ VERIFY( this->gptr() == NULL );
+ VERIFY( this->egptr() == NULL );
+ VERIFY( this->pbase() == NULL );
+ VERIFY( this->pptr() == NULL );
+ VERIFY( this->epptr() == NULL );
+ return test;
+ }
+
+ int_type
+ pub_uflow()
+ { return (this->uflow()); }
+
+ int_type
+ pub_overflow(int_type __c = traits_type::eof())
+ { return (this->overflow(__c)); }
+
+ int_type
+ pub_pbackfail(int_type __c)
+ { return (this->pbackfail(__c)); }
+
+ void
+ pub_setg(char* beg, char* cur, char *end)
+ { this->setg(beg, cur, end); }
+
+ void
+ pub_setp(char* beg, char* end)
+ { this->setp(beg, end); }
+
+protected:
+ int_type
+ underflow()
+ {
+ int_type __retval = traits_type::eof();
+ if (this->gptr() < this->egptr())
+ __retval = traits_type::not_eof(0);
+ return __retval;
+ }
+};
+
+void test01()
+{
+ typedef testbuf::traits_type traits_type;
+ typedef testbuf::int_type int_type;
+
+ bool test = true;
+ char* lit01 = "chicago underground trio/possible cube on delmark";
+ testbuf buf01;
+
+ // pbackfail
+ int i01 = 3;
+ buf01.pub_setg(lit01, lit01, (lit01 + i01));
+ VERIFY( i01 == buf01.in_avail() );
+ int_type intt01 = traits_type::to_int_type('b');
+ VERIFY( traits_type::eof() == buf01.pub_pbackfail(intt01) );
+
+ // overflow
+ VERIFY( traits_type::eof() == buf01.pub_overflow(intt01) );
+ VERIFY( traits_type::eof() == buf01.pub_overflow() );
+ VERIFY( buf01.sgetc() == traits_type::to_int_type(lit01[0]) );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// test03
+// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00151.html
+template<typename charT, typename traits = std::char_traits<charT> >
+ class basic_nullbuf : public std::basic_streambuf<charT, traits>
+ {
+ protected:
+ typedef typename
+ std::basic_streambuf<charT, traits>::int_type int_type;
+ virtual int_type
+ overflow(int_type c)
+ { return traits::not_eof(c); }
+ };
+
+typedef basic_nullbuf<char> nullbuf;
+
+template<typename T>
+ char
+ print(const T& x)
+ {
+ nullbuf ob;
+ std::ostream out(&ob);
+ out << x << std::endl;
+ return (!out ? '0' : '1');
+ }
+
+void test03()
+{
+ bool test = true;
+ const std::string control01("11111");
+ std::string test01;
+
+ test01 += print(true);
+ test01 += print(3.14159);
+ test01 += print(10);
+ test01 += print('x');
+ test01 += print("pipo");
+
+ VERIFY( test01 == control01 );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/3599
+class testbuf : public std::streambuf
+{
+public:
+ typedef std::streambuf::traits_type traits_type;
+
+ testbuf() : std::streambuf() { }
+
+protected:
+ int_type
+ overflow(int_type c = traits_type::eof())
+ { return traits_type::not_eof(0); }
+};
+
+void
+test07()
+{
+ bool test = true;
+ testbuf ob;
+ std::ostream out(&ob);
+
+ out << "gasp";
+ VERIFY(out.good());
+
+ out << std::endl;
+ VERIFY(out.good());
+}
+
+int main()
+{
+ test07();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+class testbuf : public std::streambuf
+{
+public:
+
+ // Typedefs:
+ typedef std::streambuf::traits_type traits_type;
+ typedef std::streambuf::char_type char_type;
+
+ testbuf(): std::streambuf()
+ { _M_mode = (std::ios_base::in | std::ios_base::out); }
+
+ bool
+ check_pointers()
+ {
+ bool test = true;
+ VERIFY( this->eback() == NULL );
+ VERIFY( this->gptr() == NULL );
+ VERIFY( this->egptr() == NULL );
+ VERIFY( this->pbase() == NULL );
+ VERIFY( this->pptr() == NULL );
+ VERIFY( this->epptr() == NULL );
+ return test;
+ }
+
+ int_type
+ pub_uflow()
+ { return (this->uflow()); }
+
+ int_type
+ pub_overflow(int_type __c = traits_type::eof())
+ { return (this->overflow(__c)); }
+
+ int_type
+ pub_pbackfail(int_type __c)
+ { return (this->pbackfail(__c)); }
+
+ void
+ pub_setg(char* beg, char* cur, char *end)
+ { this->setg(beg, cur, end); }
+
+ void
+ pub_setp(char* beg, char* end)
+ { this->setp(beg, end); }
+
+protected:
+ int_type
+ underflow()
+ {
+ int_type __retval = traits_type::eof();
+ if (this->gptr() < this->egptr())
+ __retval = traits_type::not_eof(0);
+ return __retval;
+ }
+};
+
+void test01()
+{
+ typedef testbuf::traits_type traits_type;
+ typedef testbuf::int_type int_type;
+
+ bool test = true;
+ char* lit01 = "chicago underground trio/possible cube on delmark";
+ testbuf buf01;
+
+ // 27.5.2.3.1 get area
+ // 27.5.2.2.3 get area
+ // 27.5.2.4.3 get area
+ int i01 = 3;
+ buf01.pub_setg(lit01, lit01, (lit01 + i01));
+ VERIFY( i01 == buf01.in_avail() );
+
+ VERIFY( buf01.pub_uflow() == lit01[0] );
+ VERIFY( buf01.sgetc() == traits_type::to_int_type(lit01[1]) );
+ VERIFY( buf01.pub_uflow() == lit01[1] );
+ VERIFY( buf01.sgetc() == traits_type::to_int_type(lit01[2]) );
+ VERIFY( buf01.pub_uflow() == lit01[2] );
+ VERIFY( buf01.sgetc() == traits_type::eof() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+class testbuf : public std::streambuf
+{
+public:
+
+ // Typedefs:
+ typedef std::streambuf::traits_type traits_type;
+ typedef std::streambuf::char_type char_type;
+
+ testbuf(): std::streambuf()
+ { _M_mode = (std::ios_base::in | std::ios_base::out); }
+
+ bool
+ check_pointers()
+ {
+ bool test = true;
+ VERIFY( this->eback() == NULL );
+ VERIFY( this->gptr() == NULL );
+ VERIFY( this->egptr() == NULL );
+ VERIFY( this->pbase() == NULL );
+ VERIFY( this->pptr() == NULL );
+ VERIFY( this->epptr() == NULL );
+ return test;
+ }
+
+ int_type
+ pub_uflow()
+ { return (this->uflow()); }
+
+ int_type
+ pub_overflow(int_type __c = traits_type::eof())
+ { return (this->overflow(__c)); }
+
+ int_type
+ pub_pbackfail(int_type __c)
+ { return (this->pbackfail(__c)); }
+
+ void
+ pub_setg(char* beg, char* cur, char *end)
+ { this->setg(beg, cur, end); }
+
+ void
+ pub_setp(char* beg, char* end)
+ { this->setp(beg, end); }
+
+protected:
+ int_type
+ underflow()
+ {
+ int_type __retval = traits_type::eof();
+ if (this->gptr() < this->egptr())
+ __retval = traits_type::not_eof(0);
+ return __retval;
+ }
+};
+
+void test02()
+{
+ typedef testbuf::traits_type traits_type;
+ typedef testbuf::int_type int_type;
+
+ bool test = true;
+ char* lit01 = "chicago underground trio/possible cube on delmark";
+ testbuf buf01;
+
+ // 27.5.2.1 basic_streambuf ctors
+ // default ctor initializes
+ // - all pointer members to null pointers
+ // - locale to current global locale
+ VERIFY( buf01.check_pointers() );
+ VERIFY( buf01.getloc() == std::locale() );
+
+ // 27.5.2.2.5 Put area
+ size_t i01 = traits_type::length(lit01);
+ char carray01[i01];
+ std::memset(carray01, 0, i01);
+
+ buf01.pub_setg(lit01, lit01, lit01 + i01);
+ buf01.sgetn(carray01, 0);
+ VERIFY( carray01[0] == 0 );
+ buf01.sgetn(carray01, 1);
+ VERIFY( carray01[0] == 'c' );
+ buf01.sgetn(carray01 + 1, i01 - 1);
+ VERIFY( carray01[0] == 'c' );
+ VERIFY( carray01[1] == 'h' );
+ VERIFY( carray01[i01 - 1] == 'k' );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <streambuf>
+#include <locale>
+#include <testsuite_hooks.h>
+
+class MyTraits : public std::char_traits<char>
+{
+public:
+ static bool eq(char c1, char c2)
+ {
+ bool test = true;
+ VERIFY( c1 != 'X' );
+ VERIFY( c2 != 'X' );
+ return std::char_traits<char>::eq(c1, c2);
+ }
+};
+
+class MyBuf : public std::basic_streambuf<char, MyTraits>
+{
+ char buffer[8];
+
+public:
+ MyBuf()
+ {
+ std::memset(buffer, 'X', sizeof(buffer));
+ std::memset(buffer + 2, 'f', 4);
+ setg(buffer + 2, buffer + 2, buffer + 6);
+ }
+};
+
+// libstdc++/9538
+void test08()
+{
+ bool test = true;
+
+ MyBuf mb;
+ mb.sputbackc('a');
+}
+
+main()
+{
+ test08();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <string>
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+class nullsetpbuf : public std::streambuf
+{
+ char foo[64];
+public:
+ nullsetpbuf()
+ {
+ setp(foo, foo + 64);
+ setp(NULL, NULL);
+ }
+};
+
+// libstdc++/1057
+void test05()
+{
+ std::string text1 = "abcdefghijklmn";
+
+ nullsetpbuf nsp;
+ // Immediate crash as sputc writes to null pointer
+ nsp.sputc('a');
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+class testbuf : public std::streambuf
+{
+public:
+
+ // Typedefs:
+ typedef std::streambuf::traits_type traits_type;
+ typedef std::streambuf::char_type char_type;
+
+ testbuf(): std::streambuf()
+ { _M_mode = (std::ios_base::in | std::ios_base::out); }
+
+ bool
+ check_pointers()
+ {
+ bool test = true;
+ VERIFY( this->eback() == NULL );
+ VERIFY( this->gptr() == NULL );
+ VERIFY( this->egptr() == NULL );
+ VERIFY( this->pbase() == NULL );
+ VERIFY( this->pptr() == NULL );
+ VERIFY( this->epptr() == NULL );
+ return test;
+ }
+
+ int_type
+ pub_uflow()
+ { return (this->uflow()); }
+
+ int_type
+ pub_overflow(int_type __c = traits_type::eof())
+ { return (this->overflow(__c)); }
+
+ int_type
+ pub_pbackfail(int_type __c)
+ { return (this->pbackfail(__c)); }
+
+ void
+ pub_setg(char* beg, char* cur, char *end)
+ { this->setg(beg, cur, end); }
+
+ void
+ pub_setp(char* beg, char* end)
+ { this->setp(beg, end); }
+
+protected:
+ int_type
+ underflow()
+ {
+ int_type __retval = traits_type::eof();
+ if (this->gptr() < this->egptr())
+ __retval = traits_type::not_eof(0);
+ return __retval;
+ }
+};
+
+void test01()
+{
+ typedef testbuf::traits_type traits_type;
+ typedef testbuf::int_type int_type;
+
+ bool test = true;
+ char* lit01 = "chicago underground trio/possible cube on delmark";
+ testbuf buf01;
+ int i01 = 3;
+
+ // sputn/xsputn
+ char* lit02 = "isotope 217: the unstable molecule on thrill jockey";
+ int i02 = std::strlen(lit02);
+ char carray[i02 + 1];
+ std::memset(carray, 0, i02 + 1);
+
+ buf01.pub_setp(carray, (carray + i02));
+ buf01.sputn(lit02, 0);
+ VERIFY( carray[0] == 0 );
+ VERIFY( lit02[0] == 'i' );
+ buf01.sputn(lit02, 1);
+ VERIFY( lit02[0] == carray[0] );
+ VERIFY( lit02[1] == 's' );
+ VERIFY( carray[1] == 0 );
+ buf01.sputn(lit02 + 1, 10);
+ VERIFY( std::memcmp(lit02, carray, 10) == 0 );
+ buf01.sputn(lit02 + 11, 20);
+ VERIFY( std::memcmp(lit02, carray, 30) == 0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+class nullsetpbuf : public std::streambuf
+{
+ char foo[64];
+public:
+ nullsetpbuf()
+ {
+ setp(foo, foo + 64);
+ setp(NULL, NULL);
+ }
+};
+
+// libstdc++/1057
+void test05()
+{
+ std::string text1 = "abcdefghijklmn";
+
+ nullsetpbuf nsp;
+ // Immediate crash as xsputn writes to null pointer
+ nsp.sputn(text1.c_str(), text1.length());
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <streambuf>
+#include <testsuite_hooks.h>
+
+class setpbuf : public std::streambuf
+{
+ char buffer[4];
+ std::string result;
+
+public:
+
+ std::string&
+ get_result()
+ { return result; }
+
+ setpbuf()
+ {
+ char foo [32];
+ setp(foo, foo + 32);
+ setp(buffer, buffer + 4);
+ }
+
+ ~setpbuf()
+ { sync(); }
+
+ virtual int_type
+ overflow(int_type n)
+ {
+ if (sync() != 0)
+ return traits_type::eof();
+
+ result += traits_type::to_char_type(n);
+
+ return n;
+ }
+
+ virtual int
+ sync()
+ {
+ result.append(pbase(), pptr());
+ setp(buffer, buffer + 4);
+ return 0;
+ }
+};
+
+// libstdc++/1057
+void test04()
+{
+ bool test = true;
+ std::string text = "abcdefghijklmn";
+
+ // 01
+ setpbuf sp1;
+ // Here xsputn writes over sp1.result
+ sp1.sputn(text.c_str(), text.length());
+
+ // This crashes when result is accessed
+ sp1.pubsync();
+ VERIFY( sp1.get_result() == text );
+
+ // 02
+ setpbuf sp2;
+ for (std::string::size_type i = 0; i < text.length(); ++i)
+ {
+ // sputc also writes over result
+ sp2.sputc(text[i]);
+ }
+
+ // Crash here
+ sp2.pubsync();
+ VERIFY( sp2.get_result() == text );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1 - Template class basic_stringbuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// test05
+// libstdc++/1886
+// should be able to instantiate basic_stringbuf for non-standard types.
+namespace test
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+ typedef short type_t;
+ template class basic_stringbuf<type_t, char_traits<type_t> >;
+ template class basic_stringbuf<pod_char, char_traits<pod_char> >;
+} // test
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1 - Template class basic_stringbuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_stringbuf<gnu_char_type, gnu_char_traits> gnu_ssbuf;
+
+ try
+ { gnu_ssbuf obj; }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-04-07 bkoz
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1 - Template class basic_stringbuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+ typedef __gnu_cxx_test::tracker_alloc<char> alloc_type;
+ template class basic_stringbuf<char, char_traits<char>, alloc_type>;
+} // test
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1 - Template class basic_stringbuf
+
+#include <sstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::stringbuf test_type;
+ typedef std::streambuf base_type;
+ const test_type& obj = test_type();
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::stringbuf strb_01(str_01);
+
+// test the streambuf/stringbuf locale settings
+void test02()
+{
+ std::locale loc_c = std::locale::classic();
+ loc_c = strb_01.getloc();
+ strb_01.pubimbue(loc_c); //This should initialize _M_init to true
+ std::locale loc_tmp = strb_01.getloc();
+ VERIFY( loc_tmp == loc_c );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1.3 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9322
+void test03()
+{
+ using std::locale;
+ bool test = true;
+
+ locale loc = std::locale::classic();
+ std::stringbuf ob;
+ VERIFY( ob.getloc() == loc );
+
+ locale::global(locale("en_US"));
+ VERIFY( ob.getloc() == loc );
+
+ locale loc_de ("de_DE");
+ locale ret = ob.pubimbue(loc_de);
+ VERIFY( ob.getloc() == loc_de );
+ VERIFY( ret == loc );
+
+ locale::global(loc);
+ VERIFY( ob.getloc() == loc_de );
+}
+
+int main()
+{
+ using namespace std;
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ // GET
+ // int in_avail()
+ strmof_1 = strb_01.in_avail();
+ strmof_2 = strb_02.in_avail();
+ VERIFY( strmof_1 != strmof_2 );
+ VERIFY( strmof_1 == str_01.length() );
+ VERIFY( strmof_2 == str_02.length() );
+ strmof_1 = strb_03.in_avail();
+ // zero cuz write-only, or eof()? zero, from showmany
+ VERIFY( strmof_1 == 0 );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <sstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// test03
+// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00151.html
+template<typename charT, typename traits = std::char_traits<charT> >
+ class basic_nullbuf : public std::basic_stringbuf<charT, traits>
+ {
+ protected:
+ typedef typename
+ std::basic_stringbuf<charT, traits>::int_type int_type;
+ virtual int_type
+ overflow(int_type c)
+ { return traits::not_eof(c); }
+ };
+
+typedef basic_nullbuf<char> nullbuf;
+
+template<typename T>
+ char
+ print(const T& x)
+ {
+ nullbuf ob;
+ std::ostream out(&ob);
+ out << x << std::endl;
+ return (!out ? '0' : '1');
+ }
+
+void test03()
+{
+ bool test = true;
+ const std::string control01("11111");
+ std::string test01;
+
+ test01 += print(true);
+ test01 += print(3.14159);
+ test01 += print(10);
+ test01 += print('x');
+ test01 += print("pipo");
+
+ VERIFY( test01 == control01 );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <sstream>
+#include <ostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/3599
+class testbuf : public std::stringbuf
+{
+public:
+ typedef std::stringbuf::traits_type traits_type;
+
+ testbuf() : std::stringbuf() { }
+
+protected:
+ int_type
+ overflow(int_type c = traits_type::eof())
+ { return traits_type::not_eof(0); }
+};
+
+void
+test07()
+{
+ bool test = true;
+ testbuf ob;
+ std::ostream out(&ob);
+
+ out << "gasp";
+ VERIFY(out.good());
+
+ out << std::endl;
+ VERIFY(out.good());
+}
+
+int main()
+{
+ test07();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+class OverBuf : public std::stringbuf
+{
+public:
+ int_type pub_overflow(int_type c = traits_type::eof())
+ { return std::stringbuf::overflow(c); }
+};
+
+// libstdc++/9988
+// filebuf::overflow writes EOF to file
+void test15()
+{
+ using namespace std;
+ bool test = true;
+
+ OverBuf sb;
+
+ sb.sputc('a');
+ sb.pub_overflow('b');
+ sb.pub_overflow();
+ sb.sputc('c');
+
+ stringbuf sbin(sb.str(), ios_base::in);
+ stringbuf::int_type c;
+ c = sbin.sbumpc();
+ VERIFY( c == 'a' );
+ c = sbin.sbumpc();
+ VERIFY( c == 'b' );
+ c = sbin.sbumpc();
+ VERIFY( c == 'c' );
+ c = sbin.sbumpc();
+ VERIFY( c == stringbuf::traits_type::eof() );
+}
+
+main()
+{
+ test15();
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ // GET
+ strmof_1 = strb_01.in_avail();
+ strmof_2 = strb_02.in_avail();
+ strmof_1 = strb_03.in_avail();
+
+ // int_type sbumpc()
+ // if read_cur not avail, return uflow(), else return *read_cur & increment
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ VERIFY( c1 != c2 );
+ VERIFY( c1 == str_01[0] );
+ VERIFY( c2 == str_02[0] ); //should equal first letter at this point
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ VERIFY( c1 != c2 );
+ VERIFY( c1 != c3 );
+ VERIFY( c2 != c4 );
+ int_type c5 = strb_03.sbumpc();
+ VERIFY( c5 == traits_type::eof() );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9825
+// filebuf::sputbackc breaks sbumpc
+void test12()
+{
+ using namespace std;
+ bool test = true;
+
+ stringbuf sbuf;
+ sbuf.sputn("crazy bees!", 11);
+ sbuf.pubseekoff(0, ios_base::beg);
+ sbuf.sbumpc();
+ sbuf.sputbackc('x');
+ stringbuf::int_type c = sbuf.sbumpc();
+ VERIFY( c == 'x' );
+ c = sbuf.sbumpc();
+ VERIFY( c == 'r' );
+ c = sbuf.sbumpc();
+ VERIFY( c == 'a' );
+}
+
+main()
+{
+ test12();
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // PUT
+ strb_03.str(str_01); //reset
+
+ // BUFFER MANAGEMENT & POSITIONING
+
+ // seekoff
+ // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
+ // alters the stream position to off
+ pos_type pt_1(off_type(-1));
+ pos_type pt_2(off_type(0));
+ off_type off_1 = 0;
+ off_type off_2 = 0;
+ strb_01.str(str_01); //in|out ("mykonos. . . or what?");
+ strb_02.str(str_02); //in ("paris, or sainte-maxime?");
+ strb_03.str(str_03); //out ("")
+ //IN|OUT
+ //beg
+ pt_1 = strb_01.pubseekoff(2, std::ios_base::beg);
+ off_1 = pt_1;
+ VERIFY( off_1 >= 0 );
+ c1 = strb_01.snextc(); //current in pointer +1
+ VERIFY( c1 == 'o' );
+ c2 = strb_01.sputc('x'); //test current out pointer
+ str_tmp = std::string("myxonos. . . or what?");
+ VERIFY( strb_01.str() == str_tmp );
+ //cur
+ pt_1 = strb_01.pubseekoff(2, std::ios_base::cur);
+ off_1 = pt_1;
+ VERIFY( off_1 == -1 ); // can't seekoff for in and out + cur in sstreams
+ pt_1 = strb_01.pubseekoff(2, std::ios_base::cur, std::ios_base::in);
+ off_1 = pt_1;
+ pt_2 = strb_01.pubseekoff(2, std::ios_base::cur, std::ios_base::in);
+ off_2 = pt_2;
+ VERIFY( off_2 == off_1 + 2 );
+ c1 = strb_01.snextc(); //current in pointer + 1
+ VERIFY( c1 == ' ' );
+ c2 = strb_01.sputc('x'); //test current out pointer
+ str_tmp = std::string("myxxnos. . . or what?");
+ VERIFY( strb_01.str() == str_tmp );
+ //end
+ pt_2 = strb_01.pubseekoff(2, std::ios_base::end);
+ off_1 = pt_2;
+ VERIFY( off_1 == -1 ); // not a valid position
+ VERIFY( strb_01.str() == str_tmp );
+ // end part two (from the filebuf tests)
+ strb_01.pubseekoff(0, std::ios_base::end);
+ strmsz_1 = strb_01.in_avail(); // 0 cuz at the end
+ c1 = strb_01.sgetc();
+ c2 = strb_01.sungetc();
+ strmsz_2 = strb_01.in_avail(); // 1
+ c3 = strb_01.sgetc();
+ VERIFY( c1 != c2 );
+ VERIFY( strmsz_2 != strmsz_1 );
+ VERIFY( strmsz_2 == 1 );
+ // end part three
+ strmsz_1 = strb_01.str().size();
+ strmsz_2 = strb_01.sputn(" ravi shankar meets carlos santana in LoHa", 90);
+ strb_01.pubseekoff(0, std::ios_base::end);
+ strb_01.sputc('<');
+ str_tmp = strb_01.str();
+ VERIFY( str_tmp.size() == strmsz_1 + strmsz_2 + 1 );
+ // IN
+ // OUT
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1.3 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test02(std::stringbuf& in, bool pass)
+{
+ bool test = true;
+ using namespace std;
+ typedef streambuf::pos_type pos_type;
+ typedef streambuf::off_type off_type;
+ pos_type bad = pos_type(off_type(-1));
+ pos_type p = 0;
+
+ // seekoff
+ p = in.pubseekoff(0, ios_base::beg, ios_base::in);
+ if (pass)
+ VERIFY( p != bad );
+
+ p = in.pubseekoff(0, ios_base::beg, ios_base::out);
+ VERIFY( p == bad );
+
+ p = in.pubseekoff(0, ios_base::beg);
+ VERIFY( p == bad );
+}
+
+int main()
+{
+ using namespace std;
+
+ // movie star, submarine scientist!
+ stringbuf in1("Hedy Lamarr", ios_base::in);
+ stringbuf in2(ios_base::in);
+ stringbuf in3("", ios_base::in);
+ test02(in1, true);
+ test02(in2, false);
+ test02(in3, false);
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ pos_type pt_1(off_type(-1));
+ pos_type pt_2(off_type(0));
+ off_type off_1 = 0;
+ off_type off_2 = 0;
+
+ // PUT
+ strb_03.str(str_01); //reset
+
+ // BUFFER MANAGEMENT & POSITIONING
+
+ // seekpos
+ // pubseekpos(pos_type sp, ios_base::openmode)
+ // alters the stream position to sp
+ strb_01.str(str_01); //in|out ("mykonos. . . or what?");
+ strb_02.str(str_02); //in ("paris, or sainte-maxime?");
+ strb_03.str(str_03); //out ("")
+ //IN|OUT
+ //beg
+ pt_1 = strb_01.pubseekoff(2, std::ios_base::beg);
+ off_1 = pt_1;
+ VERIFY( off_1 >= 0 );
+ pt_1 = strb_01.pubseekoff(0, std::ios_base::cur, std::ios_base::out);
+ off_1 = pt_1;
+ c1 = strb_01.snextc(); //current in pointer +1
+ VERIFY( c1 == 'o' );
+ c2 = strb_01.sputc('x'); //test current out pointer
+ str_tmp = std::string("myxonos. . . or what?");
+ VERIFY( strb_01.str() == str_tmp );
+ strb_01.pubsync(); //resets pointers
+ pt_2 = strb_01.pubseekpos(pt_1, std::ios_base::in|std::ios_base::out);
+ off_2 = pt_2;
+ VERIFY( off_1 == off_2 );
+ c3 = strb_01.snextc(); //current in pointer +1
+ VERIFY( c1 == c3 );
+ c2 = strb_01.sputc('x'); //test current out pointer
+ str_tmp = std::string("myxonos. . . or what?");
+ VERIFY( strb_01.str() == str_tmp );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1.3 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test02(std::stringbuf& in, bool pass)
+{
+ bool test = true;
+ using namespace std;
+ typedef streambuf::pos_type pos_type;
+ typedef streambuf::off_type off_type;
+ pos_type bad = pos_type(off_type(-1));
+ pos_type p = 0;
+
+ // seekpos
+ p = in.pubseekpos(0, ios_base::in);
+ if (pass)
+ VERIFY( p != bad );
+
+ p = in.pubseekpos(0, ios_base::out);
+ VERIFY( p == bad );
+
+ p = in.pubseekpos(0);
+ if (pass)
+ VERIFY( p != bad );
+}
+
+int main()
+{
+ using namespace std;
+
+ // movie star, submarine scientist!
+ stringbuf in1("Hedy Lamarr", ios_base::in);
+ stringbuf in2(ios_base::in);
+ stringbuf in3("", ios_base::in);
+ test02(in1, true);
+ test02(in2, false);
+ test02(in3, false);
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // PUT
+ strb_03.str(str_01); //reset
+
+ // BUFFER MANAGEMENT & POSITIONING
+ // setbuf
+ // pubsetbuf(char_type* s, streamsize n)
+ str_tmp = std::string("naaaah, go to cebu");
+ strb_01.pubsetbuf(const_cast<char*> (str_tmp.c_str()), str_tmp.size());
+ VERIFY( strb_01.str() == str_tmp );
+ strb_01.pubsetbuf(0,0);
+ VERIFY( strb_01.str() == str_tmp );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ using namespace std;
+
+ bool test = true;
+ char buf[512];
+ const char* strlit = "how to tell a story and other essays: mark twain";
+ const size_t strlitsize = std::strlen(strlit);
+ stringbuf sbuf;
+
+ sbuf.pubsetbuf(buf, 512);
+ sbuf.sputn(strlit, strlitsize);
+ VERIFY( std::strncmp(strlit, buf, strlitsize) == 0 );
+}
+
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test02()
+{
+ using namespace std;
+
+ bool test = true;
+ char buf[512];
+ const char* strlit = "how to tell a story and other essays: mark twain";
+ const size_t strlitsize = std::strlen(strlit);
+ string s("tmp");
+ stringbuf sbuf(s, ios_base::out);
+ sbuf.pubsetbuf(buf, strlitsize);
+ sbuf.sputn(strlit, strlitsize);
+ VERIFY( std::strncmp(strlit, buf, strlitsize) == 0 );
+}
+
+main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ // GET
+ strmof_1 = strb_01.in_avail();
+ strmof_2 = strb_02.in_avail();
+ strmof_1 = strb_03.in_avail();
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // int_type sgetc()
+ // if read_cur not avail, return uflow(), else return *read_cur
+ int_type c6 = strb_01.sgetc();
+ int_type c7 = strb_02.sgetc();
+ VERIFY( c6 != c3 );
+ VERIFY( c7 != c4 );
+ int_type c8 = strb_01.sgetc();
+ int_type c9 = strb_02.sgetc();
+ VERIFY( c6 == c8 );
+ VERIFY( c7 == c9 );
+ c5 = strb_03.sgetc();
+ VERIFY( c5 == traits_type::eof() );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ // GET
+ strmof_1 = strb_01.in_avail();
+ strmof_2 = strb_02.in_avail();
+ strmof_1 = strb_03.in_avail();
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // int_type sgetc()
+ // if read_cur not avail, return uflow(), else return *read_cur
+ int_type c6 = strb_01.sgetc();
+ int_type c7 = strb_02.sgetc();
+ int_type c8 = strb_01.sgetc();
+ int_type c9 = strb_02.sgetc();
+ c5 = strb_03.sgetc();
+
+ // int_type snextc()
+ // calls sbumpc and if sbumpc != eof, return sgetc
+ c6 = strb_01.snextc();
+ c7 = strb_02.snextc();
+ c5 = strb_03.snextc();
+
+ // streamsize sgetn(char_type *s, streamsize n)
+ // streamsize xsgetn(char_type *s, streamsize n)
+ // assign up to n chars to s from input sequence, indexing in_cur as
+ // approp and returning the number of chars assigned
+ strmsz_1 = strb_01.in_avail();
+ strmsz_2 = strb_02.in_avail();
+ test = strmsz_1 != strmsz_2;
+ VERIFY( strmsz_1 != str_01.length() );
+ VERIFY( strmsz_2 != str_02.length() ); //because now we've moved into string
+ char carray1[11] = "";
+ strmsz_1 = strb_01.sgetn(carray1, 10);
+ char carray2[20] = "";
+ strmsz_2 = strb_02.sgetn(carray2, 10);
+ VERIFY( strmsz_1 == strmsz_2 );
+ VERIFY( strmsz_1 == 10 );
+ c1 = strb_01.sgetc();
+ c2 = strb_02.sgetc();
+ VERIFY( c6 == c1 ); //just by co-incidence both o's
+ VERIFY( c7 != c2 ); // n != i
+ VERIFY( c1 == str_01[13] );
+ VERIFY( c2 == str_02[13] ); //should equal fourteenth letter at this point
+ strmsz_1 = strb_03.sgetn(carray1, 10);
+ VERIFY( !strmsz_1 ); //zero
+ strmsz_1 = strb_02.in_avail();
+ strmsz_2 = strb_02.sgetn(carray2, strmsz_1 + 5);
+ VERIFY( strmsz_1 == strmsz_2 ); //write off the end
+ c4 = strb_02.sgetc(); // should be EOF
+ VERIFY( c4 == traits_type::eof() );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ // GET
+ strmof_1 = strb_01.in_avail();
+ strmof_2 = strb_02.in_avail();
+ strmof_1 = strb_03.in_avail();
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // int_type sgetc()
+ // if read_cur not avail, return uflow(), else return *read_cur
+ int_type c6 = strb_01.sgetc();
+ int_type c7 = strb_02.sgetc();
+ int_type c8 = strb_01.sgetc();
+ int_type c9 = strb_02.sgetc();
+ c5 = strb_03.sgetc();
+
+ // int_type snextc()
+ // calls sbumpc and if sbumpc != eof, return sgetc
+ c6 = strb_01.snextc();
+ c7 = strb_02.snextc();
+ VERIFY( c6 != c8 );
+ VERIFY( c7 != c9 );
+ VERIFY( c6 == str_01[3] );
+ VERIFY( c7 == str_02[3] ); //should equal fourth letter at this point
+ c5 = strb_03.snextc();
+ VERIFY( c5 == traits_type::eof() );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp, str_tmp2;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // PUT
+ strb_03.str(str_01); //reset
+ std::string::size_type sz1 = strb_03.str().length();
+ std::string::size_type sz2 = strb_03.str().length();
+
+ // streamsize sputn(const char_typs* s, streamsize n)
+ // write up to n chars to out_cur from s, returning number assigned
+ // NB *sputn will happily put '\0' into your stream if you give it a chance*
+ str_tmp = strb_03.str();
+ sz1 = str_tmp.length();
+ strmsz_1 = strb_03.sputn("racadabras", 10);//"abracadabras or what?"
+ sz2 = strb_03.str().length();
+ strmsz_2 = strb_03.sputn(", i wanna reach out and", 10);
+ sz2 = strb_03.str().length();
+ str_tmp = strb_02.str();
+ strmsz_1 = strb_02.sputn("racadabra", 10);
+
+ // PUTBACK
+
+ // int_type sputbackc(char_type c)
+ // if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
+ // otherwise decrements in_cur and returns *gptr()
+ strmsz_1 = strb_01.in_avail();
+ str_tmp = strb_01.str();
+ c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
+ c2 = strb_01.sputbackc('z');//"mykonos. . .zor what?"
+ c3 = strb_01.sgetc();
+ str_tmp2 = strb_01.str();
+ VERIFY( c1 != c2 );
+ VERIFY( c3 == c2 );
+ VERIFY( str_tmp2 == std::string("mzkonos. . . or what?") );
+ VERIFY( str_tmp.size() == str_tmp2.size() );
+ //test for _in_cur == _in_beg
+ strb_01.str(str_tmp);
+ strmsz_1 = strb_01.in_avail();
+ c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
+ c2 = strb_01.sputbackc('z');//"mykonos. . . or what?"
+ c3 = strb_01.sgetc();
+ VERIFY( c1 != c2 );
+ VERIFY( c3 != c2 );
+ VERIFY( c1 == c3 );
+ VERIFY( c2 == traits_type::eof() );
+ VERIFY( strb_01.str() == str_tmp );
+ VERIFY( str_tmp.size() == strb_01.str().size() );
+ // test for replacing char with identical one
+ strb_01.str(str_01); //reset
+ strmsz_1 = strb_01.in_avail();
+ strb_01.sbumpc();
+ strb_01.sbumpc();
+ c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
+ c2 = strb_01.sputbackc('y');//"mykonos. . . or what?"
+ c3 = strb_01.sgetc();
+ VERIFY( c1 != c2 );
+ VERIFY( c3 == c2 );
+ VERIFY( c1 != c3 );
+ VERIFY( strb_01.str() == str_01 );
+ VERIFY( str_01.size() == strb_01.str().size() );
+ //test for ios_base::out
+ strmsz_2 = strb_03.in_avail();
+ c4 = strb_03.sputbackc('x');
+ VERIFY( c4 == traits_type::eof() );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.4 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/9439, libstdc++/9425
+// basic_filebuf<>::pbackfail calls basic_filebuf<>::seekoff, but
+// fails to check the return value
+void test09()
+{
+ using namespace std;
+ bool test = true;
+
+ stringbuf sbuf;
+ stringbuf::int_type r = sbuf.sputbackc('a');
+ VERIFY( r == stringbuf::traits_type::eof() );
+}
+
+main()
+{
+ test09();
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // PUT
+ // int_type sputc(char_type c)
+ // if out_cur not avail, return overflow. Else, stores c at out_cur,
+ // increments out_cur, and returns c as int_type
+ strb_03.str(str_01); //reset
+ std::string::size_type sz1 = strb_03.str().length();
+ c1 = strb_03.sputc('a');
+ std::string::size_type sz2 = strb_03.str().length();
+ VERIFY( sz1 == sz2 ); //cuz inserting at out_cur, which is at beg to start
+ c2 = strb_03.sputc('b');
+ VERIFY( c1 != c2 );
+ VERIFY( strb_03.str() != str_01 );
+ c3 = strb_02.sputc('a'); // should be EOF because this is read-only
+ VERIFY( c3 == traits_type::eof() );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <string>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+class nullsetpbuf : public std::stringbuf
+{
+ char foo[64];
+public:
+ nullsetpbuf()
+ {
+ setp(foo, foo + 64);
+ setp(NULL, NULL);
+ }
+};
+
+// libstdc++/1057
+void test05()
+{
+ std::string text1 = "abcdefghijklmn";
+
+ nullsetpbuf nsp;
+ // Immediate crash as sputc writes to null pointer
+ nsp.sputc('a');
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1.3 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+bool over_called;
+
+class Derived_stringbuf : public std::stringbuf
+{
+public:
+ int_type overflow(int_type c)
+ {
+ over_called = true;
+ return std::stringbuf::overflow(c);
+ }
+
+ const char_type* pub_epptr() const
+ {
+ return epptr();
+ }
+
+ const char_type* pub_pptr() const
+ {
+ return pptr();
+ }
+};
+
+// libstdc++/9404
+void test04()
+{
+ bool test = true;
+
+ bool over_expected;
+
+ // sputc
+ Derived_stringbuf dsbuf_01;
+ over_called = false;
+ dsbuf_01.sputc('i');
+ VERIFY( over_called );
+ over_expected = dsbuf_01.pub_epptr() == dsbuf_01.pub_pptr();
+ over_called = false;
+ dsbuf_01.sputc('v');
+ VERIFY( (!over_expected && !over_called)
+ || (over_expected && over_called) );
+ dsbuf_01.sputc('i');
+ VERIFY( dsbuf_01.str() == "ivi" ); // Sanity check.
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // PUT
+ strb_03.str(str_01); //reset
+ std::string::size_type sz1 = strb_03.str().length();
+ std::string::size_type sz2 = strb_03.str().length();
+
+ // streamsize sputn(const char_typs* s, streamsize n)
+ // write up to n chars to out_cur from s, returning number assigned
+ // NB *sputn will happily put '\0' into your stream if you give it a chance*
+ str_tmp = strb_03.str();
+ sz1 = str_tmp.length();
+ strmsz_1 = strb_03.sputn("racadabras", 10);//"abracadabras or what?"
+ sz2 = strb_03.str().length();
+ VERIFY( sz1 == sz2 ); //shouldn't have changed length
+ VERIFY( strmsz_1 == 10 );
+ VERIFY( str_tmp != strb_03.str() );
+ strmsz_2 = strb_03.sputn(", i wanna reach out and", 23);
+ VERIFY( strmsz_1 != strmsz_2 ); // should re-allocate, copy 10 chars.
+ VERIFY( strmsz_1 == 10 );
+ VERIFY( strmsz_2 == 23 );
+ sz2 = strb_03.str().length();
+ VERIFY( sz1 != sz2 ); // need to change length
+ VERIFY( str_tmp != strb_03.str() );
+ str_tmp = strb_02.str();
+ strmsz_1 = strb_02.sputn("racadabra", 10);
+ VERIFY( strmsz_1 == 0 );
+ VERIFY( str_tmp == strb_02.str() );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <string>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+class nullsetpbuf : public std::stringbuf
+{
+ char foo[64];
+public:
+ nullsetpbuf()
+ {
+ setp(foo, foo + 64);
+ setp(NULL, NULL);
+ }
+};
+
+// libstdc++/1057
+void test05()
+{
+ std::string text1 = "abcdefghijklmn";
+
+ nullsetpbuf nsp;
+ // Immediate crash as xsputn writes to null pointer
+ nsp.sputn(text1.c_str(), text1.length());
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.1.3 Overridden virtual functions
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+bool over_called;
+
+class Derived_stringbuf : public std::stringbuf
+{
+public:
+ int_type overflow(int_type c)
+ {
+ over_called = true;
+ return std::stringbuf::overflow(c);
+ }
+
+ const char_type* pub_epptr() const
+ {
+ return epptr();
+ }
+
+ const char_type* pub_pptr() const
+ {
+ return pptr();
+ }
+};
+
+// libstdc++/9404
+void test04()
+{
+ bool test = true;
+
+ bool over_expected;
+ Derived_stringbuf dsbuf_01;
+
+ // sputn
+ Derived_stringbuf dsbuf_02;
+ over_called = false;
+ dsbuf_02.sputn("sonne's", 7);
+ VERIFY( over_called );
+ over_expected = dsbuf_02.pub_epptr() == dsbuf_02.pub_pptr();
+ over_called = false;
+ dsbuf_02.sputn(" peak", 5);
+ VERIFY( (!over_expected && !over_called)
+ || (over_expected && over_called) );
+ VERIFY( dsbuf_02.str() == "sonne's peak" ); // Sanity check.
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test member functions
+void test03()
+{
+ bool test = true;
+
+ //stringbuf::str()
+ VERIFY( strb_01.str() == str_01 );
+ VERIFY( strb_02.str() == str_02 );
+ VERIFY( strb_03.str() == str_03 );
+
+ //stringbuf::str(string&)
+ strb_03.str("none of the above, go to the oberoi in cairo, egypt.");
+ strb_03.str(str_01);
+ std::streamsize d1 = strb_01.in_avail();
+ std::streamsize d2 = strb_03.in_avail();
+ VERIFY( d1 ); // non-zero
+ VERIFY( !d2 ); // zero, cuz ios_base::out
+ VERIFY( d1 != d2 ); //these should be the same
+ VERIFY( str_01.length() == d1 );
+ VERIFY( strb_01.str() == strb_03.str() ); //ditto
+
+ // stringbuf::str(string&) and stringbuf::stringbuf(string&), where the
+ // string in question contains embedded NUL characters. Note that in this
+ // embedded-NUL situation, the size must be passed to the string ctor.
+ std::string str_nulls ("eschew \0 obfuscation", 20); // tested in 21_strings
+ std::stringbuf strb_normal (str_01);
+ std::stringbuf strb_nulls (str_nulls);
+ strb_normal.str(str_nulls); // tried using 'strb_01' rather than declaring
+ // another variable, but then test04 broke!
+ VERIFY( strb_nulls.in_avail() == str_nulls.size() );
+ VERIFY( strb_nulls.str().size() == 20 );
+ VERIFY( strb_normal.in_avail() == str_nulls.size() );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// http://gcc.gnu.org/ml/libstdc++/2003-02/msg00269.html
+// Growing and then seeking to ios_base::beg triggered a bug in str(),
+// which didn't notice the grow.
+void test07()
+{
+ bool test = true;
+
+ std::stringbuf strb_01;
+ strb_01.sputc('s');
+ strb_01.pubseekoff(0, std::ios_base::beg);
+ std::string tmp = strb_01.str();
+ VERIFY( tmp == "s" );
+
+ std::string str("strivi,");
+ std::stringbuf strb_02(str);
+ strb_02.pubseekoff(0, std::ios_base::end);
+ strb_02.sputn(" no better!", 11);
+ strb_02.pubseekoff(0, std::ios_base::beg);
+ tmp = strb_02.str();
+ VERIFY( tmp == "strivi, no better!" );
+}
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test06()
+{
+ bool test = true;
+
+ std::ostringstream os ("foo", std::ios_base::app);
+ os << "bar";
+
+ VERIFY( os.str() == "foobar" );
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/3955 -- ios_base::app overwrites from the beginning
+void test05()
+{
+ bool test = true;
+
+ std::ostringstream os ("foo");
+ os << "bar";
+
+ VERIFY( os.str() == "bar" );
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 981208 bkoz test functionality of basic_stringbuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+std::string str_01("mykonos. . . or what?");
+std::string str_02("paris, or sainte-maxime?");
+std::string str_03;
+std::stringbuf strb_01(str_01);
+std::stringbuf strb_02(str_02, std::ios_base::in);
+std::stringbuf strb_03(str_03, std::ios_base::out);
+
+// test overloaded virtual functions
+void test04()
+{
+ bool test = true;
+ std::string str_tmp;
+ std::stringbuf strb_tmp;
+ std::streamsize strmsz_1, strmsz_2;
+ std::streamoff strmof_1(-1), strmof_2;
+ typedef std::stringbuf::int_type int_type;
+ typedef std::stringbuf::traits_type traits_type;
+ typedef std::stringbuf::pos_type pos_type;
+ typedef std::stringbuf::off_type off_type;
+
+ int_type c1 = strb_01.sbumpc();
+ int_type c2 = strb_02.sbumpc();
+ int_type c3 = strb_01.sbumpc();
+ int_type c4 = strb_02.sbumpc();
+ int_type c5 = strb_03.sbumpc();
+
+ // PUT
+ strb_03.str(str_01); //reset
+ std::string::size_type sz1 = strb_03.str().length();
+ std::string::size_type sz2 = strb_03.str().length();
+
+ // streamsize sputn(const char_typs* s, streamsize n)
+ // write up to n chars to out_cur from s, returning number assigned
+ // NB *sputn will happily put '\0' into your stream if you give it a chance*
+ str_tmp = strb_03.str();
+ sz1 = str_tmp.length();
+ strmsz_1 = strb_03.sputn("racadabras", 10);//"abracadabras or what?"
+ sz2 = strb_03.str().length();
+ strmsz_2 = strb_03.sputn(", i wanna reach out and", 10);
+ sz2 = strb_03.str().length();
+ str_tmp = strb_02.str();
+ strmsz_1 = strb_02.sputn("racadabra", 10);
+
+ // PUTBACK
+
+ // int_type sputbackc(char_type c)
+ // if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
+ // otherwise decrements in_cur and returns *gptr()
+ strmsz_1 = strb_01.in_avail();
+ str_tmp = strb_01.str();
+ c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
+ c2 = strb_01.sputbackc('z');//"mykonos. . .zor what?"
+ c3 = strb_01.sgetc();
+ //test for _in_cur == _in_beg
+ strb_01.str(str_tmp);
+ strmsz_1 = strb_01.in_avail();
+ c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
+ c2 = strb_01.sputbackc('z');//"mykonos. . . or what?"
+ c3 = strb_01.sgetc();
+ // test for replacing char with identical one
+ strb_01.str(str_01); //reset
+ strmsz_1 = strb_01.in_avail();
+ strb_01.sbumpc();
+ strb_01.sbumpc();
+ c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
+ c2 = strb_01.sputbackc('y');//"mykonos. . . or what?"
+ c3 = strb_01.sgetc();
+ //test for ios_base::out
+ strmsz_2 = strb_03.in_avail();
+ c4 = strb_03.sputbackc('x');
+
+ // int_type sungetc()
+ // if in_cur not avail, return pbackfail(), else decrement and
+ // return to_int_type(*gptr())
+ for (int i = 0; i<12; ++i)
+ strb_01.sbumpc();
+ strmsz_1 = strb_01.in_avail();
+ str_tmp = strb_01.str();
+ c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
+ c2 = strb_01.sungetc();//"mykonos. . . or what?"
+ c3 = strb_01.sgetc();
+ VERIFY( c1 != c2 );
+ VERIFY( c3 == c2 );
+ VERIFY( c1 != c3 );
+ VERIFY( c2 == ' ' );
+ VERIFY( strb_01.str() == str_01 );
+ VERIFY( str_01.size() == strb_01.str().size() );
+ //test for _in_cur == _in_beg
+ strb_01.str(str_tmp);
+ strmsz_1 = strb_01.in_avail();
+ c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
+ c2 = strb_01.sungetc();//"mykonos. . . or what?"
+ c3 = strb_01.sgetc();
+ VERIFY( c1 != c2 );
+ VERIFY( c3 != c2 );
+ VERIFY( c1 == c3 );
+ VERIFY( c2 == traits_type::eof() );
+ VERIFY( strb_01.str() == str_01 );
+ VERIFY( str_01.size() == strb_01.str().size() );
+ // test for replacing char with identical one
+ strb_01.str(str_01); //reset
+ strmsz_1 = strb_01.in_avail();
+ strb_01.sbumpc();
+ strb_01.sbumpc();
+ c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
+ c2 = strb_01.sungetc();//"mykonos. . . or what?"
+ c3 = strb_01.sgetc();
+ VERIFY( c1 != c2 );
+ VERIFY( c3 == c2 );
+ VERIFY( c1 != c3 );
+ VERIFY( strb_01.str() == str_01 );
+ VERIFY( str_01.size() == strb_01.str().size() );
+ //test for ios_base::out
+ strmsz_2 = strb_03.in_avail();
+ c4 = strb_03.sungetc();
+ VERIFY( c4 == traits_type::eof() );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+
+
+
+// more candy!!!
--- /dev/null
+// 1999-10-11 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.5.2 template class basic_streambuf
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+class setpbuf : public std::stringbuf
+{
+ char buffer[4];
+ std::string result;
+
+public:
+
+ std::string&
+ get_result()
+ { return result; }
+
+ setpbuf()
+ {
+ char foo [32];
+ setp(foo, foo + 32);
+ setp(buffer, buffer + 4);
+ }
+
+ ~setpbuf()
+ { sync(); }
+
+ virtual int_type
+ overflow(int_type n)
+ {
+ if (sync() != 0)
+ return traits_type::eof();
+
+ result += traits_type::to_char_type(n);
+
+ return n;
+ }
+
+ virtual int
+ sync()
+ {
+ result.append(pbase(), pptr());
+ setp(buffer, buffer + 4);
+ return 0;
+ }
+};
+
+// libstdc++/1057
+void test04()
+{
+ bool test = true;
+ std::string text = "abcdefghijklmn";
+
+ // 01
+ setpbuf sp1;
+ // Here xsputn writes over sp1.result
+ sp1.sputn(text.c_str(), text.length());
+
+ // This crashes when result is accessed
+ sp1.pubsync();
+ VERIFY( sp1.get_result() == text );
+
+ // 02
+ setpbuf sp2;
+ for (std::string::size_type i = 0; i < text.length(); ++i)
+ {
+ // sputc also writes over result
+ sp2.sputc(text[i]);
+ }
+
+ // Crash here
+ sp2.pubsync();
+ VERIFY( sp2.get_result() == text );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.7.4 - Template class basic_stringstream
+// NB: This file is for testing basic_stringstream with NO OTHER INCLUDES.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/7216
+void test01()
+{
+ // Check for required typedefs
+ typedef std::stringstream test_type;
+ typedef test_type::char_type char_type;
+ typedef test_type::traits_type traits_type;
+ typedef test_type::int_type int_type;
+ typedef test_type::pos_type pos_type;
+ typedef test_type::off_type off_type;
+}
--- /dev/null
+// 2002-07-25 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.7.4 - Template class basic_stringstream
+// NB: This file is for testing basic_stringstream with NO OTHER INCLUDES.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+namespace test
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+ typedef short type_t;
+ template class basic_stringstream<type_t, char_traits<type_t> >;
+ template class basic_stringstream<pod_char, char_traits<pod_char> >;
+} // test
--- /dev/null
+// 1999-01-17 bkoz test functionality of basic_filebuf for char_type == char
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+// NB: This file is for testing basic_filebuf with NO OTHER INCLUDES.
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// { dg-do compile }
+
+// libstdc++/2020
+// should be able to use custom char_type, custom traits type
+class gnu_char_type
+{
+ unsigned long character;
+public:
+ // operator ==
+ bool
+ operator==(const gnu_char_type& __lhs)
+ { return character == __lhs.character; }
+
+ // operator <
+ bool
+ operator<(const gnu_char_type& __lhs)
+ { return character < __lhs.character; }
+
+ // default ctor
+ gnu_char_type() { }
+
+ // to_char_type
+ gnu_char_type(const unsigned long& __l) : character(__l) { }
+
+ // to_int_type
+ operator unsigned long() const { return character; }
+};
+
+// char_traits specialization
+struct gnu_char_traits
+{
+ typedef gnu_char_type char_type;
+ typedef long int_type;
+ typedef long pos_type;
+ typedef unsigned long off_type;
+ typedef long state_type;
+
+ static void
+ assign(char_type& __c1, const char_type& __c2) { }
+
+ static bool
+ eq(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static bool
+ lt(const char_type& __c1, const char_type& __c2) { return true; }
+
+ static int
+ compare(const char_type* __s1, const char_type* __s2, size_t __n)
+ { return 0; }
+
+ static size_t
+ length(const char_type* __s) { return 0; }
+
+ static const char_type*
+ find(const char_type* __s, size_t __n, const char_type& __a)
+ { return __s; }
+
+ static char_type*
+ move(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ copy(char_type* __s1, const char_type* __s2, size_t __n)
+ { return __s1; }
+
+ static char_type*
+ assign(char_type* __s, size_t __n, char_type __a)
+ { return __s; }
+
+ static char_type
+ to_char_type(const int_type& __c)
+ { return char_type(); }
+
+ static int_type
+ to_int_type(const char_type& __c)
+ { return int_type(); }
+
+ static bool
+ eq_int_type(const int_type& __c1, const int_type& __c2)
+ { return true; }
+
+ static int_type
+ eof()
+ { return int_type(); }
+
+ static int_type
+ not_eof(const int_type& __c)
+ { return int_type(); }
+};
+
+void test07()
+{
+ bool test = true;
+ typedef std::basic_stringstream<gnu_char_type, gnu_char_traits> gnu_sstr;
+
+ try
+ {
+ gnu_sstr obj;
+ }
+ catch(std::exception& obj)
+ {
+ test = false;
+ VERIFY( test );
+ }
+}
+
+#if !__GXX_WEAK__
+// Explicitly instantiate for systems with no COMDAT or weak support.
+template
+ std::basic_streambuf<gnu_char_type>::int_type
+ std::basic_streambuf<gnu_char_type>::_S_pback_size;
+#endif
+
+int main()
+{
+ test07();
+ return 0;
+}
+
+
+
+// more surf!!!
--- /dev/null
+// 2003-03-26 B enjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.8.1.1 - Template class basic_filebuf
+
+#include <iostream>
+#include <sstream>
+
+void test01()
+{
+ // Check for required base class.
+ typedef std::stringstream test_type;
+ typedef std::iostream base_type;
+ const test_type& obj = test_type();
+ const base_type* base = &obj;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
+
+// more surf!!!
+
+
+
+
+
+
+
+
+
--- /dev/null
+// 2003-04-01 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.6 - Member functions [lib.stringstream.members]
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void
+redirect_buffer(std::ios& stream, std::streambuf* new_buf)
+{ stream.rdbuf(new_buf); }
+
+std::streambuf*
+active_buffer(std::ios& stream)
+{ return stream.rdbuf(); }
+
+// libstdc++/2832
+void test02()
+{
+ bool test = true;
+ const char* strlit01 = "fuck war";
+ const char* strlit02 = "two less cars abstract riot crew, critical mass/SF";
+ const std::string str00;
+ const std::string str01(strlit01);
+ std::string str02;
+ std::stringbuf sbuf;
+ std::streambuf* pbasebuf0 = &sbuf;
+
+ std::stringstream sstrm1;
+ // derived rdbuf() always returns original streambuf, even though
+ // it's no longer associated with the stream.
+ std::stringbuf* const buf1 = sstrm1.rdbuf();
+ // base rdbuf() returns the currently associated streambuf
+ std::streambuf* pbasebuf1 = active_buffer(sstrm1);
+ redirect_buffer(sstrm1, &sbuf);
+ std::stringbuf* const buf2 = sstrm1.rdbuf();
+ std::streambuf* pbasebuf2 = active_buffer(sstrm1);
+ VERIFY( buf1 == buf2 );
+ VERIFY( pbasebuf1 != pbasebuf2 );
+ VERIFY( pbasebuf2 == pbasebuf0 );
+
+ // How confusing and non-intuitive is this?
+ // These semantics are a joke, a serious defect, and incredibly lame.
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
+
+
+
--- /dev/null
+// 2001-05-24 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.6 member functions (stringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test = true;
+ std::stringstream is01;
+ const std::string str00;
+ const std::string str01 = "123";
+ std::string str02;
+ const int i01 = 123;
+ int a,b;
+
+ std::ios_base::iostate state1, state2, statefail, stateeof;
+ statefail = std::ios_base::failbit;
+ stateeof = std::ios_base::eofbit;
+
+ // string str() const
+ str02 = is01.str();
+ VERIFY( str00 == str02 );
+
+ // void str(const basic_string&)
+ is01.str(str01);
+ str02 = is01.str();
+ VERIFY( str01 == str02 );
+ state1 = is01.rdstate();
+ is01 >> a;
+ state2 = is01.rdstate();
+ VERIFY( a = i01 );
+ // 22.2.2.1.2 num_get virtual functions
+ // p 13
+ // in any case, if stage 2 processing was terminated by the test for
+ // in == end then err != ios_base::eofbit is performed.
+ VERIFY( state1 != state2 );
+ VERIFY( state2 == stateeof );
+
+ is01.str(str01);
+ is01 >> b;
+ VERIFY( b != a );
+ // as is01.good() is false, istream::sentry blocks extraction.
+
+ is01.clear();
+ state1 = is01.rdstate();
+ is01 >> b;
+ state2 = is01.rdstate();
+ VERIFY( b == a );
+ VERIFY( state1 != state2 );
+ VERIFY( state2 == stateeof );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 2001-05-24 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.6 member functions (stringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void
+redirect_buffer(std::ios& stream, std::streambuf* new_buf)
+{ stream.rdbuf(new_buf); }
+
+std::streambuf*
+active_buffer(std::ios& stream)
+{ return stream.rdbuf(); }
+
+// libstdc++/2832
+void test02()
+{
+ bool test = true;
+ const char* strlit01 = "fuck war";
+ const char* strlit02 = "two less cars abstract riot crew, critical mass/SF";
+ const std::string str00;
+ const std::string str01(strlit01);
+ std::string str02;
+ std::stringbuf sbuf(str01);
+ std::streambuf* pbasebuf0 = &sbuf;
+
+ std::stringstream sstrm1;
+ VERIFY( sstrm1.str() == str00 );
+ // derived rdbuf() always returns original streambuf, even though
+ // it's no longer associated with the stream.
+ std::stringbuf* const buf1 = sstrm1.rdbuf();
+ // base rdbuf() returns the currently associated streambuf
+ std::streambuf* pbasebuf1 = active_buffer(sstrm1);
+ redirect_buffer(sstrm1, &sbuf);
+ std::stringbuf* const buf2 = sstrm1.rdbuf();
+ std::streambuf* pbasebuf2 = active_buffer(sstrm1);
+ VERIFY( buf1 == buf2 );
+ VERIFY( pbasebuf1 != pbasebuf2 );
+ VERIFY( pbasebuf2 == pbasebuf0 );
+
+ // derived rdbuf() returns the original buf, so str() doesn't change.
+ VERIFY( sstrm1.str() != str01 );
+ VERIFY( sstrm1.str() == str00 );
+ // however, casting the active streambuf to a stringbuf shows what's up:
+ std::stringbuf* psbuf = dynamic_cast<std::stringbuf*>(pbasebuf2);
+ str02 = psbuf->str();
+ VERIFY( str02 == str01 );
+
+ // How confusing and non-intuitive is this?
+ // These semantics are a joke, a serious defect, and incredibly lame.
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 2001-05-24 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.6 member functions (stringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void
+test03()
+{
+ bool test = true;
+
+ //
+ // 1: Automatic formatting of a compound string
+ //
+ int i = 1024;
+ int *pi = &i;
+ double d = 3.14159;
+ double *pd = &d;
+ std::string blank;
+ std::ostringstream ostrst01;
+ std::ostringstream ostrst02(blank);
+
+ // No buffer, so should be created.
+ ostrst01 << "i: " << i << " i's address: " << pi << "\n"
+ << "d: " << d << " d's address: " << pd << std::endl;
+ // Buffer, so existing buffer should be overwritten.
+ ostrst02 << "i: " << i << " i's address: " << pi << "\n"
+ << "d: " << d << " d's address: " << pd << std::endl;
+
+ std::string msg01 = ostrst01.str();
+ std::string msg02 = ostrst02.str();
+ VERIFY( msg01 == msg02 );
+ VERIFY( msg02 != blank );
+
+ // stringstream
+ std::string str1("");
+ std::string str3("this is a somewhat string");
+ std::stringstream ss1(str1, std::ios_base::in|std::ios_base::out);
+ std::stringstream ss2(str3, std::ios_base::in|std::ios_base::out);
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 2001-05-24 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.7.6 member functions (stringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8466
+void test04()
+{
+ bool test = true;
+
+ const char* strlit00 = "orvieto";
+ const std::string str00 = strlit00;
+
+ std::ostringstream oss;
+
+ oss.str(str00);
+ oss << "cortona";
+ VERIFY( str00 == strlit00 );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
+++ /dev/null
-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 27.8.1.3 filebuf member functions
-// @require@ %-*.tst %-*.txt
-// @diff@ %-*.tst %-*.txt
-
-// various tests for filebuf::open() and filebuf::close() including
-// the non-portable functionality in the libstdc++-v3 IO library
-
-#include <iostream>
-#include <fstream>
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <ext/stdio_filebuf.h>
-#include <testsuite_hooks.h>
-
-const char name_01[] = "filebuf_members-1.tst";
-const char name_02[] = "filebuf_members-1.txt";
-
-// Test member functions.
-void test_01()
-{
- bool test = true;
- const char* name_03 = "filebuf_members-3"; // empty file, need to create
-
- std::filebuf fb_01; // in
- std::filebuf fb_02; // out
- std::filebuf fb_03; // in | out
-
- // bool is_open()
- VERIFY( !fb_01.is_open() );
- VERIFY( !fb_02.is_open() );
- VERIFY( !fb_03.is_open() );
-
- // filebuf_type* open(const char* __s, ios_base::openmode __mode)
- fb_01.open(name_01, std::ios_base::in | std::ios_base::ate);
- fb_02.open(name_02, std::ios_base::in | std::ios_base::out
- | std::ios_base::trunc);
- // Try to open two different files without closing the first:
- // Should keep the old file attached, and disregard attempt to overthrow.
- fb_02.open(name_03, std::ios_base::in | std::ios_base::out);
- fb_03.open(name_03, std::ios_base::out | std::ios_base::trunc);
- VERIFY( fb_01.is_open() );
- VERIFY( fb_02.is_open() );
- VERIFY( fb_03.is_open() );
-
- // filebuf_type* close()
- fb_01.close();
- fb_02.close();
- fb_03.close();
- VERIFY( !fb_01.is_open() );
- VERIFY( !fb_02.is_open() );
- VERIFY( !fb_03.is_open() );
-}
-
-// Verify that std::filebuf doesn't close files that it didn't open
-// when using the following std::filebuf ctor:
-//
-// std::filebuf(__c_file_type* __f,
-// ios_base::openmode __mode,
-// int_type __s);
-//
-// Thanks to "George T. Talbot" <george@moberg.com> for uncovering
-// this bug/situation.
-void test_02()
-{
- bool test = true;
- int close_num;
-
- // read (ext)
- FILE* f2 = fopen(name_01, "r");
- VERIFY( f2 != NULL );
- if (f2)
- {
- __gnu_cxx::stdio_filebuf<char> fb(f2, std::ios_base::in, 512);
- close_num = fclose(f2);
- }
- VERIFY( close_num == 0 );
-
- // read (standard)
- FILE* f = fopen(name_01, "r");
- VERIFY( f != NULL );
- if (f)
- {
- std::ifstream ifstream1(name_01);
- VERIFY( ifstream1.is_open() );
- std::ios_base::iostate st01 = ifstream1.rdstate();
- VERIFY( st01 == std::ios_base::goodbit );
- close_num = fclose(f);
- }
- VERIFY( close_num == 0 );
-}
-
-void test_03()
-{
- bool test = true;
- int first_fd = ::open(name_01, O_RDONLY);
- VERIFY( first_fd != -1 );
- FILE* first_file = ::fdopen(first_fd, "r");
- VERIFY( first_file != NULL );
- __gnu_cxx::stdio_filebuf<char> fb(first_file, std::ios_base::in);
-
- int second_fd = fb.fd();
-
- VERIFY( first_fd == second_fd );
-}
-
-// libstdc++/2913, libstdc++/4879
-// John Fardo <jfardo@laurelnetworks.com>, Brad Garcia <garsh@attbi.com>
-void
-test_04()
-{
- bool test = true;
- const char* name = "tmp_fifo1";
- signal(SIGPIPE, SIG_IGN);
-
- unlink(name);
- if (0 != mkfifo(name, S_IRWXU))
- {
- std::cerr << "failed to create fifo" << std::endl;
- exit(-1);
- }
-
- int fval = fork();
- if (fval == -1)
- {
- std::cerr << "failed to fork" << std::endl;
- unlink(name);
- exit(-1);
- }
- else if (fval == 0)
- {
- std::ifstream ifs(name);
- sleep(1);
- ifs.close();
- exit(0);
- }
-
- std::ofstream ofs(name);
- sleep(2);
- ofs.put('t');
-
- /*
- * ISO/IED 14882:1998(E) 27.8.1.10.4
- *
- * void close();
- *
- * Effects: Calls rdbuf()->close() and, if that function fails
- * (returns a null pointer), calls setstate(failbit)...
- */
- ofs.close();
- if (!(ofs.rdstate() & std::ios::failbit))
- {
- test = false;
- VERIFY( test );
- unlink(name);
- exit(-1);
- }
-
- unlink(name);
-}
-
-// Charles Leggett <CGLeggett@lbl.gov>
-void test_05()
-{
- bool test = true;
- const char* name = "tmp_file5";
-
- std::fstream scratch_file;
-
- scratch_file.open(name, std::ios::out);
- scratch_file.close();
-
- scratch_file.open(name, std::ios::in);
- if (!scratch_file)
- VERIFY( false );
- scratch_file.close();
-}
-
-// libstdc++/9507
-void test_06()
-{
- bool test = true;
- const char* name = "tmp_fifo2";
-
- signal(SIGPIPE, SIG_IGN);
-
- unlink(name);
- mkfifo(name, S_IRWXU);
-
- if (!fork())
- {
- std::filebuf fbuf;
- fbuf.open(name, std::ios_base::in);
- fbuf.sgetc();
- fbuf.close();
- exit(0);
- }
-
- std::filebuf fbuf;
- std::filebuf* r = fbuf.open(name, std::ios_base::out | std::ios_base::ate);
- VERIFY( !fbuf.is_open() );
- VERIFY( r == NULL );
-}
-
-// libstdc++/9964
-void test_07()
-{
- using namespace std;
- bool test = true;
-
- const char* name = "tmp_fifo3";
-
- signal(SIGPIPE, SIG_IGN);
-
- unlink(name);
- mkfifo(name, S_IRWXU);
-
- int child = fork();
- VERIFY( child != -1 );
-
- if (child == 0)
- {
- filebuf fbin;
- fbin.open(name, ios_base::in);
- sleep(1);
- fbin.close();
- exit(0);
- }
-
- filebuf fb;
- filebuf* ret = fb.open(name, ios_base::out | ios_base::trunc);
- VERIFY( ret != NULL );
- VERIFY( fb.is_open() );
-
- sleep(2);
- fb.sputc('a');
-
- ret = fb.close();
- VERIFY( ret == NULL );
- VERIFY( !fb.is_open() );
-}
-
-int
-main()
-{
- test_01();
- test_02();
- test_03();
- test_04();
- test_05();
- test_06();
- test_07();
- return 0;
-}
-
-
+++ /dev/null
-// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-
-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 27.8.1.4 Overridden virtual functions
-
-#include <fstream>
-#include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <locale>
-#include <testsuite_hooks.h>
-
-// @require@ %-*.tst %-*.txt
-// @diff@ %-*.tst %*.txt
-
-void test01()
-{
- using namespace std;
-
- bool test = true;
- char buf[512];
- const char* strlit = "how to tell a story and other essays: mark twain";
- const size_t strlitsize = std::strlen(strlit);
- filebuf fbuf01;
-
- fbuf01.pubsetbuf(buf, 512);
- fbuf01.sputn(strlit, strlitsize);
- VERIFY( std::strncmp(strlit, buf, strlitsize) != 0 );
-}
-
-void test02()
-{
- using namespace std;
-
- bool test = true;
- char buf[512];
- const char* strlit = "how to tell a story and other essays: mark twain";
- const size_t strlitsize = std::strlen(strlit);
- filebuf fbuf01;
- fbuf01.open("tmp", ios_base::out);
-
- fbuf01.pubsetbuf(buf, strlitsize);
- fbuf01.sputn(strlit, strlitsize);
- VERIFY( std::strncmp(strlit, buf, strlitsize) == 0 );
-}
-
-
-// NB: This test assumes that _M_buf_size == 40, and not the usual
-// buffer_size length of BUFSIZ (8192), so that overflow/underflow can be
-// simulated a bit more readily.
-// NRB (Nota Really Bene): setting it to 40 breaks the test, as intended.
-const int buffer_size = 8192;
-//const int buffer_size = 40;
-
-const char carray_01[] = "santa cruz or sandiego?";
-const char carray_02[] = "memphis, new orleans, and savanah";
-const char name_01[] = "filebuf_virtuals-1.txt"; // file with data in it
-const char name_02[] = "filebuf_virtuals-2.txt"; // empty file, need to create
-const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
-const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
-const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
-const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
-const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
-const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
-
-class derived_filebuf: public std::filebuf
-{
- public:
- void
- set_size(int_type __size) { _M_buf_size_opt = __size; }
-};
-
-derived_filebuf fb_01; // in
-derived_filebuf fb_02; // out
-derived_filebuf fb_03; // in | out
-
-
-// Initialize filebufs to be the same size regardless of platform.
-void test03()
-{
- fb_01.set_size(buffer_size);
- fb_02.set_size(buffer_size);
- fb_03.set_size(buffer_size);
-}
-
-
-// Test the filebuf/stringbuf locale settings.
-void test04()
-{
- std::locale loc_tmp;
- loc_tmp = fb_01.getloc();
- fb_01.pubimbue(loc_tmp); //This should initialize _M_init to true
- fb_01.getloc(); //This should just return _M_locale
-}
-
-// Test overloaded virtual functions.
-void test05()
-{
- typedef std::filebuf::int_type int_type;
- typedef std::filebuf::traits_type traits_type;
- typedef std::filebuf::pos_type pos_type;
- typedef std::filebuf::off_type off_type;
- typedef size_t size_type;
-
- bool test = true;
- std::filebuf f_tmp;
- std::streamsize strmsz_1, strmsz_2;
- std::streamoff strmof_1, strmof_2;
- int i = 0, j = 0, k = 0;
-
- // GET
- // int showmanyc()
- // returns an estimate of the numbers of chars in the seq, or -1.
- // if __retval > 0, then calls to underflow won't return
- // traits_type::eof() till at least __retval chars.
- // if __retval == -1, then calls to underflow or uflow will fail.
- // NB overriding def if it can determine more chars can be read from
- // the input sequence.
-
- // int in_avail()
- // if a read position is available, return _M_in_end - _M_in_cur.
- // else return showmanyc.
- strmof_1 = fb_01.in_avail();
- strmof_2 = fb_02.in_avail();
- VERIFY( strmof_1 == -1 );
- VERIFY( strmof_1 == strmof_2 ); //fail because not open
- strmof_1 = fb_03.in_avail();
- VERIFY( strmof_1 == strmof_2 );
- fb_01.open(name_01, std::ios_base::in);
- fb_02.open(name_02, std::ios_base::out | std::ios_base::trunc);
- fb_03.open(name_03, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
- strmof_1 = fb_01.in_avail();
- strmof_2 = fb_02.in_avail();
- VERIFY( strmof_1 != strmof_2 );
- VERIFY( strmof_1 >= 0 );
- VERIFY( strmof_2 == -1 ); // empty file
- strmof_1 = fb_03.in_avail();
- VERIFY( strmof_1 == 0 ); // empty file
-
- // int_type sbumpc()
- // if read_cur not avail returns uflow(), else return *read_cur & increment
- int_type c1 = fb_01.sbumpc();
- int_type c2 = fb_02.sbumpc();
- VERIFY( c1 != c2 );
- VERIFY( c1 == '/' );
- VERIFY( c2 == -1 );
- int_type c3 = fb_01.sbumpc();
- int_type c4 = fb_02.sbumpc();
- VERIFY( c3 != c4 );
- VERIFY( c1 == c3 ); // fluke, both happen to be '/'
- VERIFY( c2 == c4 );
- int_type c5 = fb_03.sbumpc();
- VERIFY( c5 == traits_type::eof() );
- // XXX should do some kind of test to make sure that internal
- // buffers point ot the same thing, to check consistancy.
-
- // int_type sgetc()
- // if read_cur not avail, return uflow(), else return *read_cur
- int_type c6 = fb_01.sgetc();
- int_type c7 = fb_02.sgetc();
- VERIFY( c6 != c3 );
- VERIFY( c7 == c4 ); // both -1
- int_type c8 = fb_01.sgetc();
- int_type c9 = fb_02.sgetc();
- VERIFY( c6 == c8 );
- VERIFY( c7 == c9 );
- c5 = fb_03.sgetc();
- VERIFY( c5 == traits_type::eof() );
-
- // int_type snextc()
- // calls sbumpc and if sbumpc != eof, return sgetc
- c6 = fb_01.snextc();
- c7 = fb_02.snextc();
- VERIFY( c6 != c8 );
- VERIFY( c7 == c9 ); // -1
- VERIFY( c6 == '9' );
- c6 = fb_01.snextc();
- c7 = fb_02.snextc();
- VERIFY( c6 != c8 );
- VERIFY( c7 == c9 ); // -1
- VERIFY( c6 == '9' );
- c5 = fb_03.snextc();
- VERIFY( c5 == traits_type::eof() );
-
- // streamsize sgetn(char_type *s, streamsize n)
- // streamsize xsgetn(char_type *s, streamsize n)
- // assign up to n chars to s from input sequence, indexing in_cur as
- // approp and returning the number of chars assigned
- strmsz_1 = fb_01.in_avail();
- strmsz_2 = fb_02.in_avail();
- test = strmsz_1 != strmsz_2;
- char carray1[13] = "";
- strmsz_1 = fb_01.sgetn(carray1, 10);
- char carray2[buffer_size] = "";
- strmsz_2 = fb_02.sgetn(carray2, 10);
- VERIFY( strmsz_1 != strmsz_2 );
- VERIFY( strmsz_1 == 10 );
- VERIFY( strmsz_2 == 0 );
- c1 = fb_01.sgetc();
- c2 = fb_02.sgetc();
- VERIFY( c1 == '\n' );
- VERIFY( c7 == c2 ); // n != i
- strmsz_1 = fb_03.sgetn(carray1, 10);
- VERIFY( !strmsz_1 ); //zero
- strmsz_1 = fb_01.in_avail();
- strmsz_2 = fb_01.sgetn(carray2, strmsz_1 + 5);
- VERIFY( strmsz_1 == strmsz_2 - 5 );
- c4 = fb_01.sgetc(); // buffer should have underflowed from above.
- VERIFY( c4 == 'i' );
- strmsz_1 = fb_01.in_avail();
- VERIFY( strmsz_1 > 0 );
- strmsz_2 = fb_01.sgetn(carray2, strmsz_1 + 5);
- VERIFY( strmsz_1 == strmsz_2 ); //at the end of the actual file
- strmsz_1 = fb_02.in_avail();
- strmsz_2 = fb_02.sgetn(carray2, strmsz_1 + 5);
- VERIFY( strmsz_1 == -1 );
- VERIFY( strmsz_2 == 0 );
- c4 = fb_02.sgetc(); // should be EOF
- VERIFY( c4 == traits_type::eof() );
-
- // PUT
- // int_type sputc(char_type c)
- // if out_cur not avail, return overflow(traits_type::to_int_type(c))
- // else, stores c at out_cur,
- // increments out_cur, and returns c as int_type
- // strmsz_1 = fb_03.in_avail(); // XXX valid for in|out??
- c1 = fb_02.sputc('a');
- c2 = fb_03.sputc('b');
- VERIFY( c1 != c2 );
- c1 = fb_02.sputc('c');
- c2 = fb_03.sputc('d');
- VERIFY( c1 != c2 );
- // strmsz_2 = fb_03.in_avail();
- // VERIFY( strmsz_1 != strmsz_2 );
- for (int i = 50; i <= 90; ++i)
- c2 = fb_02.sputc(char(i));
- // 27filebuf-2.txt == ac23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX
- // fb_02._M_out_cur = '2'
- strmsz_1 = fb_03.in_avail();
- for (int i = 50; i <= 90; ++i)
- c2 = fb_03.sputc(char(i));
- strmsz_2 = fb_03.in_avail();
- // VERIFY( strmsz_1 != strmsz_2 );
- // VERIFY( strmsz_1 > 0 );
- // VERIFY( strmsz_2 > 0 );
- // 27filebuf-2.txt == bd23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX
- // fb_02._M_out_cur = '2'
- c3 = fb_01.sputc('a'); // should be EOF because this is read-only
- VERIFY( c3 == traits_type::eof() );
-
- // streamsize sputn(const char_typs* s, streamsize n)
- // write up to n chars to out_cur from s, returning number assigned
- // NB *sputn will happily put '\0' into your stream if you give it a chance*
- strmsz_1 = fb_03.sputn("racadabras", 10);//"abracadabras or what?"
- VERIFY( strmsz_1 == 10 );
- strmsz_2 = fb_03.sputn(", i wanna reach out and", 10);
- VERIFY( strmsz_2 == 10 );
- VERIFY( strmsz_1 == strmsz_2 );
- // fb_03._M_out_beg = "YZracadabras, i wanna FGHIJKLMNOPQRSTUVW"
- // fb_03._M_out_cur = "FGHIJKLMNOPQRSTUVW"
- strmsz_1 = fb_02.sputn("racadabras", 10);
- VERIFY( strmsz_1 == 10 );
- // fb_02._M_out_beg = "YZracadabras<=>?@ABCDEFGHIJKLMNOPQRSTUVW"
- // fb_02._M_out_cur = "<=>?@ABCDEFGHIJKLMNOPQRSTUVW"
- strmsz_1 = fb_01.sputn("racadabra", 10);
- VERIFY( strmsz_1 == 0 );
-
- // PUTBACK
- // int_type pbfail(int_type c)
- // called when gptr() null, gptr() == eback(), or traits::eq(*gptr, c) false
- // "pending sequence" is:
- // 1) everything as defined in underflow
- // 2) + if (traits::eq_int_type(c, traits::eof()), then input
- // sequence is backed up one char before the pending sequence is
- // determined.
- // 3) + if (not 2) then c is prepended. Left unspecified is
- // whether the input sequence is backedup or modified in any way
- // returns traits::eof() for failure, unspecified other value for success
-
- // int_type sputbackc(char_type c)
- // if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
- // otherwise decrements in_cur and returns *gptr()
- c1 = fb_03.sgetc(); // -1
- c2 = fb_03.sputbackc('z');
- strmsz_2 = fb_03.in_avail();
- c3 = fb_03.sgetc();
- VERIFY( c3 == c2 );
- VERIFY( c1 != c3 );
- VERIFY( 1 == strmsz_2 );
- //test for _in_cur == _in_beg
- // fb_03._M_out_beg = "bd23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZracada" etc
- fb_03.pubseekoff(10, std::ios_base::beg,
- std::ios_base::in | std::ios_base::out);
- fb_03.sputc('m');
- strmsz_1 = fb_03.in_avail();
- c1 = fb_03.sgetc();
- fb_03.snextc();
- c2 = fb_03.sputbackc('z');
- strmsz_2 = fb_03.in_avail();
- c3 = fb_03.sgetc();
- VERIFY( c1 != c2 );
- VERIFY( c3 == c2 );
- VERIFY( c1 != c3 );
- VERIFY( c2 == 'z' );
- // VERIFY( strmsz_1 == strmsz_2 );
- // test for replacing char with identical one
- fb_03.snextc();
- fb_03.sputc('u');
- fb_03.sputc('v');
- fb_03.sputc('a');
- strmsz_1 = fb_03.in_avail();
- c2 = fb_03.sputbackc('a');
- strmsz_2 = fb_03.in_avail();
- c3 = fb_03.sgetc();
- VERIFY( c3 == c2 );
- VERIFY( strmsz_1 + 1 == strmsz_2 );
- //test for ios_base::out
- c1 = fb_02.sgetc(); // undefined
- c2 = fb_02.sputbackc('a');
- VERIFY( c1 == c2 );
- VERIFY( c1 == -1 );
-
- // int_type sungetc()
- // if in_cur not avail, return pbackfail(), else decrement and
- // return to_int_type(*gptr())
- // fb_03._M_out_beg = "uvaacadabras, i wannaZ[\\]^_`abcdefghijkl"
- // fb_03._M_out_cur = "aacadabras, i wannaZ[\\]^_`abcdefghijkl"
- strmsz_1 = fb_03.in_avail();
- c2 = fb_03.sungetc(); // delete the 'a'
- strmsz_2 = fb_03.in_avail();
- VERIFY( c2 == 'v' ); // VERIFY( c2 != traits_type::eof() );
- VERIFY( strmsz_1 + 1 == strmsz_2 );
- //test for _in_cur == _in_beg
- for (int i = 50; i < 32 + 29; ++i)
- fb_02.sputc(char(i));
- fb_02.pubseekoff(0, std::ios_base::beg, std::ios_base::out);
- c1 = fb_02.sgetc();
- strmsz_1 = fb_02.in_avail();
- c2 = fb_02.sungetc();
- c3 = fb_02.sgetc();
- strmsz_2 = fb_02.in_avail();
- VERIFY( c1 == c2 );
- VERIFY( c2 == c3 );
- VERIFY( c1 == traits_type::eof() );
- VERIFY( strmsz_1 == strmsz_2 );
- //test for _in_cur == _in_end
- fb_03.pubseekoff(0, std::ios_base::end);
- strmsz_1 = fb_03.in_avail(); // -1 cuz at the end
- c1 = fb_03.sgetc();
- c2 = fb_03.sungetc();
- strmsz_2 = fb_03.in_avail(); // 1
- c3 = fb_03.sgetc();
- VERIFY( c1 != c2 );
- // VERIFY( c2 == c3 || c2 == traits_type::not_eof(int(c3)) );
- VERIFY( strmsz_2 != strmsz_1 );
- VERIFY( strmsz_2 == 1 );
- //test for ios_base::out
-
- // BUFFER MANAGEMENT & POSITIONING
- // int sync()
- // if a put area exists, overflow.
- // if a get area exists, do something undefined. (like, nothing)
- strmsz_1 = fb_01.in_avail();
- fb_01.pubsync();
- strmsz_2 = fb_01.in_avail();
- VERIFY( strmsz_2 == strmsz_1 );
- strmsz_1 = fb_02.in_avail();
- fb_02.pubsync();
- // 27filebuf-2.txt == 53 bytes after this.
- strmsz_2 = fb_02.in_avail();
- VERIFY( strmsz_2 == -1 );
- VERIFY( strmsz_2 == strmsz_1 );
- strmsz_1 = fb_03.in_avail();
- fb_03.pubsync();
- // 27filebuf-3.txt
- // bd23456789mzuva?@ABCDEFGHIJKLMNOPQRSTUVWXYZracadabras, i wannaz
- // 63 bytes.
- strmsz_2 = fb_03.in_avail();
- VERIFY( strmsz_1 == 1 );
- // VERIFY( strmsz_2 == 1 );
-
- // setbuf
- // pubsetbuf(char_type* s, streamsize n)
- fb_01.pubsetbuf(0,0);
- fb_02.pubsetbuf(0,0);
- fb_03.pubsetbuf(0,0);
- // Need to test unbuffered output, which means calling this on some
- // things that have just been opened.
-
-
- // seekoff
- // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
- // alters the stream position to off
- pos_type pt_1(off_type(-1));
- pos_type pt_2(off_type(0));
- off_type off_1 = 0;
- off_type off_2 = 0;
- //IN|OUT
- // 27filebuf-3.txt = bd23456789:;<=>?...
- //beg
- strmsz_1 = fb_03.in_avail();
- pt_1 = fb_03.pubseekoff(2, std::ios_base::beg);
- strmsz_2 = fb_03.in_avail();
- off_1 = pt_1;
- VERIFY( off_1 > 0 );
- c1 = fb_03.snextc(); //current in pointer +1
- VERIFY( c1 == '3' );
- c2 = fb_03.sputc('\n'); //current in pointer +1
- c3 = fb_03.sgetc();
- VERIFY( c2 != c3 );
- VERIFY( c3 == '4' );
- fb_03.pubsync();
- c1 = fb_03.sgetc();
- VERIFY( c1 == c3 );
- //cur
- // 27filebuf-3.txt = bd2\n456789:;<=>?...
- pt_2 = fb_03.pubseekoff(2, std::ios_base::cur);
- off_2 = pt_2;
- VERIFY( (off_2 == (off_1 + 2 + 1 + 1)) );
- c1 = fb_03.snextc(); //current in pointer +1
- VERIFY( c1 == '7' );
- c2 = fb_03.sputc('x'); //test current out pointer
- c3 = fb_03.sputc('\n');
- c1 = fb_03.sgetc();
- fb_03.pubsync();
- c3 = fb_03.sgetc();
- VERIFY( c1 == c3 );
- //end
- // 27filebuf-3.txt = "bd2\n456x\n9"
- pt_2 = fb_03.pubseekoff(0, std::ios_base::end,
- std::ios_base::in|std::ios_base::out);
- off_1 = pt_2;
- VERIFY( off_1 > off_2 ); //weak, but don't know exactly where it ends
- c3 = fb_03.sputc('\n');
- strmsz_1 = fb_03.sputn("because because because. . .", 28);
- VERIFY( strmsz_1 == 28 );
- c1 = fb_03.sungetc();
- // Defect? retval of sungetc is not necessarily the character ungotten.
- // So re-get it.
- c1 = fb_03.sgetc();
- fb_03.pubsync();
- c3 = fb_03.sgetc();
- VERIFY( c1 == c3 );
- // IN
- // OUT
-
-
- // seekpos
- // pubseekpos(pos_type sp, ios_base::openmode)
- // alters the stream position to sp
- //IN|OUT
- //beg
- pt_1 = fb_03.pubseekoff(78, std::ios_base::beg);
- off_1 = pt_1;
- VERIFY( off_1 > 0 );
- c1 = fb_03.snextc(); //current in pointer +1
- VERIFY( c1 == ' ' );
- c2 = fb_03.sputc('\n'); //test current out pointer
- c3 = fb_03.sgetc();
- fb_03.pubsync(); //resets pointers
- pt_2 = fb_03.pubseekpos(pt_1);
- off_2 = pt_2;
- VERIFY( off_1 == off_2 );
- c3 = fb_03.snextc(); //current in pointer +1
- VERIFY( c2 == c3 );
- pt_1 = fb_03.pubseekoff(0, std::ios_base::end);
- off_1 = pt_1;
- VERIFY( off_1 > off_2 );
- fb_03.sputn("\nof the wonderful things he does!!\nok", 37);
- fb_03.pubsync();
-
- // IN
- // OUT
-
- // VIRTUALS (indirectly tested)
- // underflow
- // if read position avail, returns *gptr()
-
- // pbackfail(int_type c)
- // put c back into input sequence
-
- // overflow
- // appends c to output seq
-
- // NB Have to close these suckers. . .
- // filebuf_type* close()
- fb_01.close();
- fb_02.close();
- fb_03.close();
- VERIFY( !fb_01.is_open() );
- VERIFY( !fb_02.is_open() );
- VERIFY( !fb_03.is_open() );
-}
-
-void test06()
-{
- using namespace std;
- typedef istream::int_type int_type;
-
- bool test = true;
- ifstream ifs(name_02);
- char buffer[] = "xxxxxxxxxx";
- int_type len1 = ifs.rdbuf()->sgetn(buffer, sizeof(buffer));
- VERIFY( len1 == sizeof(buffer) );
- VERIFY( buffer[0] == 'a' );
-}
-
-// libstdc++/9322
-void test07()
-{
- using std::locale;
- bool test = true;
-
- locale loc;
- std::filebuf ob;
- VERIFY( ob.getloc() == loc );
-
- locale::global(locale("en_US"));
- VERIFY( ob.getloc() == loc );
-
- locale loc_de ("de_DE");
- locale ret = ob.pubimbue(loc_de);
- VERIFY( ob.getloc() == loc_de );
- VERIFY( ret == loc );
-
- locale::global(loc);
- VERIFY( ob.getloc() == loc_de );
-}
-
-class MyTraits : public std::char_traits<char>
-{
-public:
- static bool eq(char c1, char c2)
- {
- bool test = true;
- VERIFY( c1 != 'X' );
- VERIFY( c2 != 'X' );
- return std::char_traits<char>::eq(c1, c2);
- }
-};
-
-class MyBuf : public std::basic_streambuf<char, MyTraits>
-{
- char buffer[8];
-
-public:
- MyBuf()
- {
- std::memset(buffer, 'X', sizeof(buffer));
- std::memset(buffer + 2, 'f', 4);
- setg(buffer + 2, buffer + 2, buffer + 6);
- }
-};
-
-// libstdc++/9538
-void test08()
-{
- bool test = true;
-
- MyBuf mb;
- mb.sputbackc('a');
-}
-
-// libstdc++/9439, libstdc++/9425
-void test09()
-{
- using namespace std;
- bool test = true;
-
- filebuf fbuf;
- fbuf.open(name_01, ios_base::in);
- filebuf::int_type r = fbuf.sputbackc('a');
- fbuf.close();
-
- VERIFY( r == filebuf::traits_type::eof() );
-}
-
-class Cvt_to_upper : public std::codecvt<char, char, mbstate_t>
-{
- bool do_always_noconv() const throw()
- {
- return false;
- }
-};
-
-// libstdc++/9169
-void test10()
-{
- using namespace std;
- bool test = true;
-
- locale c_loc;
- locale loc(c_loc, new Cvt_to_upper);
-
- string str("abcdefghijklmnopqrstuvwxyz");
- string tmp;
-
- {
- ofstream out;
- out.imbue(loc);
- out.open(name_04);
- copy(str.begin(), str.end(),
- ostreambuf_iterator<char>(out));
- }
-
- {
- ifstream in;
- in.open(name_04);
- copy(istreambuf_iterator<char>(in),
- istreambuf_iterator<char>(),
- back_inserter(tmp));
- }
-
- VERIFY( tmp.size() == str.size() );
- VERIFY( tmp == str );
-}
-
-bool over_called;
-
-class Derived_filebuf : public std::filebuf
-{
-public:
- int_type overflow(int_type c)
- {
- over_called = true;
- return std::filebuf::overflow(c);
- }
-
- const char_type* pub_epptr() const
- {
- return epptr();
- }
-
- const char_type* pub_pptr() const
- {
- return pptr();
- }
-};
-
-// libstdc++/9701 (partial)
-void test11()
-{
- bool test = true;
-
- bool over_expected;
-
- // sputc
- Derived_filebuf dfbuf_01;
- dfbuf_01.open(name_05, std::ios_base::out);
- over_called = false;
- dfbuf_01.sputc('i');
- VERIFY( !over_called );
- over_expected = dfbuf_01.pub_epptr() == dfbuf_01.pub_pptr();
- over_called = false;
- dfbuf_01.sputc('v');
- VERIFY( (!over_expected && !over_called)
- || (over_expected && over_called) );
- dfbuf_01.close();
-
- // sputn
- Derived_filebuf dfbuf_02;
- dfbuf_02.open(name_05, std::ios_base::out);
- over_called = false;
- dfbuf_02.sputn("sonne's", 7);
- VERIFY( !over_called );
- over_expected = dfbuf_02.pub_epptr() == dfbuf_02.pub_pptr();
- over_called = false;
- dfbuf_02.sputn(" peak", 5);
- VERIFY( (!over_expected && !over_called)
- || (over_expected && over_called) );
- dfbuf_02.close();
-}
-
-// libstdc++/9825
-void test12()
-{
- using namespace std;
- bool test = true;
-
- filebuf fbuf;
-
- fbuf.open(name_06, ios_base::in|ios_base::out|ios_base::trunc);
- fbuf.sputn("crazy bees!", 11);
- fbuf.pubseekoff(0, ios_base::beg);
- fbuf.sbumpc();
- fbuf.sputbackc('x');
- filebuf::int_type c = fbuf.sbumpc();
- VERIFY( c == 'x' );
- c = fbuf.sbumpc();
- VERIFY( c == 'r' );
- c = fbuf.sbumpc();
- VERIFY( c == 'a' );
- fbuf.close();
-}
-
-class errorcvt : public std::codecvt<char, char, mbstate_t>
-{
-protected:
- std::codecvt_base::result
- do_out(mbstate_t&, const char* from, const char*,
- const char*& from_next, char* to, char*,
- char*& to_next) const
- {
- from_next = from;
- to_next = to;
- return std::codecvt<char, char, mbstate_t>::error;
- }
-
- virtual bool do_always_noconv() const throw()
- {
- return false;
- }
-};
-
-// libstdc++/9182
-void test13()
-{
- using namespace std;
- bool test = true;
-
- locale loc;
- loc = locale(loc, new errorcvt);
-
- filebuf fbuf1;
- fbuf1.pubimbue(loc);
- fbuf1.open(name_07, ios_base::out | ios_base::trunc);
- fbuf1.sputn("ison", 4);
- int r = fbuf1.pubsync();
- VERIFY( r == -1 );
- fbuf1.close();
-}
-
-void test14()
-{
- using namespace std;
- bool test = true;
-
- locale loc;
- loc = locale(loc, new errorcvt);
-
- filebuf fbuf1;
- fbuf1.pubimbue(loc);
- fbuf1.pubsetbuf(0, 0);
- fbuf1.open(name_07, ios_base::out | ios_base::trunc);
- streamsize n = fbuf1.sputn("onne", 4);
- VERIFY( n == 0 );
- fbuf1.close();
-}
-
-
-class OverBuf : public std::filebuf
-{
-public:
- int_type pub_overflow(int_type c = traits_type::eof())
- { return std::filebuf::overflow(c); }
-};
-
-// libstdc++/9988
-void test15()
-{
- using namespace std;
- bool test = true;
-
- OverBuf fb;
- fb.open(name_08, ios_base::out | ios_base::trunc);
-
- fb.sputc('a');
- fb.pub_overflow('b');
- fb.pub_overflow();
- fb.sputc('c');
- fb.close();
-
- filebuf fbin;
- fbin.open(name_08, ios_base::in);
- filebuf::int_type c;
- c = fbin.sbumpc();
- VERIFY( c == 'a' );
- c = fbin.sbumpc();
- VERIFY( c == 'b' );
- c = fbin.sbumpc();
- VERIFY( c == 'c' );
- c = fbin.sbumpc();
- VERIFY( c == filebuf::traits_type::eof() );
- fbin.close();
-}
-
-class UnderBuf : public std::filebuf
-{
-public:
- int_type
- pub_underflow()
- { return underflow(); }
-
- std::streamsize
- pub_showmanyc()
- { return showmanyc(); }
-};
-
-// libstdc++/10097
-void test16()
-{
- using namespace std;
- bool test = true;
-
- const char* name = "tmp_fifo1";
-
- signal(SIGPIPE, SIG_IGN);
- unlink(name);
-
- if (0 != mkfifo(name, S_IRWXU))
- {
- VERIFY( false );
- }
-
- int fval = fork();
- if (fval == -1)
- {
- unlink(name);
- VERIFY( false );
- }
- else if (fval == 0)
- {
- filebuf fbout;
- fbout.open(name, ios_base::out);
- fbout.sputn("0123456789", 10);
- fbout.pubsync();
- sleep(2);
- fbout.close();
- exit(0);
- }
-
- UnderBuf fb;
- fb.open(name, ios_base::in);
- sleep(1);
-
- fb.sgetc();
- streamsize n = fb.pub_showmanyc();
-
- while (n > 0)
- {
- --n;
-
- UnderBuf::int_type c = fb.pub_underflow();
- VERIFY( c != UnderBuf::traits_type::eof() );
-
- fb.sbumpc();
- }
-
- fb.close();
-}
-
-main()
-{
- test01();
- test02();
-
- test03();
- test04();
- test05();
- test06();
-
- __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test07);
- test08();
- test09();
- test10();
- test11();
- test12();
- test13();
- test14();
- test15();
- test16();
- return 0;
-}
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.3 template class fpos
+
+#include <cwchar> // for mbstate_t
+#include <ios>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ bool test = true;
+
+ typedef std::mbstate_t state_type;
+ state_type state01;
+ state_type state02;
+
+ std::streampos pos01;
+ std::streampos pos02;
+
+ std::streamoff off01;
+ std::streamoff off02;
+
+ std::streamsize size01;
+ std::streamsize size02;
+
+ // 27.4.3.1 fpos members
+ // void state(state_type s);
+ // state_type state();
+#if 0
+// XXX Need to have some sanity checking for the mbstate_t type, or
+// whatever the insantiating type for class fpos happens to be for
+// streampos, as things like equality operators and assignment
+// operators, increment and deincrement operators need to be in place.
+ pos01.state(state02);
+ state01 = pos01.state();
+ VERIFY( state01 == state02 );
+#endif
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
// 1999-09-20 bkoz
-// Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <ios>
#include <testsuite_hooks.h>
-void test01()
-{
- bool test = true;
-
- typedef std::mbstate_t state_type;
- state_type state01;
- state_type state02;
-
- std::streampos pos01;
- std::streampos pos02;
-
- std::streamoff off01;
- std::streamoff off02;
-
- std::streamsize size01;
- std::streamsize size02;
-
- // 27.4.3.1 fpos members
- // void state(state_type s);
- // state_type state();
-#if 0
-// XXX Need to have some sanity checking for the mbstate_t type, or
-// whatever the insantiating type for class fpos happens to be for
-// streampos, as things like equality operators and assignment
-// operators, increment and deincrement operators need to be in place.
- pos01.state(state02);
- state01 = pos01.state();
- VERIFY( state01 == state02 );
-#endif
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
// 27.4.3.2 fpos requirements/invariants
void test02()
{
std::streamsize size01(off02);
std::streamoff off04(size01);
VERIFY( off01 == off04 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
}
-void test03()
+int main()
{
- bool test = true;
-
- typedef std::mbstate_t state_type;
- state_type state01;
- state_type state02;
-
- std::streamoff off01;
- std::streamoff off02 = 997;
-
- int i01 = 0;
- int i02 = 999;
-
- // casts to const streamoff
- // (yes, I know this is weak code)
- const std::streampos pos01 = 0;
- off01 = pos01;
-
- // equality/inequality with const args
- const std::streampos pos02(54);
- std::streampos pos03(44);
- VERIFY( !(pos03 == pos02) );
- VERIFY( pos03 != pos02 );
- VERIFY( !(pos02 == pos03) );
- VERIFY( pos02 != pos03 );
-
- // default values
- std::streampos pos04;
- VERIFY( (std::streamoff)pos04 == 0 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-int main() {
- test01();
test02();
- test03();
return 0;
}
--- /dev/null
+// 1999-09-20 bkoz
+
+// Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// 27.4.3 template class fpos
+
+#include <cwchar> // for mbstate_t
+#include <ios>
+#include <testsuite_hooks.h>
+
+void test03()
+{
+ bool test = true;
+
+ typedef std::mbstate_t state_type;
+ state_type state01;
+ state_type state02;
+
+ std::streamoff off01;
+ std::streamoff off02 = 997;
+
+ int i01 = 0;
+ int i02 = 999;
+
+ // casts to const streamoff
+ // (yes, I know this is weak code)
+ const std::streampos pos01 = 0;
+ off01 = pos01;
+
+ // equality/inequality with const args
+ const std::streampos pos02(54);
+ std::streampos pos03(44);
+ VERIFY( !(pos03 == pos02) );
+ VERIFY( pos03 != pos02 );
+ VERIFY( !(pos02 == pos03) );
+ VERIFY( pos02 != pos03 );
+
+ // default values
+ std::streampos pos04;
+ VERIFY( std::streamoff(pos04) == 0 );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
// 1999-11-10 bkoz
-// Copyright (C) 1999 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
callb03(std::ios_base::event e, std::ios_base& b, int i)
{ str02 += "plutonia"; }
-bool test01()
+void test01()
{
bool test = true;
std::locale loc("C");
ios01.register_callback(callb01, 1);
ios01.imbue(loc);
VERIFY( str01 == str02 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
}
int main(void)
{
test01();
-
return 0;
}
--- /dev/null
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <sstream>
+#include <locale>
+#include <testsuite_hooks.h>
+
+void
+test02()
+{
+ bool test = true;
+ const std::string strue("true");
+ const std::string sfalse("false");
+ std::string str01;
+ std::string str02;
+
+ std::locale loc("");
+ std::ostringstream ostr01;
+ ostr01.imbue(loc);
+ std::ios_base::fmtflags ff = ostr01.flags(std::ios_base::boolalpha);
+
+ ostr01 << true;
+ str02 = ostr01.str();
+ VERIFY( str02 == strue );
+
+ ostr01.str(str01);
+ ostr01 << false;
+ str02 = ostr01.str();
+ VERIFY( str02 == sfalse );
+}
+
+int
+main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 2000-12-19 bkoz
+
+// Copyright (C) 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.4.2.5 ios_base storage functions
+
+// XXX This test will not work for some versions of irix6 because of
+// XXX bug(s) in libc malloc for very large allocations. However
+// XXX -lmalloc seems to work.
+// See http://gcc.gnu.org/ml/gcc/2002-05/msg01012.html
+// { dg-options "-lmalloc" { target mips*-*-irix6* } }
+
+#include <sstream>
+#include <iostream>
+#include <testsuite_hooks.h>
+
+// http://gcc.gnu.org/ml/gcc-bugs/2000-12/msg00413.html
+void test01()
+{
+ bool test = true;
+
+ using namespace std;
+
+ long x1 = ios::xalloc();
+ long x2 = ios::xalloc();
+ long x3 = ios::xalloc();
+ long x4 = ios::xalloc();
+
+ ostringstream out("the element of crime, lars von trier");
+ out.pword(++x4); // should not crash
+}
+
+int main(void)
+{
+ __gnu_cxx_test::set_memory_limits();
+ test01();
+ return 0;
+}
#include <sstream>
#include <iostream>
-
#include <testsuite_hooks.h>
-// http://gcc.gnu.org/ml/gcc-bugs/2000-12/msg00413.html
-void test01()
-{
- bool test = true;
-
- using namespace std;
-
- long x1 = ios::xalloc();
- long x2 = ios::xalloc();
- long x3 = ios::xalloc();
- long x4 = ios::xalloc();
-
- ostringstream out("the element of crime, lars von trier");
- out.pword(++x4); // should not crash
-}
-
// libstdc++/3129
void test02()
{
}
-class derived : public std::ios_base
-{
-public:
- derived() {}
-};
-
-void test03()
-{
- derived d;
-
- d.pword(0) = &d;
- d.iword(0) = 1;
-}
-
int main(void)
{
__gnu_cxx_test::set_memory_limits();
- test01();
test02();
- test03();
return 0;
}
--- /dev/null
+// 2000-12-19 bkoz
+
+// Copyright (C) 2000, 2002, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.4.2.5 ios_base storage functions
+
+// XXX This test will not work for some versions of irix6 because of
+// XXX bug(s) in libc malloc for very large allocations. However
+// XXX -lmalloc seems to work.
+// See http://gcc.gnu.org/ml/gcc/2002-05/msg01012.html
+// { dg-options "-lmalloc" { target mips*-*-irix6* } }
+
+#include <sstream>
+#include <iostream>
+#include <testsuite_hooks.h>
+
+class derived : public std::ios_base
+{
+public:
+ derived() {}
+};
+
+void test03()
+{
+ derived d;
+
+ d.pword(0) = &d;
+ d.iword(0) = 1;
+}
+
+int main(void)
+{
+ __gnu_cxx_test::set_memory_limits();
+ test03();
+ return 0;
+}
--- /dev/null
+// 1999-05-21 bkoz
+// 2000-05-21 Benjamin Kosnik <bkoz@redhat.com>
+// 2001-01-17 Loren J. Rittle <ljrittle@acm.org>
+
+// Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.4.2.4 ios_base static members
+// @require@ %-*.tst
+// @diff@ %-*.tst %-*.txt
+
+#include <cstdio>
+#include <sstream>
+#include <iostream>
+#include <testsuite_hooks.h>
+
+// N.B. Once we have called sync_with_stdio(false), we can never go back.
+
+void
+test01()
+{
+ std::ios_base::sync_with_stdio();
+ std::freopen("ios_base_members_static-1.txt", "w", stdout);
+
+ for (int i = 0; i < 2; i++)
+ {
+ std::printf("1");
+ std::cout << "2";
+ std::putc('3', stdout);
+ std::cout << '4';
+ std::fputs("5", stdout);
+ std::cout << 6;
+ std::putchar('7');
+ std::cout << 8 << '9';
+ std::printf("0\n");
+ }
+}
+
+int main(void)
+{
+ test01();
+ return 0;
+}
// 2000-05-21 Benjamin Kosnik <bkoz@redhat.com>
// 2001-01-17 Loren J. Rittle <ljrittle@acm.org>
-// Copyright (C) 1999, 2000, 2001 Free Software Foundation
+// Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <cstdio>
#include <sstream>
#include <iostream>
-
#include <testsuite_hooks.h>
// N.B. Once we have called sync_with_stdio(false), we can never go back.
-void
-test01()
-{
- std::ios_base::sync_with_stdio();
- std::freopen("ios_base_members_static-1.txt", "w", stdout);
-
- for (int i = 0; i < 2; i++)
- {
- std::printf("1");
- std::cout << "2";
- std::putc('3', stdout);
- std::cout << '4';
- std::fputs("5", stdout);
- std::cout << 6;
- std::putchar('7');
- std::cout << 8 << '9';
- std::printf("0\n");
- }
-}
-
-bool test02()
+void test02()
{
bool test = true;
VERIFY( std::cout.good() );
VERIFY( !std::cout.sync_with_stdio(0) );
VERIFY( std::cout.good() );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
}
int main(void)
{
- test01();
test02();
return 0;
}
+++ /dev/null
-// 1999-09-20 bkoz
-
-// Copyright (C) 1999, 2003 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// 27.4.4.2 basic_ios member functions
-
-#include <ios>
-// NB: Don't include any other headers in this file.
-#include <testsuite_hooks.h>
-
-void test01()
-{
- bool test = true;
-
- std::ios_base::fmtflags flag02, flag03;
- const std::ios_base::fmtflags flag01 = std::ios_base::skipws
- | std::ios_base::dec;
-
- const std::locale c_loc = std::locale::classic();
-
- std::ios ios_01(NULL);
- std::ios::char_type ct01;
- std::ios::char_type ct02('x');;
-
- // 27.4.2.3 locales
- ios_01.imbue(c_loc);
-
- // char narrow(char_type c, char dfault) const;
- char c1 = ios_01.narrow(ct02, 0);
- VERIFY( c1 == 'x' );
-
- // char_type widen(char c) const;
- ct01 = ios_01.widen('c');
- VERIFY( ct01 == 'c' );
-}
-
-// 27.4.4.3 basic_ios iostate flags function
-void test02()
-{
- bool test = true;
-
- typedef std::ios_base::fmtflags fmtflags;
- typedef std::ios_base::iostate iostate;
- using std::ios_base;
-
- iostate iostate02, iostate03;
- const iostate iostate01 = std::ios_base::badbit | std::ios_base::eofbit;
- const iostate iostate04 = std::ios_base::badbit;
-
- std::ios ios_01(NULL);
- std::ios::char_type ct01;
- std::ios::char_type ct02('x');;
-
- // bool fail() const
- VERIFY( ios_01.fail() );
-
- // bool operator!() const
- VERIFY( !ios_01 );
-
- // iostate rdstate() const
- iostate03 = ios_01.rdstate();
- VERIFY( static_cast<bool>(iostate03 & std::ios_base::badbit) );
-
- // void clear(iostate state = goodbit)
- try {
- ios_01.clear(std::ios_base::eofbit);
- iostate02 = ios_01.rdstate();
- VERIFY( static_cast<bool>(iostate02 & iostate01) );
- }
- catch(std::ios_base::failure& fail) {
- VERIFY( false );
- }
- catch(...) {
- VERIFY( false );
- }
-
- // iostate exceptions() const
- VERIFY( ios_01.exceptions() == std::ios_base::goodbit );
-
- // void exceptions(iostate except)
- try {
- ios_01.exceptions(std::ios_base::eofbit);
- VERIFY( false );
- }
- catch(std::ios_base::failure& fail) {
- iostate02 = ios_01.exceptions();
- VERIFY( static_cast<bool>(iostate02 & std::ios_base::eofbit) );
- }
- catch(...) {
- VERIFY( false );
- }
-
- // basic_ios& copyfmt(const basic_ios& rhs)
- std::ios ios_02(NULL);
- ios_02.exceptions(std::ios_base::eofbit);
- VERIFY( static_cast<bool>(ios_02.exceptions() & std::ios_base::eofbit) );
- try {
- ios_01.copyfmt(ios_02);
- VERIFY( false );
- }
- catch(std::ios_base::failure& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-}
-
-// copyfmt and locales.
-void test03()
-{
- bool test = true;
-
- using namespace std;
-
- typedef std::ios_base::fmtflags fmtflags;
- typedef std::ios_base::iostate iostate;
- locale loc_c = locale::classic();
- locale loc_de("de_DE");
- std::ios ios_01(NULL);
- std::ios ios_02(NULL);
- ios_01.imbue(loc_c);
- ios_02.imbue(loc_de);
- ios_02.setstate(ios_base::badbit);
- VERIFY( loc_c == ios_01.getloc() );
- VERIFY( loc_de == ios_02.getloc() );
-
- iostate ios1 = ios_01.rdstate();
- iostate ios2 = ios_02.rdstate();
- streambuf* sb1 = ios_01.rdbuf();
- streambuf* sb2 = ios_02.rdbuf();
- ios_01.copyfmt(ios_02);
-
- VERIFY( loc_de == ios_01.getloc() );
- VERIFY( ios_01.getloc() == ios_02.getloc() );
- VERIFY( ios1 == ios_01.rdstate() );
- VERIFY( ios2 == ios_02.rdstate() );
- VERIFY( sb1 == ios_01.rdbuf() );
- VERIFY( sb2 == ios_02.rdbuf() );
-}
-
-int main()
-{
- test01();
- test02();
- __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
- return 0;
-}
+++ /dev/null
-// 2000-06-29 bkoz
-
-// Copyright (C) 2000, 2001, 2002 Free Software Foundation
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 27.6.1.3 unformatted input functions
-// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
-// @require@ %-*.tst %-*.txt
-// @diff@ %-*.tst %-*.txt
-
-#include <istream>
-#include <sstream>
-#include <fstream>
-#include <testsuite_hooks.h>
-
-bool test01()
-{
- using namespace std;
- typedef ios::pos_type pos_type;
-
- bool test = true;
- const char str_lit01[] = "istream_seeks-1.tst";
-
- // in
- // test default ctors leave things in the same positions...
- istringstream ist1;
- pos_type p3 = ist1.tellg();
-
- ifstream ifs1;
- pos_type p4 = ifs1.tellg();
-
- VERIFY( p3 == p4 );
-
- // in
- // test ctors leave things in the same positions...
- istringstream ist2("bob_marley:kaya");
- p3 = ist2.tellg();
-
- ifstream ifs2(str_lit01);
- p4 = ifs2.tellg();
-
- VERIFY( p3 == p4 );
- return test;
-}
-
-const char* s = " lootpack, peanut butter wolf, rob swift, madlib, quasimoto";
-const int times = 10;
-
-void write_rewind(std::iostream& stream)
-{
- for (int j = 0; j < times; j++)
- {
- bool test = true;
- std::streampos begin = stream.tellg();
-
- for (int i = 0; i < times; ++i)
- stream << j << '-' << i << s << '\n';
-
- stream.seekg(begin);
- std::streampos end = stream.tellg();
- std::streampos badpos = std::streampos(std::streambuf::off_type(-1));
- }
-}
-
-void check_contents(std::iostream& stream)
-{
- bool test = true;
-
- stream.clear();
- stream.seekg(0, std::ios::beg);
- int i = 0;
- int loop = times * times + 2;
- while (i < loop)
- {
- stream.ignore(80, '\n');
- if (stream.good())
- ++i;
- else
- break;
- }
- VERIFY( i == times );
-}
-
-// fstream
-// libstdc++/2346
-void test02()
-{
- std::fstream ofstrm;
- ofstrm.open("istream_seeks-3.txt", std::ios::out);
- if (!ofstrm)
- std::abort();
- write_rewind(ofstrm);
- ofstrm.close();
-
- std::fstream ifstrm;
- ifstrm.open("istream_seeks-3.txt", std::ios::in);
- check_contents(ifstrm);
- ifstrm.close();
-}
-
-// stringstream
-// libstdc++/2346
-void test03()
-{
- std::stringstream sstrm;
-
- write_rewind(sstrm);
- check_contents(sstrm);
-}
-
-// fstreams
-void test04(void)
-{
- typedef std::istream::off_type off_type;
-
- bool test = true;
- std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
- std::ios_base::iostate state01, state02;
- const char str_lit01[] = "istream_seeks-1.txt";
- const char str_lit02[] = "istream_seeks-2.txt";
- std::ifstream if01(str_lit01, std::ios_base::in | std::ios_base::out);
- std::ifstream if02(str_lit01, std::ios_base::in);
- std::ifstream if03(str_lit02, std::ios_base::out | std::ios_base::trunc);
- VERIFY( if01.good() );
- VERIFY( if02.good() );
- VERIFY( if03.good() );
-
- std::istream is01(if01.rdbuf());
- std::istream is02(if02.rdbuf());
- std::istream is03(if03.rdbuf());
-
- // pos_type tellg()
- // in | out
- pos01 = is01.tellg();
- pos02 = is01.tellg();
- VERIFY( pos01 == pos02 );
- // VERIFY( istream::pos_type(0) != pos01 ); //deprecated
-
- // in
- pos03 = is02.tellg();
- pos04 = is02.tellg();
- VERIFY( pos03 == pos04 );
- // VERIFY( istream::pos_type(0) != pos03 ); //deprecated
-
- // out
- pos05 = is03.tellg();
- pos06 = is03.tellg();
- VERIFY( pos05 == pos06 );
- // VERIFY( istream::pos_type(0) != pos01 ); //deprecated
-
- // istream& seekg(pos_type)
- // istream& seekg(off_type, ios_base::seekdir)
-
- // cur
- // NB: see library issues list 136. It's the v-3 interp that seekg
- // only sets the input buffer, or else istreams with buffers that
- // have _M_mode == ios_base::out will fail to have consistency
- // between seekg and tellg.
- state01 = is01.rdstate();
- is01.seekg(10, std::ios_base::cur);
- state02 = is01.rdstate();
- pos01 = is01.tellg();
- VERIFY( pos01 == pos02 + off_type(10) );
- VERIFY( state01 == state02 );
- pos02 = is01.tellg();
- VERIFY( pos02 == pos01 );
-
- state01 = is02.rdstate();
- is02.seekg(10, std::ios_base::cur);
- state02 = is02.rdstate();
- pos03 = is02.tellg();
- VERIFY( pos03 == pos04 + off_type(10) );
- VERIFY( state01 == state02 );
- pos04 = is02.tellg();
- VERIFY( pos03 == pos04 );
-
- state01 = is03.rdstate();
- is03.seekg(10, std::ios_base::cur);
- state02 = is03.rdstate();
- pos05 = is03.tellg();
- VERIFY( pos05 == pos06 + off_type(10) );
- VERIFY( state01 == state02 );
- pos06 = is03.tellg();
- VERIFY( pos05 == pos06 );
-
- // beg
- state01 = is01.rdstate();
- is01.seekg(20, std::ios_base::beg);
- state02 = is01.rdstate();
- pos01 = is01.tellg();
- VERIFY( pos01 == pos02 + off_type(10) );
- VERIFY( state01 == state02 );
- pos02 = is01.tellg();
- VERIFY( pos02 == pos01 );
-
- state01 = is02.rdstate();
- is02.seekg(20, std::ios_base::beg);
- state02 = is02.rdstate();
- pos03 = is02.tellg();
- VERIFY( pos03 == pos04 + off_type(10) );
- VERIFY( state01 == state02 );
- pos04 = is02.tellg();
- VERIFY( pos03 == pos04 );
-
- state01 = is03.rdstate();
- is03.seekg(20, std::ios_base::beg);
- state02 = is03.rdstate();
- pos05 = is03.tellg();
- VERIFY( pos05 == pos06 + off_type(10) );
- VERIFY( state01 == state02 );
- pos06 = is03.tellg();
- VERIFY( pos05 == pos06 );
-
- // libstdc++/6414
- if01.seekg(0, std::ios_base::beg);
- pos01 = if01.tellg();
- if01.peek();
- pos02 = if01.tellg();
- VERIFY( pos02 == pos01 );
-}
-
-// stringstreams
-void test05(void)
-{
- typedef std::istream::off_type off_type;
-
- bool test = true;
- std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
- std::ios_base::iostate state01, state02;
- const char str_lit01[] = "istream_seeks-1.tst";
- std::ifstream if01(str_lit01);
- std::ifstream if02(str_lit01);
- std::ifstream if03(str_lit01);
- VERIFY( if01.good() );
- VERIFY( if02.good() );
- VERIFY( if03.good() );
-
- std::stringbuf strbuf01(std::ios_base::in | std::ios_base::out);
- if01 >> &strbuf01;
- // initialize stringbufs that are ios_base::out
- std::stringbuf strbuf03(strbuf01.str(), std::ios_base::out);
- // initialize stringbufs that are ios_base::in
- std::stringbuf strbuf02(strbuf01.str(), std::ios_base::in);
-
- std::istream is01(&strbuf01);
- std::istream is02(&strbuf02);
- std::istream is03(&strbuf03);
-
- // pos_type tellg()
- // in | out
- pos01 = is01.tellg();
- pos02 = is01.tellg();
- VERIFY( pos01 == pos02 );
- // VERIFY( istream::pos_type(0) != pos01 ); // deprecated
-
- // in
- pos03 = is02.tellg();
- pos04 = is02.tellg();
- VERIFY( pos03 == pos04 );
- // VERIFY( istream::pos_type(0) != pos03 ); // deprecated
-
- // out
- pos05 = is03.tellg();
- pos06 = is03.tellg();
- VERIFY( pos05 == pos06 );
- // VERIFY( istream::pos_type(0) != pos01 ); //deprecated
-
- // istream& seekg(pos_type)
- // istream& seekg(off_type, ios_base::seekdir)
-
- // cur
- // NB: see library issues list 136. It's the v-3 interp that seekg
- // only sets the input buffer, or else istreams with buffers that
- // have _M_mode == ios_base::out will fail to have consistency
- // between seekg and tellg.
- state01 = is01.rdstate();
- is01.seekg(10, std::ios_base::cur);
- state02 = is01.rdstate();
- pos01 = is01.tellg();
- VERIFY( pos01 == pos02 + off_type(10) );
- VERIFY( state01 == state02 );
- pos02 = is01.tellg();
- VERIFY( pos02 == pos01 );
-
- state01 = is02.rdstate();
- is02.seekg(10, std::ios_base::cur);
- state02 = is02.rdstate();
- pos03 = is02.tellg();
- VERIFY( pos03 == pos04 + off_type(10) );
- VERIFY( state01 == state02 );
- pos04 = is02.tellg();
- VERIFY( pos03 == pos04 );
-
- state01 = is03.rdstate();
- is03.seekg(10, std::ios_base::cur);
- state02 = is03.rdstate();
- pos05 = is03.tellg();
- VERIFY( pos05 == pos06 ); // as only out buffer
- VERIFY( state01 != state02 );
- pos06 = is03.tellg();
- VERIFY( pos05 == pos06 );
-
- // beg
- state01 = is01.rdstate();
- is01.seekg(20, std::ios_base::beg);
- state02 = is01.rdstate();
- pos01 = is01.tellg();
- VERIFY( pos01 == pos02 + off_type(10) );
- VERIFY( state01 == state02 );
- pos02 = is01.tellg();
- VERIFY( pos02 == pos01 );
-
- state01 = is02.rdstate();
- is02.seekg(20, std::ios_base::beg);
- state02 = is02.rdstate();
- pos03 = is02.tellg();
- VERIFY( pos03 == pos04 + off_type(10) );
- VERIFY( state01 == state02 );
- pos04 = is02.tellg();
- VERIFY( pos03 == pos04 );
-
- state01 = is03.rdstate();
- is03.seekg(20, std::ios_base::beg);
- state02 = is03.rdstate();
- pos05 = is03.tellg();
- VERIFY( pos05 == pos06 ); // as only out buffer
- VERIFY( state01 == state02 );
- pos06 = is03.tellg();
- VERIFY( pos05 == pos06 );
-}
-
-// libstdc++/8348
-void test06(void)
-{
- using namespace std;
- bool test = true;
- string num1("555");
-
- // tellg
- {
- istringstream iss(num1);
- istream::pos_type pos1 = iss.tellg();
- int asNum = 0;
- iss >> asNum;
- VERIFY( test = iss.eof() );
- VERIFY( test = !iss.fail() );
- iss.tellg();
- VERIFY( test = !iss.fail() );
- }
-
- // seekg
- {
- istringstream iss(num1);
- istream::pos_type pos1 = iss.tellg();
- int asNum = 0;
- iss >> asNum;
- VERIFY( test = iss.eof() );
- VERIFY( test = !iss.fail() );
- iss.seekg(0, ios_base::beg);
- VERIFY( test = !iss.fail() );
- }
-
- // seekg
- {
- istringstream iss(num1);
- istream::pos_type pos1 = iss.tellg();
- int asNum = 0;
- iss >> asNum;
- VERIFY( test = iss.eof() );
- VERIFY( test = !iss.fail() );
- iss.seekg(pos1);
- VERIFY( test = !iss.fail() );
- }
-}
-
-int main()
-{
- test01();
-
- test02();
- test03();
-
- test04();
- test05();
-
- test06();
- return 0;
-}
-
-
+++ /dev/null
-// 1999-08-11 bkoz
-
-// Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 27.6.1.3 unformatted input functions
-// @require@ %-*.tst %-*.txt
-// @diff@ %-*.tst %-*.txt
-
-#include <cstring> // for strncmp,...
-#include <istream>
-#include <sstream>
-#include <fstream>
-#include <testsuite_hooks.h>
-
-int
-test01()
-{
- typedef std::ios::traits_type traits_type;
-
- bool test = true;
- const std::string str_01;
- const std::string str_02("soul eyes: john coltrane quartet");
- std::string strtmp;
-
- std::stringbuf isbuf_03(str_02, std::ios_base::in);
- std::stringbuf isbuf_04(str_02, std::ios_base::in);
-
- std::istream is_00(NULL);
- std::istream is_03(&isbuf_03);
- std::istream is_04(&isbuf_04);
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
-
- // istream& read(char_type* s, streamsize n)
- char carray[60] = "";
- state1 = is_04.rdstate();
- is_04.read(carray, 0);
- state2 = is_04.rdstate();
- VERIFY( state1 == state2 );
-
- state1 = is_04.rdstate();
- is_04.read(carray, 9);
- state2 = is_04.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( !std::strncmp(carray, "soul eyes", 9) );
- VERIFY( is_04.peek() == ':' );
-
- state1 = is_03.rdstate();
- is_03.read(carray, 60);
- state2 = is_03.rdstate();
- VERIFY( state1 != state2 );
- VERIFY( static_cast<bool>(state2 & stateeof) );
- VERIFY( static_cast<bool>(state2 & statefail) );
- VERIFY( !std::strncmp(carray, "soul eyes: john coltrane quartet", 35) );
-
-
- // istream& ignore(streamsize n = 1, int_type delim = traits::eof())
- state1 = is_04.rdstate();
- is_04.ignore();
- VERIFY( is_04.gcount() == 1 );
- state2 = is_04.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( is_04.peek() == ' ' );
-
- state1 = is_04.rdstate();
- is_04.ignore(0);
- VERIFY( is_04.gcount() == 0 );
- state2 = is_04.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( is_04.peek() == ' ' );
-
- state1 = is_04.rdstate();
- is_04.ignore(5, traits_type::to_int_type(' '));
- VERIFY( is_04.gcount() == 1 );
- state2 = is_04.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( is_04.peek() == 'j' );
-
- // int_type peek()
- state1 = is_04.rdstate();
- VERIFY( is_04.peek() == 'j' );
- VERIFY( is_04.gcount() == 0 );
- state2 = is_04.rdstate();
- VERIFY( state1 == state2 );
-
- is_04.ignore(30);
- state1 = is_04.rdstate();
- VERIFY( is_04.peek() == traits_type::eof() );
- VERIFY( is_04.gcount() == 0 );
- state2 = is_04.rdstate();
- VERIFY( state1 != state2 );
-
-
- // istream& putback(char c)
- is_04.clear();
- state1 = is_04.rdstate();
- is_04.putback('|');
- VERIFY( is_04.gcount() == 0 );
- state2 = is_04.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( is_04.peek() == '|' );
-
- // istream& unget()
- is_04.clear();
- state1 = is_04.rdstate();
- is_04.unget();
- VERIFY( is_04.gcount() == 0 );
- state2 = is_04.rdstate();
- VERIFY( state1 == state2 );
- VERIFY( is_04.peek() == 'e' );
-
- // int sync()
- int i = is_00.sync();
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return 0;
-}
-
-int
-test02()
-{
- typedef std::char_traits<char> traits_type;
-
- bool test = true;
- const char str_lit01[] = "\t\t\t sun*ra \n"
- " "
- "and his myth science arkestra present\n"
- " "
- "angles and demons @ play\n"
- " "
- "the nubians of plutonia";
- std::string str01(str_lit01);
- std::string strtmp;
-
- std::stringbuf sbuf_04(str01, std::ios_base::in);
-
- std::istream is_00(NULL);
- std::istream is_04(&sbuf_04);
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
- std::streamsize count1, count2;
- char carray1[400] = "";
-
- // istream& getline(char* s, streamsize n, char delim)
- // istream& getline(char* s, streamsize n)
- state1 = is_00.rdstate();
- is_00.getline(carray1, 20, '*');
- state2 = is_00.rdstate();
- // make sure failbit was set, since we couldn't extract
- // from the NULL streambuf...
- VERIFY( state1 != state2 );
- VERIFY( static_cast<bool>(state2 & statefail) );
-
- VERIFY( is_04.gcount() == 0 );
- state1 = is_04.rdstate();
- is_04.getline(carray1, 1, '\t'); // extracts, throws away
- state2 = is_04.rdstate();
- VERIFY( is_04.gcount() == 1 );
- VERIFY( state1 == state2 );
- VERIFY( state1 == 0 );
- VERIFY( !traits_type::compare("", carray1, 1) );
-
- state1 = is_04.rdstate();
- is_04.getline(carray1, 20, '*');
- state2 = is_04.rdstate();
- VERIFY( is_04.gcount() == 10 );
- VERIFY( state1 == state2 );
- VERIFY( state1 == 0 );
- VERIFY( !traits_type::compare("\t\t sun", carray1, 10) );
-
- state1 = is_04.rdstate();
- is_04.getline(carray1, 20);
- state2 = is_04.rdstate();
- VERIFY( is_04.gcount() == 4 );
- VERIFY( state1 == state2 );
- VERIFY( state1 == 0 );
- VERIFY( !traits_type::compare("ra ", carray1, 4) );
-
- state1 = is_04.rdstate();
- is_04.getline(carray1, 65);
- state2 = is_04.rdstate();
- VERIFY( is_04.gcount() == 64 );
- VERIFY( state1 != state2 );
- VERIFY( state2 == statefail );
- VERIFY( !traits_type::compare(
- " and his myth science arkestra presen",
- carray1, 65) );
-
- is_04.clear();
- state1 = is_04.rdstate();
- is_04.getline(carray1, 120, '|');
- state2 = is_04.rdstate();
- VERIFY( is_04.gcount() == 106 );
- VERIFY( state1 != state2 );
- VERIFY( state2 == stateeof );
-
- is_04.clear();
- state1 = is_04.rdstate();
- is_04.getline(carray1, 100, '|');
- state2 = is_04.rdstate();
- VERIFY( is_04.gcount() == 0 );
- VERIFY( state1 != state2 );
- VERIFY( static_cast<bool>(state2 & stateeof) );
- VERIFY( static_cast<bool>(state2 & statefail) );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return 0;
-}
-
-int
-test03()
-{
- typedef std::char_traits<char> traits_type;
-
- bool test = true;
- const char str_lit01[] =
- " sun*ra \n\t\t\t & his arkestra, featuring john gilmore: \n"
- " "
- "jazz in silhouette: images and forecasts of tomorrow";
-
- std::string str01(str_lit01);
- std::string strtmp;
-
- std::stringbuf sbuf_03;
- std::stringbuf sbuf_04(str01, std::ios_base::in);
- std::stringbuf sbuf_05(str01, std::ios_base::in);
-
- std::istream is_00(NULL);
- std::istream is_04(&sbuf_04);
- std::istream is_05(&sbuf_05);
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
- std::streamsize count1, count2;
- char carray1[400] = "";
-
- // int_type get()
- // istream& get(char*, streamsize, char delim)
- // istream& get(char*, streamsize)
- // istream& get(streambuf&, char delim)
- // istream& get(streambuf&)
- is_00.get(carray1, 2);
- VERIFY( static_cast<bool>(is_00.rdstate() & statefail) );
- VERIFY( is_00.gcount() == 0 );
-
- is_04.get(carray1, 4);
- VERIFY( !(is_04.rdstate() & statefail) );
- VERIFY( !traits_type::compare(carray1, " ", 4) );
- VERIFY( is_04.gcount() == 3 );
-
- is_04.clear();
- is_04.get(carray1 + 3, 200);
- VERIFY( !(is_04.rdstate() & statefail) );
- VERIFY( !(is_04.rdstate() & stateeof) );
- VERIFY( !traits_type::compare(carray1, str_lit01, 10) );
- VERIFY( is_04.gcount() == 7 );
-
- is_04.clear();
- is_04.get(carray1, 200);
- VERIFY( !(is_04.rdstate() & stateeof) );
- VERIFY( static_cast<bool>(is_04.rdstate() & statefail) ); // delimiter
- VERIFY( is_04.gcount() == 0 );
- is_04.clear();
- is_04.get(carray1, 200, '[');
- VERIFY( static_cast<bool>(is_04.rdstate() & stateeof) );
- VERIFY( !(is_04.rdstate() & statefail) );
- VERIFY( is_04.gcount() == 125 );
- is_04.clear();
- is_04.get(carray1, 200);
- VERIFY( static_cast<bool>(is_04.rdstate() & stateeof) );
- VERIFY( static_cast<bool>(is_04.rdstate() & statefail) );
- VERIFY( is_04.gcount() == 0 );
-
- std::stringbuf sbuf_02(std::ios_base::in);
- is_05.clear();
- is_05.get(sbuf_02);
- VERIFY( is_05.gcount() == 0 );
- VERIFY( static_cast<bool>(is_05.rdstate() & statefail) );
- VERIFY( !(is_05.rdstate() & stateeof) );
-
- is_05.clear();
- is_05.get(sbuf_03);
- VERIFY( is_05.gcount() == 10 );
- VERIFY( sbuf_03.str() == " sun*ra " );
- VERIFY( !(is_05.rdstate() & statefail) );
- VERIFY( !(is_05.rdstate() & stateeof) );
-
- is_05.clear();
- is_05.get(sbuf_03, '|');
- VERIFY( is_05.gcount() == 125 );
- VERIFY( sbuf_03.str() == str_lit01 );
- VERIFY( !(is_05.rdstate() & statefail) );
- VERIFY( static_cast<bool>(is_05.rdstate() & stateeof) );
-
- is_05.clear();
- is_05.get(sbuf_03, '|');
- VERIFY( is_05.gcount() == 0 );
- VERIFY( static_cast<bool>(is_05.rdstate() & stateeof) );
- VERIFY( static_cast<bool>(is_05.rdstate() & statefail) );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return 0;
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00177.html
-int
-test04()
-{
- bool test = true;
-
- const std::string str_00("Red_Garland_Qunitet-Soul_Junction");
- std::string strtmp;
- char c_array[str_00.size() + 4];
-
- std::stringbuf isbuf_00(str_00, std::ios_base::in);
- std::istream is_00(&isbuf_00);
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
-
- state1 = stateeof | statefail;
- VERIFY( is_00.gcount() == 0 );
- is_00.read(c_array, str_00.size() + 1);
- VERIFY( is_00.gcount() == str_00.size() );
- VERIFY( is_00.rdstate() == state1 );
-
- is_00.read(c_array, str_00.size());
- VERIFY( is_00.rdstate() == state1 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return 0;
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2000-07/msg00003.html
-int
-test05()
-{
- const char* charray = "\n"
-"a\n"
-"aa\n"
-"aaa\n"
-"aaaa\n"
-"aaaaa\n"
-"aaaaaa\n"
-"aaaaaaa\n"
-"aaaaaaaa\n"
-"aaaaaaaaa\n"
-"aaaaaaaaaa\n"
-"aaaaaaaaaaa\n"
-"aaaaaaaaaaaa\n"
-"aaaaaaaaaaaaa\n"
-"aaaaaaaaaaaaaa\n";
-
- bool test = true;
- const std::streamsize it = 5;
- std::streamsize br = 0;
- char tmp[it];
- std::stringbuf sb(charray, std::ios_base::in);
- std::istream ifs(&sb);
- std::streamsize blen = std::strlen(charray);
- VERIFY(!(!ifs));
- while(ifs.getline(tmp, it) || ifs.gcount())
- {
- br += ifs.gcount();
- if(ifs.eof())
- {
- // Just sanity checks to make sure we've extracted the same
- // number of chars that were in the streambuf
- VERIFY(br == blen);
- // Also, we should only set the failbit if we could
- // _extract_ no chars from the stream, i.e. the first read
- // returned EOF.
- VERIFY(ifs.fail() && ifs.gcount() == 0);
- }
- else if(ifs.fail())
- {
- // delimiter not read
- //
- // either
- // -> extracted no characters
- // or
- // -> n - 1 characters are stored
- ifs.clear(ifs.rdstate() & ~std::ios::failbit);
- VERIFY((ifs.gcount() == 0) || (std::strlen(tmp) == it - 1));
- VERIFY(!(!ifs));
- continue;
- }
- else
- {
- // delimiter was read.
- //
- // -> strlen(__s) < n - 1
- // -> delimiter was seen -> gcount() > strlen(__s)
- VERIFY(ifs.gcount() == std::strlen(tmp) + 1);
- continue;
- }
- }
-
- return 0;
-}
-
-
-// http://gcc.gnu.org/ml/libstdc++/2000-07/msg00126.html
-int
-test06()
-{
- using namespace std;
-
- bool test = true;
- const streamsize it = 5;
- char tmp[it];
- const char* str_lit = "abcd\n";
-
- stringbuf strbuf(str_lit, std::ios_base::in);
- istream istr(&strbuf);
-
- istr.getline(tmp,it);
- VERIFY( istr.gcount() == it ); // extracted whole string
- VERIFY( strlen(tmp) == 4 ); // stored all but '\n'
- VERIFY( !istr.eof() ); // extracted up to but not eof
- VERIFY( !istr.fail() ); // failbit not set
-
- char c = 'z';
- istr.get(c);
- VERIFY( c == 'z' );
- VERIFY( istr.eof() );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return 0;
-}
-
-// bug reported by bgarcia@laurelnetworks.com
-// http://gcc.gnu.org/ml/libstdc++-prs/2000-q3/msg00041.html
-void
-test07()
-{
- bool test = true;
- const char* tfn = "istream_unformatted-1.txt";
- std::ifstream infile;
- infile.open(tfn);
- VERIFY( !(!infile) );
- while (infile)
- {
- std::string line;
- std::ostringstream line_ss;
- while (infile.peek() == '\n')
- infile.get();
- infile.get(*(line_ss.rdbuf()));
- line = line_ss.str();
- VERIFY( line == "1234567890" || line == "" );
- }
-}
-
-// 2002-04-19 PR libstdc++ 6360
-void
-test08()
-{
- using namespace std;
- bool test = true;
-
- stringstream ss("abcd" "\xFF" "1234ina donna coolbrith");
- char c;
- ss >> c;
- VERIFY( c == 'a' );
- ss.ignore(8);
- ss >> c;
- VERIFY( c == 'i' );
-}
-
-// Theodore Papadopoulo
-void
-test09()
-{
- using namespace std;
- bool test = true;
-
- istringstream iss("Juana Briones");
- char tab[13];
- iss.read(tab, 13);
- if (!iss)
- test = false;
- VERIFY( test );
-}
-
-// libstdc++/70220
-void
-test10()
-{
- using namespace std;
- bool test = true;
- typedef string string_type;
- typedef stringbuf stringbuf_type;
- typedef istream istream_type;
-
- int res = 0;
- streamsize n;
- string_type input("abcdefg\n");
- stringbuf_type sbuf(input);
- istream_type istr(&sbuf);
-
- istr.ignore(0);
- if (istr.gcount() != 0)
- test = false;
- VERIFY( test );
-
- istr.ignore(0, 'b');
- if (istr.gcount() != 0)
- test = false;
- VERIFY( test );
-
- istr.ignore(); // Advance to next position.
- istr.ignore(0, 'b');
- if ((n=istr.gcount()) != 0)
- test = false;
- VERIFY( test );
-
- if (istr.peek() != 'b')
- test = false;
- VERIFY( test );
-}
-
-
-// libstdc++/8258
-class mybuf : public std::basic_streambuf<char>
-{ };
-
-void test11()
-{
- bool test = true;
- using namespace std;
- char arr[10];
- mybuf sbuf;
- basic_istream<char, char_traits<char> > istr(&sbuf);
-
- VERIFY(istr.rdstate() == ios_base::goodbit);
- VERIFY(istr.readsome(arr, 10) == 0);
- VERIFY(istr.rdstate() == ios_base::goodbit);
-}
-
-// libstdc++/6746
-void test12()
-{
- using namespace std;
- bool test = true;
- streamsize sum = 0;
- istringstream iss("shamma shamma");
-
- // test01
- size_t i = iss.rdbuf()->in_avail();
- VERIFY( i != 0 );
-
- // test02
- streamsize extracted;
- do
- {
- char buf[1024];
- extracted = iss.readsome(buf, sizeof buf);
- sum += extracted;
- }
- while (iss.good() && extracted);
- VERIFY( sum != 0 );
-}
-
-// libstdc++/6746
-void test13()
-{
- using namespace std;
- bool test = true;
- streamsize sum = 0;
- ifstream ifs("istream_unformatted-1.tst");
-
- // test01
- size_t i = ifs.rdbuf()->in_avail();
- VERIFY( i != 0 );
-
- // test02
- streamsize extracted;
- do
- {
- char buf[1024];
- extracted = ifs.readsome(buf, sizeof buf);
- sum += extracted;
- }
- while (ifs.good() && extracted);
- VERIFY( sum != 0 );
-}
-
-int
-main()
-{
- test01();
- test02();
- test03();
- test04();
- test05();
- test06();
- test07();
- test08();
- test09();
- test10();
- test11();
-
- test12();
- test13();
-
- return 0;
-}
// 981027 ncm work with libstdc++v3
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
VERIFY( oss.str() == lit );
}
-void
-test02()
-{
- bool test = true;
- const std::string strue("true");
- const std::string sfalse("false");
- std::string str01;
- std::string str02;
-
- std::locale loc("");
- std::ostringstream ostr01;
- ostr01.imbue(loc);
- std::ios_base::fmtflags ff = ostr01.flags(std::ios_base::boolalpha);
-
- ostr01 << true;
- str02 = ostr01.str();
- VERIFY( str02 == strue );
-
- ostr01.str(str01);
- ostr01 << false;
- str02 = ostr01.str();
- VERIFY( str02 == sfalse );
-
- VERIFY( test );
-}
-
int
main()
{
test01();
- test02();
return 0;
}
--- /dev/null
+// Copyright (C) 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <sstream>
+#include <locale>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+void test02()
+{
+ bool test = true;
+ const std::string str_blank;
+ std::string str_tmp;
+ std::stringbuf strbuf;
+ std::ostream o(&strbuf);
+
+ o << std::setw(6) << std::right << "san";
+ VERIFY( strbuf.str() == " san" );
+ strbuf.str(str_blank);
+
+ o << std::setw(6) << std::internal << "fran";
+ VERIFY( strbuf.str() == " fran" );
+ strbuf.str(str_blank);
+
+ o << std::setw(6) << std::left << "cisco";
+ VERIFY( strbuf.str() == "cisco " );
+ strbuf.str(str_blank);
+}
+
+int
+main()
+{
+ test02();
+ return 0;
+}
std::string MyNP::do_grouping() const { std::string s("\3"); return s; }
char MyNP::do_thousands_sep() const { return ' '; }
-int
-test01()
+
+void test01()
{
bool test = true;
VERIFY( oss.good() );
VERIFY( oss.str() == lit );
-
- return 0;
-}
-
-int
-test02()
-{
- bool test = true;
- const std::string str_blank;
- std::string str_tmp;
- std::stringbuf strbuf;
- std::ostream o(&strbuf);
-
- o << std::setw(6) << std::right << "san";
- VERIFY( strbuf.str() == " san" );
- strbuf.str(str_blank);
-
- o << std::setw(6) << std::internal << "fran";
- VERIFY( strbuf.str() == " fran" );
- strbuf.str(str_blank);
-
- o << std::setw(6) << std::left << "cisco";
- VERIFY( strbuf.str() == "cisco " );
- strbuf.str(str_blank);
-
- VERIFY( test );
- return 0;
}
-
int
main()
{
test01();
- test02();
return 0;
}
+++ /dev/null
-// 2000-08-02 bkoz
-
-// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// Include all the headers except for iostream.
-#include <algorithm>
-#include <bitset>
-#include <complex>
-#include <deque>
-#include <exception>
-#include <fstream>
-#include <functional>
-#include <iomanip>
-#include <ios>
-#include <iosfwd>
-#include <istream>
-#include <iterator>
-#include <limits>
-#include <list>
-#include <locale>
-#include <map>
-#include <memory>
-#include <new>
-#include <numeric>
-#include <ostream>
-#include <queue>
-#include <set>
-#include <sstream>
-#include <stack>
-#include <stdexcept>
-#include <streambuf>
-#include <string>
-#include <typeinfo>
-#include <utility>
-#include <valarray>
-#include <vector>
-#include <cassert>
-#include <cctype>
-#include <cerrno>
-#include <cfloat>
-#include <ciso646>
-#include <climits>
-#include <clocale>
-#include <cmath>
-#include <csetjmp>
-#include <csignal>
-#include <cstdarg>
-#include <cstddef>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <ctime>
-#include <testsuite_hooks.h>
-
-// Include iostream last, just to make is as difficult as possible to
-// properly initialize the standard iostream objects.
-#include <iostream>
-
-// Make sure all the standard streams are defined.
-int
-test01()
-{
- bool test = true;
-
- char array1[20];
- typedef std::ios::traits_type ctraits_type;
- ctraits_type::int_type i = 15;
- ctraits_type::copy(array1, "testing istream", i);
- array1[i] = '\0';
- std::cout << "testing cout" << std::endl;
- std::cerr << "testing cerr" << std::endl;
- VERIFY( std::cerr.flags() & std::ios_base::unitbuf );
- std::clog << "testing clog" << std::endl;
- // std::cin >> array1; // requires somebody to type something in.
- VERIFY( std::cin.tie() == &std::cout );
-
- return 0;
-}
-
-// libstdc++/2523
-void test02()
-{
- using namespace std;
- int i;
- cin >> i;
- cout << "i == " << i << endl;
-}
-
-// libstdc++/2523
-void test03()
-{
- using namespace std;
- ios_base::sync_with_stdio(false);
-
- int i;
- cin >> i;
- cout << "i == " << i << endl;
-}
-
-// Interactive test, to be exercised as follows:
-// assign stderr to stdout in shell command line,
-// pipe stdout to cat process and/or redirect stdout to file.
-// a.out >& output
-// "hello fine world\n" should be written to stdout, and output, in
-// proper order. This is a version of the scott snyder test taken
-// from: http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00108.html
-void test04()
-{
- using namespace std;
-
- cout << "hello ";
- cout.flush();
- cerr << "fine ";
- cerr.flush();
- cout << "world" << endl;
- cout.flush();
-}
-
-// Interactive test, to be exercised as follows:
-// run test under truss(1) or strace(1). Look at
-// size and pattern of write system calls.
-// Should be 2 or 3 write(1,[...]) calls when run interactively
-// depending upon buffering mode enforced.
-void test05()
-{
- std::cout << "hello" << ' ' << "world" << std::endl;
- std::cout << "Enter your name: ";
- std::string s;
- std::cin >> s;
- std::cout << "hello " << s << std::endl;
-}
-
-// libstdc++/5280
-// Interactive test: input "1234^D^D" for i should terminate for EOF.
-void test06()
-{
- using namespace std;
- int i;
- cin >> i;
- if (!cin.good())
- {
- cerr << endl;
- cerr << "i == " << i << endl;
- cerr << "cin.rdstate() == " << cin.rdstate() << endl;
- cerr << "cin.bad() == " << cin.bad() << endl;
- cerr << "cin.fail() == " << cin.fail() << endl;
- cerr << "cin.eof() == " << cin.eof() << endl;
- }
- else
- cerr << "i == " << i << endl;
-}
-
-// libstdc++/6548
-void test07()
-{
- bool test = true;
- std::cout << "Enter 'test':";
- std::string s;
- std::getline(std::cin, s, '\n');
- VERIFY( s == "test" );
-}
-
-// libstdc++/6648
-// Interactive tests: each one (run alone) must terminate upon a single '\n'.
-void test08()
-{
- bool test = true;
- char buff[2048];
- std::cout << "Enter name: ";
- std::cin.getline(buff, 2048);
-}
-
-void test09()
-{
- bool test = true;
- std::cout << "Enter favorite beach: ";
- std::cin.ignore(2048, '\n');
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2002-08/msg00060.html
-// Should only have to hit enter once.
-void
-test10()
-{
- using namespace std;
- cout << "Press ENTER once\n";
- cin.ignore(1);
- cout << "_M_gcount: "<< cin.gcount() << endl;
-}
-
-// libstdc++/7744
-void test11()
-{
- std::ios::sync_with_stdio(false);
-
- std::cout
- << "\n:: f2() ::\n"
- << "Type in the characters 'abc' and press <ENTER>: ";
- std::cin.peek();
-
- std::cout
- << "The number of unread characters should be 4 (a, b, c, \\n): "
- << std::cin.rdbuf()->in_avail()
- << '\n';
-}
-
-int
-main()
-{
- test01();
-
- // test02();
- // test03();
- // test04();
- // test05();
- // test06();
- // test07();
- // test08();
- // test09();
- // test10();
- // test11();
- return 0;
-}
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// Include all the headers except for iostream.
+#include <algorithm>
+#include <bitset>
+#include <complex>
+#include <deque>
+#include <exception>
+#include <fstream>
+#include <functional>
+#include <iomanip>
+#include <ios>
+#include <iosfwd>
+#include <istream>
+#include <iterator>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <new>
+#include <numeric>
+#include <ostream>
+#include <queue>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <streambuf>
+#include <string>
+#include <typeinfo>
+#include <utility>
+#include <valarray>
+#include <vector>
+#include <cassert>
+#include <cctype>
+#include <cerrno>
+#include <cfloat>
+#include <ciso646>
+#include <climits>
+#include <clocale>
+#include <cmath>
+#include <csetjmp>
+#include <csignal>
+#include <cstdarg>
+#include <cstddef>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctime>
+#include <testsuite_hooks.h>
+
+// Include iostream last, just to make is as difficult as possible to
+// properly initialize the standard iostream objects.
+#include <iostream>
+
+// Make sure all the standard streams are defined.
+void test01()
+{
+ bool test = true;
+
+ char array1[20];
+ typedef std::ios::traits_type ctraits_type;
+ ctraits_type::int_type i = 15;
+ ctraits_type::copy(array1, "testing istream", i);
+ array1[i] = '\0';
+ std::cout << "testing cout" << std::endl;
+ std::cerr << "testing cerr" << std::endl;
+ VERIFY( std::cerr.flags() & std::ios_base::unitbuf );
+ std::clog << "testing clog" << std::endl;
+ // std::cin >> array1; // requires somebody to type something in.
+ VERIFY( std::cin.tie() == &std::cout );
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+
+// Interactive test, to be exercised as follows:
+// assign stderr to stdout in shell command line,
+// pipe stdout to cat process and/or redirect stdout to file.
+// a.out >& output
+// "hello fine world\n" should be written to stdout, and output, in
+// proper order. This is a version of the scott snyder test taken
+// from: http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00108.html
+void test04()
+{
+ using namespace std;
+
+ cout << "hello ";
+ cout.flush();
+ cerr << "fine ";
+ cerr.flush();
+ cout << "world" << endl;
+ cout.flush();
+}
+
+int
+main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// Include all the headers except for iostream.
+#include <algorithm>
+#include <bitset>
+#include <complex>
+#include <deque>
+#include <exception>
+#include <fstream>
+#include <functional>
+#include <iomanip>
+#include <ios>
+#include <iosfwd>
+#include <istream>
+#include <iterator>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <new>
+#include <numeric>
+#include <ostream>
+#include <queue>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <streambuf>
+#include <string>
+#include <typeinfo>
+#include <utility>
+#include <valarray>
+#include <vector>
+#include <cassert>
+#include <cctype>
+#include <cerrno>
+#include <cfloat>
+#include <ciso646>
+#include <climits>
+#include <clocale>
+#include <cmath>
+#include <csetjmp>
+#include <csignal>
+#include <cstdarg>
+#include <cstddef>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctime>
+#include <testsuite_hooks.h>
+
+// Include iostream last, just to make is as difficult as possible to
+// properly initialize the standard iostream objects.
+#include <iostream>
+
+// libstdc++/2523
+void test02()
+{
+ using namespace std;
+ int i;
+ cin >> i;
+ cout << "i == " << i << endl;
+}
+
+int
+main()
+{
+ test02();
+ return 0;
+}
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+
+// libstdc++/2523
+void test03()
+{
+ using namespace std;
+ ios_base::sync_with_stdio(false);
+
+ int i;
+ cin >> i;
+ cout << "i == " << i << endl;
+}
+
+int
+main()
+{
+ test03();
+ return 0;
+}
--- /dev/null
+// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <fstream>
+#include <iostream>
+#include <testsuite_hooks.h>
+
+class gnu_filebuf: public std::filebuf
+{
+ int i;
+public:
+ gnu_filebuf(int j = 1): i(j) { }
+ ~gnu_filebuf() { --i; }
+ int get_i() { return i;}
+};
+
+const int initial = 4;
+gnu_filebuf buf(initial);
+
+// libstdc++/3045, in a vague way.
+void test01()
+{
+ bool test = true;
+ int k1;
+
+ // 1 normal
+ k1 = buf.get_i();
+ VERIFY( k1 == initial );
+ {
+ std::cout.rdbuf(&buf);
+ }
+ k1 = buf.get_i();
+ VERIFY( k1 == initial );
+
+ // 2 syncd off
+ k1 = buf.get_i();
+ VERIFY( k1 == initial );
+ {
+ std::cout.rdbuf(&buf);
+ std::ios_base::sync_with_stdio(false); // make sure doesn't clobber buf
+ }
+ k1 = buf.get_i();
+ VERIFY( k1 == initial );
+
+ // 3 callling init
+ k1 = buf.get_i();
+ VERIFY( k1 == initial );
+ {
+ std::cout.rdbuf(&buf);
+ std::ios_base::Init make_sure_initialized;
+ }
+ k1 = buf.get_i();
+ VERIFY( k1 == initial );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+
+// Interactive test, to be exercised as follows:
+// run test under truss(1) or strace(1). Look at
+// size and pattern of write system calls.
+// Should be 2 or 3 write(1,[...]) calls when run interactively
+// depending upon buffering mode enforced.
+void test05()
+{
+ std::cout << "hello" << ' ' << "world" << std::endl;
+ std::cout << "Enter your name: ";
+ std::string s;
+ std::cin >> s;
+ std::cout << "hello " << s << std::endl;
+}
+
+int
+main()
+{
+ test05();
+ return 0;
+}
--- /dev/null
+JOHN HUME and DAVID TRIMBLE
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+
+// http://gcc.gnu.org/ml/libstdc++/2002-08/msg00060.html
+// Should only have to hit enter once.
+void
+test10()
+{
+ using namespace std;
+ cout << "Press ENTER once\n";
+ cin.ignore(1);
+ cout << "_M_gcount: "<< cin.gcount() << endl;
+}
+
+int
+main()
+{
+ test10();
+ return 0;
+}
--- /dev/null
+// 2001-06-05 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction. Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License. This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <sstream>
+#include <iostream>
+
+// libstdc++/5268
+void test04()
+{
+ std::stringbuf b1;
+ std::cout.rdbuf( &b1 );
+ std::cout << "hello\n";
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+
+// libstdc++/5280
+// Interactive test: input "1234^D^D" for i should terminate for EOF.
+void test06()
+{
+ using namespace std;
+ int i;
+ cin >> i;
+ if (!cin.good())
+ {
+ cerr << endl;
+ cerr << "i == " << i << endl;
+ cerr << "cin.rdstate() == " << cin.rdstate() << endl;
+ cerr << "cin.bad() == " << cin.bad() << endl;
+ cerr << "cin.fail() == " << cin.fail() << endl;
+ cerr << "cin.eof() == " << cin.eof() << endl;
+ }
+ else
+ cerr << "i == " << i << endl;
+}
+
+int
+main()
+{
+ test06();
+ return 0;
+}
--- /dev/null
+1234
\ No newline at end of file
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/6548
+void test07()
+{
+ bool test = true;
+ std::cout << "Enter 'test':";
+ std::string s;
+ std::getline(std::cin, s, '\n');
+ VERIFY( s == "test" );
+}
+
+int
+main()
+{
+ test07();
+ return 0;
+}
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+
+// libstdc++/6648
+// Interactive tests: each one (run alone) must terminate upon a single '\n'.
+void test08()
+{
+ bool test = true;
+ char buff[2048];
+ std::cout << "Enter name: ";
+ std::cin.getline(buff, 2048);
+}
+
+int
+main()
+{
+ test08();
+ return 0;
+}
--- /dev/null
+Kofi A. Annan
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+
+void test09()
+{
+ bool test = true;
+ std::cout << "Enter favorite beach: ";
+ std::cin.ignore(2048, '\n');
+}
+
+int
+main()
+{
+ test09();
+ return 0;
+}
--- /dev/null
+Oak St. Beach, Chicago
--- /dev/null
+// 2000-08-02 bkoz
+
+// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+#include <iostream>
+#include <testsuite_hooks.h>
+
+// libstdc++/7744
+void test11()
+{
+ bool test = true;
+ std::ios::sync_with_stdio(false);
+
+ std::cout << "Type in the characters 'abc' and press <ENTER>: ";
+ std::cin.peek();
+
+ // The number of unread characters should be 4 (a, b, c, \\n)
+ VERIFY( 4 == std::cin.rdbuf()->in_avail() );
+}
+
+int
+main()
+{
+ test11();
+ return 0;
+}
// 2000-08-02 bkoz
-// Copyright (C) 2000 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2003 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
#include <cstdlib>
#include <cstring>
#include <ctime>
-#if _GLIBCPP_USE_WCHAR_T
- #include <bits/c++config.h>
- #include <cwchar>
- #include <cwctype>
-#endif
+#include <cwchar>
+#include <cwctype>
#include <testsuite_hooks.h>
// Include iostream last, just to make is as difficult as possible to
#include <iostream>
// Make sure all the standard streams are defined.
-int
+void
test01()
{
bool test = true;
-#ifdef _GLIBCPP_USE_WCHAR_T
wchar_t array2[20];
typedef std::wios::traits_type wtraits_type;
wtraits_type::int_type wi = 15;
std::wclog << L"testing wclog" << std::endl;
// std::wcin >> array2; // requires somebody to type something in.
VERIFY( std::wcin.tie() == &std::wcout );
-#endif
-
- return 0;
}
int
main()
{
- test01();
-
+ test01();
return 0;
}
+++ /dev/null
-// 1999-11-15 Kevin Ediger <kediger@licor.com>
-// test the floating point inserters (facet num_put)
-
-// Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-#include <cstdio> // for sprintf
-#include <cmath> // for abs
-#include <cfloat> // for DBL_EPSILON
-#include <iostream>
-#include <iomanip>
-#include <locale>
-#include <sstream>
-#include <limits>
-#include <testsuite_hooks.h>
-
-using namespace std;
-
-#ifndef DEBUG_ASSERT
-# define TEST_NUMPUT_VERBOSE 1
-#endif
-
-struct _TestCase
-{
- double val;
-
- int precision;
- int width;
- char decimal;
- char fill;
-
- bool fixed;
- bool scientific;
- bool showpos;
- bool showpoint;
- bool uppercase;
- bool internal;
- bool left;
- bool right;
-
- const char* result;
-#if _GLIBCPP_USE_WCHAR_T
- const wchar_t* wresult;
-#endif
-};
-
-static bool T=true;
-static bool F=false;
-
-static _TestCase testcases[] =
-{
-#if _GLIBCPP_USE_WCHAR_T
- // standard output (no formatting applied) 1-4
- { 1.2, 6,0,'.',' ', F,F,F,F,F,F,F,F, "1.2",L"1.2" },
- { 54, 6,0,'.',' ', F,F,F,F,F,F,F,F, "54",L"54" },
- { -.012, 6,0,'.',' ', F,F,F,F,F,F,F,F, "-0.012",L"-0.012" },
- { -.00000012, 6,0,'.',' ', F,F,F,F,F,F,F,F, "-1.2e-07",L"-1.2e-07" },
-
- // fixed formatting 5-11
- { 10.2345, 0,0,'.',' ', T,F,F,F,F,F,F,F, "10",L"10" },
- { 10.2345, 0,0,'.',' ', T,F,F,T,F,F,F,F, "10.",L"10." },
- { 10.2345, 1,0,'.',' ', T,F,F,F,F,F,F,F, "10.2",L"10.2" },
- { 10.2345, 4,0,'.',' ', T,F,F,F,F,F,F,F, "10.2345",L"10.2345" },
- { 10.2345, 6,0,'.',' ', T,F,T,F,F,F,F,F, "+10.234500",L"+10.234500" },
- { -10.2345, 6,0,'.',' ', T,F,F,F,F,F,F,F, "-10.234500",L"-10.234500" },
- { -10.2345, 6,0,',',' ', T,F,F,F,F,F,F,F, "-10,234500",L"-10,234500" },
-
- // fixed formatting with width 12-22
- { 10.2345, 4,5,'.',' ', T,F,F,F,F,F,F,F, "10.2345",L"10.2345" },
- { 10.2345, 4,6,'.',' ', T,F,F,F,F,F,F,F, "10.2345",L"10.2345" },
- { 10.2345, 4,7,'.',' ', T,F,F,F,F,F,F,F, "10.2345",L"10.2345" },
- { 10.2345, 4,8,'.',' ', T,F,F,F,F,F,F,F, " 10.2345",L" 10.2345" },
- { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,F,F, " 10.2345",L" 10.2345" },
- { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,T,F, "10.2345 ",L"10.2345 " },
- { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,F,T, " 10.2345",L" 10.2345" },
- { 10.2345, 4,10,'.',' ', T,F,F,F,F,T,F,F, " 10.2345",L" 10.2345" },
- { -10.2345, 4,10,'.',' ', T,F,F,F,F,T,F,F, "- 10.2345",L"- 10.2345" },
- { -10.2345, 4,10,'.','A', T,F,F,F,F,T,F,F, "-AA10.2345",L"-AA10.2345" },
- { 10.2345, 4,10,'.','#', T,F,T,F,F,T,F,F, "+##10.2345",L"+##10.2345" },
-
- // scientific formatting 23-29
- { 1.23e+12, 1,0,'.',' ', F,T,F,F,F,F,F,F, "1.2e+12",L"1.2e+12" },
- { 1.23e+12, 1,0,'.',' ', F,T,F,F,T,F,F,F, "1.2E+12",L"1.2E+12" },
- { 1.23e+12, 2,0,'.',' ', F,T,F,F,F,F,F,F, "1.23e+12",L"1.23e+12" },
- { 1.23e+12, 3,0,'.',' ', F,T,F,F,F,F,F,F, "1.230e+12",L"1.230e+12" },
- { 1.23e+12, 3,0,'.',' ', F,T,T,F,F,F,F,F, "+1.230e+12",L"+1.230e+12" },
- { -1.23e-12, 3,0,'.',' ', F,T,F,F,F,F,F,F, "-1.230e-12",L"-1.230e-12" },
- { 1.23e+12, 3,0,',',' ', F,T,F,F,F,F,F,F, "1,230e+12",L"1,230e+12" },
-#else
- // standard output (no formatting applied)
- { 1.2, 6,0,'.',' ', F,F,F,F,F,F,F,F, "1.2" },
- { 54, 6,0,'.',' ', F,F,F,F,F,F,F,F, "54" },
- { -.012, 6,0,'.',' ', F,F,F,F,F,F,F,F, "-0.012" },
- { -.00000012, 6,0,'.',' ', F,F,F,F,F,F,F,F, "-1.2e-07" },
-
- // fixed formatting
- { 10.2345, 0,0,'.',' ', T,F,F,F,F,F,F,F, "10" },
- { 10.2345, 0,0,'.',' ', T,F,F,T,F,F,F,F, "10." },
- { 10.2345, 1,0,'.',' ', T,F,F,F,F,F,F,F, "10.2" },
- { 10.2345, 4,0,'.',' ', T,F,F,F,F,F,F,F, "10.2345" },
- { 10.2345, 6,0,'.',' ', T,F,T,F,F,F,F,F, "+10.234500" },
- { -10.2345, 6,0,'.',' ', T,F,F,F,F,F,F,F, "-10.234500" },
- { -10.2345, 6,0,',',' ', T,F,F,F,F,F,F,F, "-10,234500" },
-
- // fixed formatting with width
- { 10.2345, 4,5,'.',' ', T,F,F,F,F,F,F,F, "10.2345" },
- { 10.2345, 4,6,'.',' ', T,F,F,F,F,F,F,F, "10.2345" },
- { 10.2345, 4,7,'.',' ', T,F,F,F,F,F,F,F, "10.2345" },
- { 10.2345, 4,8,'.',' ', T,F,F,F,F,F,F,F, " 10.2345" },
- { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,F,F, " 10.2345" },
- { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,T,F, "10.2345 " },
- { 10.2345, 4,10,'.',' ', T,F,F,F,F,F,F,T, " 10.2345" },
- { 10.2345, 4,10,'.',' ', T,F,F,F,F,T,F,F, " 10.2345" },
- { -10.2345, 4,10,'.',' ', T,F,F,F,F,T,F,F, "- 10.2345" },
- { -10.2345, 4,10,'.','A', T,F,F,F,F,T,F,F, "-AA10.2345" },
- { 10.2345, 4,10,'.','#', T,F,T,F,F,T,F,F, "+##10.2345" },
-
- // scientific formatting
- { 1.23e+12, 1,0,'.',' ', F,T,F,F,F,F,F,F, "1.2e+12" },
- { 1.23e+12, 1,0,'.',' ', F,T,F,F,T,F,F,F, "1.2E+12" },
- { 1.23e+12, 2,0,'.',' ', F,T,F,F,F,F,F,F, "1.23e+12" },
- { 1.23e+12, 3,0,'.',' ', F,T,F,F,F,F,F,F, "1.230e+12" },
- { 1.23e+12, 3,0,'.',' ', F,T,T,F,F,F,F,F, "+1.230e+12" },
- { -1.23e-12, 3,0,'.',' ', F,T,F,F,F,F,F,F, "-1.230e-12" },
- { 1.23e+12, 3,0,',',' ', F,T,F,F,F,F,F,F, "1,230e+12" },
-#endif
-};
-
-template<typename _CharT>
-class testpunct : public numpunct<_CharT>
-{
-public:
- typedef _CharT char_type;
- const char_type dchar;
-
- explicit
- testpunct(char_type decimal_char) : numpunct<_CharT>(), dchar(decimal_char)
- { }
-
-protected:
- char_type
- do_decimal_point() const
- { return dchar; }
-
- char_type
- do_thousands_sep() const
- { return ','; }
-
- string
- do_grouping() const
- { return string(); }
-};
-
-template<typename _CharT>
-void apply_formatting(const _TestCase & tc, basic_ostream<_CharT> & os)
-{
- os.precision(tc.precision);
- os.width(tc.width);
- os.fill(static_cast<_CharT>(tc.fill));
- if (tc.fixed)
- os.setf(ios::fixed);
- if (tc.scientific)
- os.setf(ios::scientific);
- if (tc.showpos)
- os.setf(ios::showpos);
- if (tc.showpoint)
- os.setf(ios::showpoint);
- if (tc.uppercase)
- os.setf(ios::uppercase);
- if (tc.internal)
- os.setf(ios::internal);
- if (tc.left)
- os.setf(ios::left);
- if (tc.right)
- os.setf(ios::right);
-}
-
-int
-test01()
-{
- bool test = true;
- for (int j=0; j<sizeof(testcases)/sizeof(testcases[0]); j++)
- {
- _TestCase & tc = testcases[j];
-#ifdef TEST_NUMPUT_VERBOSE
- cout << "expect: " << tc.result << endl;
-#endif
- // test double with char type
- {
- testpunct<char>* __tp = new testpunct<char>(tc.decimal);
- ostringstream os;
- locale __loc(os.getloc(), __tp);
- os.imbue(__loc);
- apply_formatting(tc, os);
- os << tc.val;
-#ifdef TEST_NUMPUT_VERBOSE
- cout << j << "result 1: " << os.str() << endl;
-#endif
- VERIFY( os && os.str() == tc.result );
- }
- // test long double with char type
- {
- testpunct<char>* __tp = new testpunct<char>(tc.decimal);
- ostringstream os;
- locale __loc(os.getloc(), __tp);
- os.imbue(__loc);
- apply_formatting(tc, os);
- os << (long double)tc.val;
-#ifdef TEST_NUMPUT_VERBOSE
- cout << j << "result 2: " << os.str() << endl;
-#endif
- VERIFY( os && os.str() == tc.result );
- }
-#if _GLIBCPP_USE_WCHAR_T
- // test double with wchar_t type
- {
- testpunct<wchar_t>* __tp = new testpunct<wchar_t>(tc.decimal);
- wostringstream os;
- locale __loc(os.getloc(), __tp);
- os.imbue(__loc);
- apply_formatting(tc, os);
- os << tc.val;
- VERIFY( os && os.str() == tc.wresult );
- }
- // test long double with wchar_t type
- {
- testpunct<wchar_t>* __tp = new testpunct<wchar_t>(tc.decimal);
- wostringstream os;
- locale __loc(os.getloc(), __tp);
- os.imbue(__loc);
- apply_formatting(tc, os);
- os << (long double)tc.val;
- VERIFY( os && os.str() == tc.wresult );
- }
-#endif
- }
-
- return 0;
-}
-
-void
-test02()
-{
- bool test = true;
- // make sure we can output a very long float
- long double val = 1.2345678901234567890123456789e+1000L;
- int prec = numeric_limits<long double>::digits10;
-
- ostringstream os;
- os.precision(prec);
- os.setf(ios::scientific);
- os << val;
-
- char largebuf[512];
- sprintf(largebuf, "%.*Le", prec, val);
-#ifdef TEST_NUMPUT_VERBOSE
- cout << "expect: " << largebuf << endl;
- cout << "result: " << os.str() << endl;
-#endif
- VERIFY(os && os.str() == largebuf);
-
- // Make sure we can output a long float in fixed format
- // without seg-faulting (libstdc++/4402)
- double val2 = 3.5e230;
-
- ostringstream os2;
- os2.precision(3);
- os2.setf(ios::fixed);
- os2 << val2;
-
- sprintf(largebuf, "%.*f", 3, val2);
-#ifdef TEST_NUMPUT_VERBOSE
- cout << "expect: " << largebuf << endl;
- cout << "result: " << os2.str() << endl;
-#endif
- VERIFY(os2 && os2.str() == largebuf);
-
- // Check it can be done in a locale with grouping on.
- locale loc2("de_DE");
- os2.imbue(loc2);
- os2 << fixed << setprecision(3) << val2 << endl;
- os2 << endl;
- os2 << fixed << setprecision(1) << val2 << endl;
-
- return;
-}
-
-template<typename T>
-bool
-test03_check(T n)
-{
- stringbuf strbuf;
- ostream o(&strbuf);
- const char *expect;
- bool test = true;
-
- if (numeric_limits<T>::digits + 1 == 16)
- expect = "177777 ffff";
- else if (numeric_limits<T>::digits + 1 == 32)
- expect = "37777777777 ffffffff";
- else if (numeric_limits<T>::digits + 1 == 64)
- expect = "1777777777777777777777 ffffffffffffffff";
- else
- expect = "wow, you've got some big numbers here";
-
- o << oct << n << ' ' << hex << n;
- VERIFY ( strbuf.str() == expect );
-
- return test;
-}
-
-int
-test03()
-{
- short s = -1;
- int i = -1;
- long l = -1;
- bool test = true;
-
- test &= test03_check (s);
- test &= test03_check (i);
- test &= test03_check (l);
-
- return 0;
-}
-
-// libstdc++/3655
-int
-test04()
-{
- stringbuf strbuf1, strbuf2;
- ostream o1(&strbuf1), o2(&strbuf2);
- bool test = true;
-
- o1 << hex << showbase << setw(6) << internal << 0xff;
- VERIFY( strbuf1.str() == "0x ff" );
-
- // ... vs internal-adjusted const char*-type objects
- o2 << hex << showbase << setw(6) << internal << "0xff";
- VERIFY( strbuf2.str() == " 0xff" );
-
- return 0;
-}
-
-int
-test05()
-{
- bool test = true;
- double pi = 3.14159265358979323846;
- ostringstream ostr;
- ostr.precision(20);
- ostr << pi;
- string sval = ostr.str();
- istringstream istr (sval);
- double d;
- istr >> d;
- VERIFY( abs(pi-d)/pi < DBL_EPSILON );
- return 0;
-}
-
-
-// libstdc++/9151
-int
-test06()
-{
- bool test = true;
- int prec = numeric_limits<double>::digits10 + 2;
- double oval = numeric_limits<double>::min();
-
- stringstream ostr;
- ostr.precision(prec);
- ostr << oval;
- string sval = ostr.str();
- istringstream istr (sval);
- double ival;
- istr >> ival;
- VERIFY( abs(oval-ival)/oval < DBL_EPSILON );
- return 0;
-}
-
-int
-main()
-{
- test01();
- __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
- test03();
- test04();
- test05();
- test06();
-#ifdef TEST_NUMPUT_VERBOSE
- cout << "Test passed!" << endl;
-#endif
- return 0;
-}
+++ /dev/null
-// 1999-08-16 bkoz
-
-// Copyright (C) 1999, 2000, 2002 Free Software Foundation
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 27.6.2.5.4 basic_ostream character inserters
-
-#include <string>
-#include <ostream>
-#include <sstream>
-#include <fstream>
-#include <testsuite_hooks.h>
-
-// ofstream
-bool test01()
-{
- bool test = true;
- std::string str01;
- const int size = 1000;
- const char name_02[] = "ostream_inserter_char-1.txt";
-
- // initialize string
- for(int i=0 ; i < size; i++) {
- str01 += '1';
- str01 += '2';
- str01 += '3';
- str01 += '4';
- str01 += '5';
- str01 += '6';
- str01 += '7';
- str01 += '8';
- str01 += '9';
- str01 += '\n';
- }
- std::ofstream f(name_02);
-
- f << str01;
- f.close();
-
- VERIFY( test );
- return test;
-}
-
-// ostringstream width() != zero
-// left
-bool test02(void)
-{
- bool test = true;
- std::string tmp;
-
- std::string str01 = "";
- std::ostringstream oss01;
- oss01.width(5);
- oss01.fill('0');
- oss01.flags(std::ios_base::left);
- oss01 << str01;
- tmp = oss01.str();
- VERIFY( tmp == "00000" );
-
- std::string str02 = "1";
- std::ostringstream oss02;
- oss02.width(5);
- oss02.fill('0');
- oss02.flags(std::ios_base::left);
- oss02 << str02;
- tmp = oss02.str();
- VERIFY( tmp == "10000" );
-
- std::string str03 = "909909";
- std::ostringstream oss03;
- oss03.width(5);
- oss03.fill('0');
- oss03.flags(std::ios_base::left);
- oss03 << str03;
- tmp = oss03.str();
- VERIFY( tmp == "909909" );
- return test;
-}
-
-// width() != zero
-// right
-bool test03(void)
-{
- bool test = true;
- std::string tmp;
-
- std::string str01 = "";
- std::ostringstream oss01;
- oss01.width(5);
- oss01.fill('0');
- oss01.flags(std::ios_base::right);
- oss01 << str01;
- tmp = oss01.str();
- VERIFY( tmp == "00000" );
-
- std::string str02 = "1";
- std::ostringstream oss02;
- oss02.width(5);
- oss02.fill('0');
- oss02.flags(std::ios_base::right);
- oss02 << str02;
- tmp = oss02.str();
- VERIFY( tmp == "00001" );
-
- std::string str03 = "909909";
- std::ostringstream oss03;
- oss03.width(5);
- oss03.fill('0');
- oss03.flags(std::ios_base::right);
- oss03 << str03;
- tmp = oss03.str();
- VERIFY( tmp == "909909" );
- return test;
-}
-
-// stringstream and large strings
-bool test04()
-{
- bool test = true;
- std::string str_01;
- const std::string str_02("coltrane playing 'softly as a morning sunrise'");
- const std::string str_03("coltrane");
- std::string str_tmp;
- const int i_max=250;
-
- std::ostringstream oss_01(std::ios_base::out);
- std::ostringstream oss_02(str_01, std::ios_base::out);
-
- std::ios_base::iostate state1, state2, statefail;
- statefail = std::ios_base::failbit;
-
- // template<_CharT, _Traits>
- // basic_ostream& operator<<(ostream&, const char*)
- for (int i = 0; i < i_max; ++i)
- oss_02 << "Test: " << i << std::endl;
- str_tmp = oss_02.str();
- VERIFY( !oss_02.bad() );
- VERIFY( oss_02.good() );
- VERIFY( str_tmp != str_01 );
- VERIFY( str_tmp.size() == 2390 );
- return test;
-}
-
-// ostringstream and large strings number 2
-bool test05()
-{
- bool test = true;
- std::string str05, str10;
-
- typedef std::ostream::pos_type pos_type;
- typedef std::ostream::off_type off_type;
- std::string str01;
- const int size = 1000;
-
- // initialize string
- for(int i=0 ; i < size; i++) {
- str01 += '1';
- str01 += '2';
- str01 += '3';
- str01 += '4';
- str01 += '5';
- str01 += '6';
- str01 += '7';
- str01 += '8';
- str01 += '9';
- str01 += '\n';
- }
-
- // test 1: out
- std::ostringstream sstr01(str01, std::ios_base::out);
- std::ostringstream sstr02;
- sstr02 << str01;
- str05 = sstr01.str();
- str10 = sstr02.str();
- VERIFY( str05 == str01 );
- VERIFY( str10 == str01 );
-
- // test 2: in | out
- std::ostringstream sstr04(str01, std::ios_base::out | std::ios_base::in);
- std::ostringstream sstr05(std::ios_base::in | std::ios_base::out);
- sstr05 << str01;
- str05 = sstr04.str();
- str10 = sstr05.str();
- VERIFY( str05 == str01 );
- VERIFY( str10 == str01 );
- return test;
-}
-
-
-// ostringstream and positioning, multiple writes
-// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00326.html
-void test06()
-{
- bool test = true;
- const char carray01[] = "mos def & talib kweli are black star";
-
- // normal
- std::ostringstream ostr1("mos def");
- VERIFY( ostr1.str() == "mos def" );
- ostr1 << " & talib kweli"; // should overwrite first part of buffer
- VERIFY( ostr1.str() == " & talib kweli" );
- ostr1 << " are black star"; // should append to string from above
- VERIFY( ostr1.str() != carray01 );
- VERIFY( ostr1.str() == " & talib kweli are black star" );
-
- // appending
- std::ostringstream ostr2("blackalicious",
- std::ios_base::out | std::ios_base::ate);
- VERIFY( ostr2.str() == "blackalicious" );
- ostr2 << " NIA "; // should not overwrite first part of buffer
- VERIFY( ostr2.str() == "blackalicious NIA " );
- ostr2 << "4: deception (5:19)"; // should append to full string from above
- VERIFY( ostr2.str() == "blackalicious NIA 4: deception (5:19)" );
-}
-
-// Global counter, needs to be reset after use.
-bool used;
-
-class gnu_ctype : public std::ctype<wchar_t>
-{
-protected:
- char_type
- do_widen(char c) const
- {
- used = true;
- return std::ctype<wchar_t>::do_widen(c);
- }
-
- const char*
- do_widen(const char* low, const char* high, char_type* dest) const
- {
- used = true;
- return std::ctype<wchar_t>::do_widen(low, high, dest);
- }
-};
-
-// 27.6.2.5.4 - Character inserter template functions
-// [lib.ostream.inserters.character]
-void test07()
-{
-#if _GLIBCPP_USE_WCHAR_T
- using namespace std;
- bool test = true;
-
- const char* buffer = "SFPL 5th floor, outside carrol, the Asian side";
-
- wostringstream oss;
- oss.imbue(locale(locale::classic(), new gnu_ctype));
-
- // 1
- // template<class charT, class traits>
- // basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& out,
- // const char* s);
- used = false;
- oss << buffer;
- VERIFY( used ); // Only required for char_type != char
- wstring str = oss.str();
- wchar_t c1 = oss.widen(buffer[0]);
- VERIFY( str[0] == c1 );
- wchar_t c2 = oss.widen(buffer[1]);
- VERIFY( str[1] == c2 );
-
- // 2
- // template<class charT, class traits>
- // basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& out,
- // char c);
- used = false;
- oss.str(wstring());
- oss << 'b';
- VERIFY( used ); // Only required for char_type != char
- str = oss.str();
- wchar_t c3 = oss.widen('b');
- VERIFY( str[0] == c3 );
-#endif
-}
-
-void test08()
-{
- bool test = true;
- char* pt = NULL;
-
- // 1
- std::ostringstream oss;
- oss << pt;
- VERIFY( oss.bad() );
- VERIFY( oss.str().size() == 0 );
-
- oss.clear();
- oss << "";
- VERIFY( oss.good() );
-
-#if _GLIBCPP_USE_WCHAR_T
- // 2
- std::wostringstream woss;
- woss << pt;
- VERIFY( woss.bad() );
- VERIFY( woss.str().size() == 0 );
-
- woss.clear();
- woss << "";
- VERIFY( woss.good() );
-
- // 3
- wchar_t* wt = NULL;
- woss.clear();
- woss << wt;
- VERIFY( woss.bad() );
- VERIFY( woss.str().size() == 0 );
-
- woss.clear();
- woss << L"";
- VERIFY( woss.good() );
-#endif
-}
-
-int main()
-{
- test01();
- test02();
- test03();
- test04();
- test05();
- test06();
- test07();
- test08();
- return 0;
-}
+++ /dev/null
-// 2000-06-29 bkoz
-
-// Copyright (C) 2000 Free Software Foundation
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 27.6.2.4 basic_ostream seek members
-
-#include <ostream>
-#include <sstream>
-#include <fstream>
-#include <testsuite_hooks.h>
-
-
-bool test01()
-{
- using namespace std;
- typedef ios::pos_type pos_type;
-
- bool test = true;
- const char str_lit01[] = "ostream_seeks-1.txt";
-
- // out
- // test default ctors leave things in the same positions...
- ostringstream ost1;
- pos_type p1 = ost1.tellp();
-
- ofstream ofs1;
- pos_type p2 = ofs1.tellp();
-
- VERIFY( p1 == p2 );
-
- // out
- // test ctors leave things in the same positions...
- ostringstream ost2("bob_marley:kaya");
- p1 = ost2.tellp();
-
- ofstream ofs2(str_lit01);
- p2 = ofs2.tellp();
-
- VERIFY( p1 == p2 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-#if 0
-// XXX FIX ME
-// basically this is the istreams_seeks.cc code. We need to fix it up
-// for ostreams......
-
-// fstreams
-void test04(void)
-{
- bool test = true;
- std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
- std::ios_base::iostate state01, state02;
- const char str_lit01[] = "istream_unformatted-1.txt";
- const char str_lit02[] = "istream_unformatted-2.txt";
- std::ifstream if01(str_lit01, std::ios_base::in | std::ios_base::out);
- std::ifstream if02(str_lit01, std::ios_base::in);
- std::ifstream if03(str_lit02, std::ios_base::out | std::ios_base::trunc);
- VERIFY( if01.good() );
- VERIFY( if02.good() );
- VERIFY( if03.good() );
-
- std::istream is01(if01.rdbuf());
- std::istream is02(if02.rdbuf());
- std::istream is03(if03.rdbuf());
-
- // pos_type tellp()
- // in | out
- pos01 = is01.tellp();
- pos02 = is01.tellp();
- VERIFY( pos01 == pos02 );
- // VERIFY( istream::pos_type(0) != pos01 ); //deprecated
-
- // in
- pos03 = is02.tellp();
- pos04 = is02.tellp();
- VERIFY( pos03 == pos04 );
- // VERIFY( istream::pos_type(0) != pos03 ); //deprecated
-
- // out
- pos05 = is03.tellp();
- pos06 = is03.tellp();
- VERIFY( pos05 == pos06 );
- // VERIFY( istream::pos_type(0) != pos01 ); //deprecated
-
- // istream& seekg(pos_type)
- // istream& seekg(off_type, ios_base::seekdir)
-
- // cur
- // NB: see library issues list 136. It's the v-3 interp that seekg
- // only sets the input buffer, or else istreams with buffers that
- // have _M_mode == ios_base::out will fail to have consistency
- // between seekg and tellp.
- state01 = is01.rdstate();
- is01.seekg(10, std::ios_base::cur);
- state02 = is01.rdstate();
- pos01 = is01.tellp();
- VERIFY( pos01 == pos02 + 10 );
- VERIFY( state01 == state02 );
- pos02 = is01.tellp();
- VERIFY( pos02 == pos01 );
-
- state01 = is02.rdstate();
- is02.seekg(10, std::ios_base::cur);
- state02 = is02.rdstate();
- pos03 = is02.tellp();
- VERIFY( pos03 == pos04 + 10 );
- VERIFY( state01 == state02 );
- pos04 = is02.tellp();
- VERIFY( pos03 == pos04 );
-
- state01 = is03.rdstate();
- is03.seekg(10, std::ios_base::cur);
- state02 = is03.rdstate();
- pos05 = is03.tellp();
- VERIFY( pos05 == pos06 + 10 );
- VERIFY( state01 == state02 );
- pos06 = is03.tellp();
- VERIFY( pos05 == pos06 );
-
- // beg
- state01 = is01.rdstate();
- is01.seekg(20, std::ios_base::beg);
- state02 = is01.rdstate();
- pos01 = is01.tellp();
- VERIFY( pos01 == pos02 + 10 );
- VERIFY( state01 == state02 );
- pos02 = is01.tellp();
- VERIFY( pos02 == pos01 );
-
- state01 = is02.rdstate();
- is02.seekg(20, std::ios_base::beg);
- state02 = is02.rdstate();
- pos03 = is02.tellp();
- VERIFY( pos03 == pos04 + 10 );
- VERIFY( state01 == state02 );
- pos04 = is02.tellp();
- VERIFY( pos03 == pos04 );
-
- state01 = is03.rdstate();
- is03.seekg(20, std::ios_base::beg);
- state02 = is03.rdstate();
- pos05 = is03.tellp();
- VERIFY( pos05 == pos06 + 10 );
- VERIFY( state01 == state02 );
- pos06 = is03.tellp();
- VERIFY( pos05 == pos06 );
-
- // libstdc++/6414
- if01.seekg(0, std::ios_base::beg);
- pos01 = if01.tellg();
- if01.peek();
- pos02 = if01.tellg();
- VERIFY( pos02 == pos01 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-// stringstreams
-void test05(void)
-{
- bool test = true;
- std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
- std::ios_base::iostate state01, state02;
- const char str_lit01[] = "istream_unformatted-1.tst";
- std::ifstream if01(str_lit01);
- std::ifstream if02(str_lit01);
- std::ifstream if03(str_lit01);
- VERIFY( if01.good() );
- VERIFY( if02.good() );
- VERIFY( if03.good() );
-
- std::stringbuf strbuf01(std::ios_base::in | std::ios_base::out);
- if01 >> &strbuf01;
- // initialize stringbufs that are ios_base::out
- std::stringbuf strbuf03(strbuf01.str(), std::ios_base::out);
- // initialize stringbufs that are ios_base::in
- std::stringbuf strbuf02(strbuf01.str(), std::ios_base::in);
-
- std::istream is01(&strbuf01);
- std::istream is02(&strbuf02);
- std::istream is03(&strbuf03);
-
- // pos_type tellp()
- // in | out
- pos01 = is01.tellp();
- pos02 = is01.tellp();
- VERIFY( pos01 == pos02 );
- // VERIFY( istream::pos_type(0) != pos01 ); // deprecated
-
- // in
- pos03 = is02.tellp();
- pos04 = is02.tellp();
- VERIFY( pos03 == pos04 );
- // VERIFY( istream::pos_type(0) != pos03 ); // deprecated
-
- // out
- pos05 = is03.tellp();
- pos06 = is03.tellp();
- VERIFY( pos05 == pos06 );
- // VERIFY( istream::pos_type(0) != pos01 ); //deprecated
-
- // istream& seekg(pos_type)
- // istream& seekg(off_type, ios_base::seekdir)
-
- // cur
- // NB: see library issues list 136. It's the v-3 interp that seekg
- // only sets the input buffer, or else istreams with buffers that
- // have _M_mode == ios_base::out will fail to have consistency
- // between seekg and tellp.
- state01 = is01.rdstate();
- is01.seekg(10, std::ios_base::cur);
- state02 = is01.rdstate();
- pos01 = is01.tellp();
- VERIFY( pos01 == pos02 + 10 );
- VERIFY( state01 == state02 );
- pos02 = is01.tellp();
- VERIFY( pos02 == pos01 );
-
- state01 = is02.rdstate();
- is02.seekg(10, std::ios_base::cur);
- state02 = is02.rdstate();
- pos03 = is02.tellp();
- VERIFY( pos03 == pos04 + 10 );
- VERIFY( state01 == state02 );
- pos04 = is02.tellp();
- VERIFY( pos03 == pos04 );
-
- state01 = is03.rdstate();
- is03.seekg(10, std::ios_base::cur);
- state02 = is03.rdstate();
- pos05 = is03.tellp();
- VERIFY( pos05 == pos06 ); // as only out buffer
- VERIFY( state01 == state02 );
- pos06 = is03.tellp();
- VERIFY( pos05 == pos06 );
-
- // beg
- state01 = is01.rdstate();
- is01.seekg(20, std::ios_base::beg);
- state02 = is01.rdstate();
- pos01 = is01.tellp();
- VERIFY( pos01 == pos02 + 10 );
- VERIFY( state01 == state02 );
- pos02 = is01.tellp();
- VERIFY( pos02 == pos01 );
-
- state01 = is02.rdstate();
- is02.seekg(20, std::ios_base::beg);
- state02 = is02.rdstate();
- pos03 = is02.tellp();
- VERIFY( pos03 == pos04 + 10 );
- VERIFY( state01 == state02 );
- pos04 = is02.tellp();
- VERIFY( pos03 == pos04 );
-
- state01 = is03.rdstate();
- is03.seekg(20, std::ios_base::beg);
- state02 = is03.rdstate();
- pos05 = is03.tellp();
- VERIFY( pos05 == pos06 ); // as only out buffer
- VERIFY( state01 == state02 );
- pos06 = is03.tellp();
- VERIFY( pos05 == pos06 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-#endif // XXX
-
-int main()
-{
- test01();
- // test04();
- // test05();
- return 0;
-}
+++ /dev/null
-// 1999-10-11 bkoz
-
-// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// 27.5.2 template class basic_streambuf
-
-#include <cstring> // for memset, memcmp
-#include <streambuf>
-#include <sstream>
-#include <ostream>
-#include <testsuite_hooks.h>
-
-class testbuf : public std::streambuf
-{
-public:
-
- // Typedefs:
- typedef std::streambuf::traits_type traits_type;
- typedef std::streambuf::char_type char_type;
-
- testbuf(): std::streambuf()
- { _M_mode = (std::ios_base::in | std::ios_base::out); }
-
- bool
- check_pointers()
- {
- bool test = true;
- VERIFY( this->eback() == NULL );
- VERIFY( this->gptr() == NULL );
- VERIFY( this->egptr() == NULL );
- VERIFY( this->pbase() == NULL );
- VERIFY( this->pptr() == NULL );
- VERIFY( this->epptr() == NULL );
- return test;
- }
-
- int_type
- pub_uflow()
- { return (this->uflow()); }
-
- int_type
- pub_overflow(int_type __c = traits_type::eof())
- { return (this->overflow(__c)); }
-
- int_type
- pub_pbackfail(int_type __c)
- { return (this->pbackfail(__c)); }
-
- void
- pub_setg(char* beg, char* cur, char *end)
- { this->setg(beg, cur, end); }
-
- void
- pub_setp(char* beg, char* end)
- { this->setp(beg, end); }
-
-protected:
- int_type
- underflow()
- {
- int_type __retval = traits_type::eof();
- if (this->gptr() < this->egptr())
- __retval = traits_type::not_eof(0);
- return __retval;
- }
-};
-
-void test01()
-{
- typedef testbuf::traits_type traits_type;
- typedef testbuf::int_type int_type;
-
- bool test = true;
- char* lit01 = "chicago underground trio/possible cube on delmark";
- testbuf buf01;
-
- // 27.5.2.1 basic_streambuf ctors
- // default ctor initializes
- // - all pointer members to null pointers
- // - locale to current global locale
- VERIFY( buf01.check_pointers() );
- VERIFY( buf01.getloc() == std::locale() );
-
- // 27.5.2.3.1 get area
- // 27.5.2.2.3 get area
- // 27.5.2.4.3 get area
- int i01 = 3;
- buf01.pub_setg(lit01, lit01, (lit01 + i01));
- VERIFY( i01 == buf01.in_avail() );
-
- VERIFY( buf01.pub_uflow() == lit01[0] );
- VERIFY( buf01.sgetc() == traits_type::to_int_type(lit01[1]) );
- VERIFY( buf01.pub_uflow() == lit01[1] );
- VERIFY( buf01.sgetc() == traits_type::to_int_type(lit01[2]) );
- VERIFY( buf01.pub_uflow() == lit01[2] );
- VERIFY( buf01.sgetc() == traits_type::eof() );
-
- // pbackfail
- buf01.pub_setg(lit01, lit01, (lit01 + i01));
- VERIFY( i01 == buf01.in_avail() );
- int_type intt01 = traits_type::to_int_type('b');
- VERIFY( traits_type::eof() == buf01.pub_pbackfail(intt01) );
-
- // overflow
- VERIFY( traits_type::eof() == buf01.pub_overflow(intt01) );
- VERIFY( traits_type::eof() == buf01.pub_overflow() );
- VERIFY( buf01.sgetc() == traits_type::to_int_type(lit01[0]) );
-
- // sputn/xsputn
- char* lit02 = "isotope 217: the unstable molecule on thrill jockey";
- int i02 = std::strlen(lit02);
- char carray[i02 + 1];
- std::memset(carray, 0, i02 + 1);
-
- buf01.pub_setp(carray, (carray + i02));
- buf01.sputn(lit02, 0);
- VERIFY( carray[0] == 0 );
- VERIFY( lit02[0] == 'i' );
- buf01.sputn(lit02, 1);
- VERIFY( lit02[0] == carray[0] );
- VERIFY( lit02[1] == 's' );
- VERIFY( carray[1] == 0 );
- buf01.sputn(lit02 + 1, 10);
- VERIFY( std::memcmp(lit02, carray, 10) == 0 );
- buf01.sputn(lit02 + 11, 20);
- VERIFY( std::memcmp(lit02, carray, 30) == 0 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-void test02()
-{
- typedef testbuf::traits_type traits_type;
- typedef testbuf::int_type int_type;
-
- bool test = true;
- char* lit01 = "chicago underground trio/possible cube on delmark";
- testbuf buf01;
-
- // 27.5.2.1 basic_streambuf ctors
- // default ctor initializes
- // - all pointer members to null pointers
- // - locale to current global locale
- VERIFY( buf01.check_pointers() );
- VERIFY( buf01.getloc() == std::locale() );
-
- // 27.5.2.2.5 Put area
- size_t i01 = traits_type::length(lit01);
- char carray01[i01];
- std::memset(carray01, 0, i01);
-
- buf01.pub_setg(lit01, lit01, lit01 + i01);
- buf01.sgetn(carray01, 0);
- VERIFY( carray01[0] == 0 );
- buf01.sgetn(carray01, 1);
- VERIFY( carray01[0] == 'c' );
- buf01.sgetn(carray01 + 1, i01 - 1);
- VERIFY( carray01[0] == 'c' );
- VERIFY( carray01[1] == 'h' );
- VERIFY( carray01[i01 - 1] == 'k' );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-// test03
-// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00151.html
-template<typename charT, typename traits = std::char_traits<charT> >
- class basic_nullbuf : public std::basic_streambuf<charT, traits>
- {
- protected:
- typedef typename
- std::basic_streambuf<charT, traits>::int_type int_type;
- virtual int_type
- overflow(int_type c)
- { return traits::not_eof(c); }
- };
-
-typedef basic_nullbuf<char> nullbuf;
-typedef basic_nullbuf<wchar_t> wnullbuf;
-
-template<typename T>
- char
- print(const T& x)
- {
- nullbuf ob;
- std::ostream out(&ob);
- out << x << std::endl;
- return (!out ? '0' : '1');
- }
-
-void test03()
-{
- bool test = true;
- const std::string control01("11111");
- std::string test01;
-
- test01 += print(true);
- test01 += print(3.14159);
- test01 += print(10);
- test01 += print('x');
- test01 += print("pipo");
-
- VERIFY( test01 == control01 );
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-class setpbuf : public std::streambuf
-{
- char buffer[4];
- std::string result;
-
-public:
-
- std::string&
- get_result()
- { return result; }
-
- setpbuf()
- {
- char foo [32];
- setp(foo, foo + 32);
- setp(buffer, buffer + 4);
- }
-
- ~setpbuf()
- { sync(); }
-
- virtual int_type
- overflow(int_type n)
- {
- if (sync() != 0)
- return traits_type::eof();
-
- result += traits_type::to_char_type(n);
-
- return n;
- }
-
- virtual int
- sync()
- {
- result.append(pbase(), pptr());
- setp(buffer, buffer + 4);
- return 0;
- }
-};
-
-// libstdc++/1057
-void test04()
-{
- bool test = true;
- std::string text = "abcdefghijklmn";
-
- // 01
- setpbuf sp1;
- // Here xsputn writes over sp1.result
- sp1.sputn(text.c_str(), text.length());
-
- // This crashes when result is accessed
- sp1.pubsync();
- VERIFY( sp1.get_result() == text );
-
-
- // 02
- setpbuf sp2;
- for (std::string::size_type i = 0; i < text.length(); ++i)
- {
- // sputc also writes over result
- sp2.sputc(text[i]);
- }
-
- // Crash here
- sp2.pubsync();
- VERIFY( sp2.get_result() == text );
-}
-
-class nullsetpbuf : public std::streambuf
-{
- char foo[64];
-public:
- nullsetpbuf()
- {
- setp(foo, foo + 64);
- setp(NULL, NULL);
- }
-};
-
-// libstdc++/1057
-void test05()
-{
- std::string text1 = "abcdefghijklmn";
-
- nullsetpbuf nsp;
- // Immediate crash as xsputn writes to null pointer
- nsp.sputn(text1.c_str(), text1.length());
- // ditto
- nsp.sputc('a');
-}
-
-// test06
-namespace gnu
-{
- class something_derived;
-}
-
-class gnu::something_derived : std::streambuf { };
-
-// libstdc++/3599
-class testbuf2 : public std::streambuf
-{
-public:
- typedef std::streambuf::traits_type traits_type;
-
- testbuf2() : std::streambuf() { }
-
-protected:
- int_type
- overflow(int_type c = traits_type::eof())
- { return traits_type::not_eof(0); }
-};
-
-void
-test07()
-{
- bool test = true;
- testbuf2 ob;
- std::ostream out(&ob);
-
- out << "gasp";
- VERIFY(out.good());
-
- out << std::endl;
- VERIFY(out.good());
-}
-
-// libstdc++/9322
-void test08()
-{
- using std::locale;
- bool test = true;
-
- locale loc;
- testbuf2 ob;
- VERIFY( ob.getloc() == loc );
-
- locale::global(locale("en_US"));
- VERIFY( ob.getloc() == loc );
-
- locale loc_de ("de_DE");
- locale ret = ob.pubimbue(loc_de);
- VERIFY( ob.getloc() == loc_de );
- VERIFY( ret == loc );
-
- locale::global(loc);
- VERIFY( ob.getloc() == loc_de );
-}
-
-// libstdc++/9318
-class Outbuf : public std::streambuf
-{
-public:
- typedef std::streambuf::traits_type traits_type;
-
- std::string result() const { return str; }
-
-protected:
- virtual int_type overflow(int_type c = traits_type::eof())
- {
- if (!traits_type::eq_int_type(c, traits_type::eof()))
- str.push_back(traits_type::to_char_type(c));
- return traits_type::not_eof(c);
- }
-
-private:
- std::string str;
-};
-
-// <1>
-void test09()
-{
- bool test = true;
-
- std::istringstream stream("Bad Moon Rising");
- Outbuf buf;
- stream >> &buf;
-
- VERIFY( buf.result() == "Bad Moon Rising" );
-}
-
-// <2>
-void test10()
-{
- bool test = true;
-
- std::stringbuf sbuf("Bad Moon Rising", std::ios::in);
- Outbuf buf;
- std::ostream stream(&buf);
- stream << &sbuf;
-
- VERIFY( buf.result() == "Bad Moon Rising" );
-}
-
-// libstdc++/9424
-class Outbuf_2 : public std::streambuf
-{
- char buf[1];
-
-public:
- Outbuf_2()
- {
- setp(buf, buf + 1);
- }
-
- int_type overflow(int_type c)
- {
- int_type eof = traits_type::eof();
-
- if (pptr() < epptr())
- {
- if (traits_type::eq_int_type(c, eof))
- return traits_type::not_eof(c);
-
- *pptr() = traits_type::to_char_type(c);
- pbump(1);
- return c;
- }
-
- return eof;
- }
-};
-
-class Inbuf_2 : public std::streambuf
-{
- static const char buf[];
- const char* current;
- int size;
-
-public:
- Inbuf_2()
- {
- current = buf;
- size = std::strlen(buf);
- }
-
- int_type underflow()
- {
- if (current < buf + size)
- return traits_type::to_int_type(*current);
- return traits_type::eof();
- }
-
- int_type uflow()
- {
- if (current < buf + size)
- return traits_type::to_int_type(*current++);
- return traits_type::eof();
- }
-};
-
-const char Inbuf_2::buf[] = "Atteivlis";
-
-// <1>
-void test11()
-{
- bool test = true;
-
- Inbuf_2 inbuf1;
- std::istream is(&inbuf1);
- Outbuf_2 outbuf1;
- is >> &outbuf1;
- VERIFY( inbuf1.sgetc() == 't' );
- VERIFY( is.good() );
-}
-
-// <2>
-void test12()
-{
- bool test = true;
-
- Outbuf_2 outbuf2;
- std::ostream os (&outbuf2);
- Inbuf_2 inbuf2;
- os << &inbuf2;
- VERIFY( inbuf2.sgetc() == 't' );
- VERIFY( os.good() );
-}
-
-int main()
-{
- test01();
- test02();
- test03();
-
- test04();
- test05();
-
- test07();
- __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test08);
-
- test09();
- test10();
- test11();
- test12();
- return 0;
-}
+++ /dev/null
-// 981208 bkoz test functionality of basic_stringbuf for char_type == char
-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
-// Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-#include <sstream>
-#include <testsuite_hooks.h>
-
-std::string str_01("mykonos. . . or what?");
-std::string str_02("paris, or sainte-maxime?");
-std::string str_03;
-std::stringbuf strb_01(str_01);
-std::stringbuf strb_02(str_02, std::ios_base::in);
-std::stringbuf strb_03(str_03, std::ios_base::out);
-
-
-// test the underlying allocator
-bool test01() {
- bool test = false;
- std::allocator<char> alloc_01;
- std::allocator<char>::size_type size_01 = alloc_01.max_size();
- std::allocator<char>::pointer p_01 = alloc_01.allocate(32);
-
- return true;
-}
-
-
-// test the streambuf/stringbuf locale settings
-bool test02() {
- std::locale loc_tmp;
- loc_tmp = strb_01.getloc();
- strb_01.pubimbue(loc_tmp); //This should initialize _M_init to true
- strb_01.getloc(); //This should just return _M_locale
-
- return true;
-}
-
-
-// test member functions
-bool test03() {
- bool test = true;
-
- //stringbuf::str()
- VERIFY( strb_01.str() == str_01 );
- VERIFY( strb_02.str() == str_02 );
- VERIFY( strb_03.str() == str_03 );
-
- //stringbuf::str(string&)
- strb_03.str("none of the above, go to the oberoi in cairo, egypt.");
- strb_03.str(str_01);
- std::streamsize d1 = strb_01.in_avail();
- std::streamsize d2 = strb_03.in_avail();
- VERIFY( d1 ); // non-zero
- VERIFY( !d2 ); // zero, cuz ios_base::out
- VERIFY( d1 != d2 ); //these should be the same
- VERIFY( str_01.length() == d1 );
- VERIFY( strb_01.str() == strb_03.str() ); //ditto
-
- // stringbuf::str(string&) and stringbuf::stringbuf(string&), where the
- // string in question contains embedded NUL characters. Note that in this
- // embedded-NUL situation, the size must be passed to the string ctor.
- std::string str_nulls ("eschew \0 obfuscation", 20); // tested in 21_strings
- std::stringbuf strb_normal (str_01);
- std::stringbuf strb_nulls (str_nulls);
- strb_normal.str(str_nulls); // tried using 'strb_01' rather than declaring
- // another variable, but then test04 broke!
- VERIFY( strb_nulls.in_avail() == str_nulls.size() );
- VERIFY( strb_nulls.str().size() == 20 );
- VERIFY( strb_normal.in_avail() == str_nulls.size() );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-
-// test overloaded virtual functions
-bool test04() {
- bool test = true;
- std::string str_tmp;
- std::stringbuf strb_tmp;
- std::streamsize strmsz_1, strmsz_2;
- std::streamoff strmof_1(-1), strmof_2;
- typedef std::stringbuf::int_type int_type;
- typedef std::stringbuf::traits_type traits_type;
- typedef std::stringbuf::pos_type pos_type;
- typedef std::stringbuf::off_type off_type;
-
- // GET
- // int in_avail()
- strmof_1 = strb_01.in_avail();
- strmof_2 = strb_02.in_avail();
- VERIFY( strmof_1 != strmof_2 );
- VERIFY( strmof_1 == str_01.length() );
- VERIFY( strmof_2 == str_02.length() );
- strmof_1 = strb_03.in_avail();
- VERIFY( strmof_1 == 0 ); // zero cuz write-only, or eof()? zero, from showmany
-
- // int_type sbumpc()
- // if read_cur not avail, return uflow(), else return *read_cur & increment
- int_type c1 = strb_01.sbumpc();
- int_type c2 = strb_02.sbumpc();
- VERIFY( c1 != c2 );
- VERIFY( c1 == str_01[0] );
- VERIFY( c2 == str_02[0] ); //should equal first letter at this point
- int_type c3 = strb_01.sbumpc();
- int_type c4 = strb_02.sbumpc();
- VERIFY( c1 != c2 );
- VERIFY( c1 != c3 );
- VERIFY( c2 != c4 );
- int_type c5 = strb_03.sbumpc();
- VERIFY( c5 == traits_type::eof() );
-
- // int_type sgetc()
- // if read_cur not avail, return uflow(), else return *read_cur
- int_type c6 = strb_01.sgetc();
- int_type c7 = strb_02.sgetc();
- VERIFY( c6 != c3 );
- VERIFY( c7 != c4 );
- int_type c8 = strb_01.sgetc();
- int_type c9 = strb_02.sgetc();
- VERIFY( c6 == c8 );
- VERIFY( c7 == c9 );
- c5 = strb_03.sgetc();
- VERIFY( c5 == traits_type::eof() );
-
- // int_type snextc()
- // calls sbumpc and if sbumpc != eof, return sgetc
- c6 = strb_01.snextc();
- c7 = strb_02.snextc();
- VERIFY( c6 != c8 );
- VERIFY( c7 != c9 );
- VERIFY( c6 == str_01[3] );
- VERIFY( c7 == str_02[3] ); //should equal fourth letter at this point
- c5 = strb_03.snextc();
- VERIFY( c5 == traits_type::eof() );
-
- // int showmanyc
- // streamsize sgetn(char_type *s, streamsize n)
- // streamsize xsgetn(char_type *s, streamsize n)
- // assign up to n chars to s from input sequence, indexing in_cur as
- // approp and returning the number of chars assigned
- strmsz_1 = strb_01.in_avail();
- strmsz_2 = strb_02.in_avail();
- test = strmsz_1 != strmsz_2;
- VERIFY( strmsz_1 != str_01.length() );
- VERIFY( strmsz_2 != str_02.length() ); //because now we've moved into string
- char carray1[11] = "";
- strmsz_1 = strb_01.sgetn(carray1, 10);
- char carray2[20] = "";
- strmsz_2 = strb_02.sgetn(carray2, 10);
- VERIFY( strmsz_1 == strmsz_2 );
- VERIFY( strmsz_1 == 10 );
- c1 = strb_01.sgetc();
- c2 = strb_02.sgetc();
- VERIFY( c6 == c1 ); //just by co-incidence both o's
- VERIFY( c7 != c2 ); // n != i
- VERIFY( c1 == str_01[13] );
- VERIFY( c2 == str_02[13] ); //should equal fourteenth letter at this point
- strmsz_1 = strb_03.sgetn(carray1, 10);
- VERIFY( !strmsz_1 ); //zero
- strmsz_1 = strb_02.in_avail();
- strmsz_2 = strb_02.sgetn(carray2, strmsz_1 + 5);
- VERIFY( strmsz_1 == strmsz_2 ); //write off the end
- c4 = strb_02.sgetc(); // should be EOF
- VERIFY( c4 == traits_type::eof() );
-
- // PUT
- // int_type sputc(char_type c)
- // if out_cur not avail, return overflow. Else, stores c at out_cur,
- // increments out_cur, and returns c as int_type
- strb_03.str(str_01); //reset
- std::string::size_type sz1 = strb_03.str().length();
- c1 = strb_03.sputc('a');
- std::string::size_type sz2 = strb_03.str().length();
- VERIFY( sz1 == sz2 ); //cuz inserting at out_cur, which is at beg to start
- c2 = strb_03.sputc('b');
- VERIFY( c1 != c2 );
- VERIFY( strb_03.str() != str_01 );
- c3 = strb_02.sputc('a'); // should be EOF because this is read-only
- VERIFY( c3 == traits_type::eof() );
-
- // streamsize sputn(const char_typs* s, streamsize n)
- // write up to n chars to out_cur from s, returning number assigned
- // NB *sputn will happily put '\0' into your stream if you give it a chance*
- str_tmp = strb_03.str();
- sz1 = str_tmp.length();
- strmsz_1 = strb_03.sputn("racadabras", 10);//"abracadabras or what?"
- sz2 = strb_03.str().length();
- VERIFY( sz1 == sz2 ); //shouldn't have changed length
- VERIFY( strmsz_1 == 10 );
- VERIFY( str_tmp != strb_03.str() );
- strmsz_2 = strb_03.sputn(", i wanna reach out and", 10);
- VERIFY( strmsz_1 == strmsz_2 ); // should re-allocate, copy 10 chars.
- VERIFY( strmsz_1 == 10 );
- VERIFY( strmsz_2 == 10 );
- sz2 = strb_03.str().length();
- VERIFY( sz1 != sz2 ); // need to change length
- VERIFY( str_tmp != strb_03.str() );
- str_tmp = strb_02.str();
- strmsz_1 = strb_02.sputn("racadabra", 10);
- VERIFY( strmsz_1 == 0 );
- VERIFY( str_tmp == strb_02.str() );
-
- // PUTBACK
- // int_type pbfail(int_type c)
- // called when gptr() null, gptr() == eback(), or traits::eq(*gptr, c) false
- // "pending sequence" is:
- // 1) everything as defined in underflow
- // 2) + if (traits::eq_int_type(c, traits::eof()), then input
- // sequence is backed up one char before the pending sequence is
- // determined.
- // 3) + if (not 2) then c is prepended. Left unspecified is
- // whether the input sequence is backedup or modified in any way
- // returns traits::eof() for failure, unspecified other value for success
-
- // int_type sputbackc(char_type c)
- // if in_cur not avail || ! traits::eq(c, gptr() [-1]), return pbfail
- // otherwise decrements in_cur and returns *gptr()
- strmsz_1 = strb_01.in_avail();
- str_tmp = strb_01.str();
- c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
- c2 = strb_01.sputbackc('z');//"mykonos. . .zor what?"
- c3 = strb_01.sgetc();
- VERIFY( c1 != c2 );
- VERIFY( c3 == c2 );
- VERIFY( strb_01.str() == std::string("mykonos. . .zor what?") );
- VERIFY( str_tmp.size() == strb_01.str().size() );
- //test for _in_cur == _in_beg
- strb_01.str(str_tmp);
- strmsz_1 = strb_01.in_avail();
- c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
- c2 = strb_01.sputbackc('z');//"mykonos. . . or what?"
- c3 = strb_01.sgetc();
- VERIFY( c1 != c2 );
- VERIFY( c3 != c2 );
- VERIFY( c1 == c3 );
- VERIFY( c2 == traits_type::eof() );
- VERIFY( strb_01.str() == str_tmp );
- VERIFY( str_tmp.size() == strb_01.str().size() );
- // test for replacing char with identical one
- strb_01.str(str_01); //reset
- strmsz_1 = strb_01.in_avail();
- strb_01.sbumpc();
- strb_01.sbumpc();
- c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
- c2 = strb_01.sputbackc('y');//"mykonos. . . or what?"
- c3 = strb_01.sgetc();
- VERIFY( c1 != c2 );
- VERIFY( c3 == c2 );
- VERIFY( c1 != c3 );
- VERIFY( strb_01.str() == str_01 );
- VERIFY( str_01.size() == strb_01.str().size() );
- //test for ios_base::out
- strmsz_2 = strb_03.in_avail();
- c4 = strb_03.sputbackc('x');
- VERIFY( c4 == traits_type::eof() );
-
- // int_type sungetc()
- // if in_cur not avail, return pbackfail(), else decrement and
- // return to_int_type(*gptr())
- for (int i = 0; i<12; ++i)
- strb_01.sbumpc();
- strmsz_1 = strb_01.in_avail();
- str_tmp = strb_01.str();
- c1 = strb_01.sgetc(); //"mykonos. . . 'o'r what?"
- c2 = strb_01.sungetc();//"mykonos. . . or what?"
- c3 = strb_01.sgetc();
- VERIFY( c1 != c2 );
- VERIFY( c3 == c2 );
- VERIFY( c1 != c3 );
- VERIFY( c2 == ' ' );
- VERIFY( strb_01.str() == str_01 );
- VERIFY( str_01.size() == strb_01.str().size() );
- //test for _in_cur == _in_beg
- strb_01.str(str_tmp);
- strmsz_1 = strb_01.in_avail();
- c1 = strb_01.sgetc(); //"'m'ykonos. . . or what?"
- c2 = strb_01.sungetc();//"mykonos. . . or what?"
- c3 = strb_01.sgetc();
- VERIFY( c1 != c2 );
- VERIFY( c3 != c2 );
- VERIFY( c1 == c3 );
- VERIFY( c2 == traits_type::eof() );
- VERIFY( strb_01.str() == str_01 );
- VERIFY( str_01.size() == strb_01.str().size() );
- // test for replacing char with identical one
- strb_01.str(str_01); //reset
- strmsz_1 = strb_01.in_avail();
- strb_01.sbumpc();
- strb_01.sbumpc();
- c1 = strb_01.sgetc(); //"my'k'onos. . . or what?"
- c2 = strb_01.sungetc();//"mykonos. . . or what?"
- c3 = strb_01.sgetc();
- VERIFY( c1 != c2 );
- VERIFY( c3 == c2 );
- VERIFY( c1 != c3 );
- VERIFY( strb_01.str() == str_01 );
- VERIFY( str_01.size() == strb_01.str().size() );
- //test for ios_base::out
- strmsz_2 = strb_03.in_avail();
- c4 = strb_03.sungetc();
- VERIFY( c4 == traits_type::eof() );
-
- // BUFFER MANAGEMENT & POSITIONING
- // sync
- // pubsync
- strb_01.pubsync();
- strb_02.pubsync();
- strb_03.pubsync();
-
- // setbuf
- // pubsetbuf(char_type* s, streamsize n)
- str_tmp = std::string("naaaah, go to cebu");
- strb_01.pubsetbuf(const_cast<char*> (str_tmp.c_str()), str_tmp.size());
- VERIFY( strb_01.str() == str_tmp );
- strb_01.pubsetbuf(0,0);
- VERIFY( strb_01.str() == str_tmp );
-
- // seekoff
- // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
- // alters the stream position to off
- pos_type pt_1(off_type(-1));
- pos_type pt_2(off_type(0));
- off_type off_1 = 0;
- off_type off_2 = 0;
- strb_01.str(str_01); //in|out ("mykonos. . . or what?");
- strb_02.str(str_02); //in ("paris, or sainte-maxime?");
- strb_03.str(str_03); //out ("")
- //IN|OUT
- //beg
- pt_1 = strb_01.pubseekoff(2, std::ios_base::beg);
- off_1 = pt_1;
- VERIFY( off_1 >= 0 );
- c1 = strb_01.snextc(); //current in pointer +1
- VERIFY( c1 == 'o' );
- c2 = strb_01.sputc('x'); //test current out pointer
- str_tmp = std::string("myxonos. . . or what?");
- VERIFY( strb_01.str() == str_tmp );
- //cur
- pt_1 = strb_01.pubseekoff(2, std::ios_base::cur);
- off_1 = pt_1;
- VERIFY( off_1 == -1 ); // can't seekoff for in and out + cur in sstreams
- pt_1 = strb_01.pubseekoff(2, std::ios_base::cur, std::ios_base::in);
- off_1 = pt_1;
- pt_2 = strb_01.pubseekoff(2, std::ios_base::cur, std::ios_base::in);
- off_2 = pt_2;
- VERIFY( off_2 == off_1 + 2 );
- c1 = strb_01.snextc(); //current in pointer + 1
- VERIFY( c1 == ' ' );
- c2 = strb_01.sputc('x'); //test current out pointer
- str_tmp = std::string("myxxnos. . . or what?");
- VERIFY( strb_01.str() == str_tmp );
- //end
- pt_2 = strb_01.pubseekoff(2, std::ios_base::end);
- off_1 = pt_2;
- VERIFY( off_1 == -1 ); // not a valid position
- VERIFY( strb_01.str() == str_tmp );
- // end part two (from the filebuf tests)
- strb_01.pubseekoff(0, std::ios_base::end);
- strmsz_1 = strb_01.in_avail(); // 0 cuz at the end
- c1 = strb_01.sgetc();
- c2 = strb_01.sungetc();
- strmsz_2 = strb_01.in_avail(); // 1
- c3 = strb_01.sgetc();
- VERIFY( c1 != c2 );
- VERIFY( strmsz_2 != strmsz_1 );
- VERIFY( strmsz_2 == 1 );
- // end part three
- strmsz_1 = strb_01.str().size();
- strmsz_2 = strb_01.sputn(" ravi shankar meets carlos santana in LoHa", 90);
- strb_01.pubseekoff(0, std::ios_base::end);
- strb_01.sputc('<');
- str_tmp = strb_01.str();
- VERIFY( str_tmp.size() == strmsz_1 + strmsz_2 + 1 );
- // IN
- // OUT
-
- // seekpos
- // pubseekpos(pos_type sp, ios_base::openmode)
- // alters the stream position to sp
- strb_01.str(str_01); //in|out ("mykonos. . . or what?");
- strb_02.str(str_02); //in ("paris, or sainte-maxime?");
- strb_03.str(str_03); //out ("")
- //IN|OUT
- //beg
- pt_1 = strb_01.pubseekoff(2, std::ios_base::beg);
- off_1 = pt_1;
- VERIFY( off_1 >= 0 );
- pt_1 = strb_01.pubseekoff(0, std::ios_base::cur, std::ios_base::out);
- off_1 = pt_1;
- c1 = strb_01.snextc(); //current in pointer +1
- VERIFY( c1 == 'o' );
- c2 = strb_01.sputc('x'); //test current out pointer
- str_tmp = std::string("myxonos. . . or what?");
- VERIFY( strb_01.str() == str_tmp );
- strb_01.pubsync(); //resets pointers
- pt_2 = strb_01.pubseekpos(pt_1, std::ios_base::in|std::ios_base::out);
- off_2 = pt_2;
- VERIFY( off_1 == off_2 );
- c3 = strb_01.snextc(); //current in pointer +1
- VERIFY( c1 == c3 );
- c2 = strb_01.sputc('x'); //test current out pointer
- str_tmp = std::string("myxonos. . . or what?");
- VERIFY( strb_01.str() == str_tmp );
-
- // VIRTUALS (indirectly tested)
- // underflow
- // if read position avail, returns *gptr()
-
- // pbackfail(int_type c)
- // put c back into input sequence
-
- // overflow
- // appends c to output seq
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-
-// libstdc++/3955 -- ios_base::app overwrites from the beginning
-bool test05()
-{
- bool test = true;
-
- std::ostringstream os ("foo");
- os << "bar";
-
- test = os.str() == "bar";
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-bool test06()
-{
- bool test = true;
-
- std::ostringstream os ("foo", std::ios_base::app);
- os << "bar";
-
- test = os.str() == "foobar";
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2003-02/msg00269.html
-// Growing and then seeking to ios_base::beg triggered a bug in str(),
-// which didn't notice the grow.
-bool test07()
-{
- bool test = true;
-
- std::stringbuf strb_01;
- strb_01.sputc('s');
- strb_01.pubseekoff(0, std::ios_base::beg);
- VERIFY( strb_01.str() == "s" );
-
- std::string str("strivi,");
- std::stringbuf strb_02(str);
- strb_02.pubseekoff(0, std::ios_base::end);
- strb_02.sputn(" no better!", 11);
- strb_02.pubseekoff(0, std::ios_base::beg);
- VERIFY( strb_02.str() == "strivi, no better!" );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-int main()
-{
- test01();
- test02();
- test03();
- test04();
- test05();
- test06();
- test07();
-
- return 0;
-}
-
-
-
-// more candy!!!
+++ /dev/null
-// 2001-05-21 Benjamin Kosnik <bkoz@redhat.com>
-
-// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 27.7.1.3 Overridden virtual functions
-
-#include <sstream>
-#include <testsuite_hooks.h>
-
-void test01()
-{
- using namespace std;
-
- bool test = true;
- char buf[512];
- const char* strlit = "how to tell a story and other essays: mark twain";
- const size_t strlitsize = std::strlen(strlit);
- stringbuf sbuf(ios_base::out);
-
- sbuf.pubsetbuf(buf, strlitsize);
- sbuf.sputn(strlit, strlitsize);
- VERIFY( std::strncmp(strlit, buf, strlitsize) != 0 );
-}
-
-void test02(std::stringbuf& in, bool pass)
-{
- bool test = true;
- using namespace std;
- typedef streambuf::pos_type pos_type;
- typedef streambuf::off_type off_type;
- pos_type bad = pos_type(off_type(-1));
- pos_type p = 0;
-
- // seekoff
- p = in.pubseekoff(0, ios_base::beg, ios_base::in);
- if (pass)
- VERIFY( p != bad );
-
- p = in.pubseekoff(0, ios_base::beg, ios_base::out);
- VERIFY( p == bad );
-
- p = in.pubseekoff(0, ios_base::beg);
- VERIFY( p == bad );
-
-
- // seekpos
- p = in.pubseekpos(0, ios_base::in);
- if (pass)
- VERIFY( p != bad );
-
- p = in.pubseekpos(0, ios_base::out);
- VERIFY( p == bad );
-
- p = in.pubseekpos(0);
- VERIFY( p == bad );
-}
-
-// libstdc++/9322
-void test08()
-{
- using std::locale;
- bool test = true;
-
- locale loc;
- std::stringbuf ob;
- VERIFY( ob.getloc() == loc );
-
- locale::global(locale("en_US"));
- VERIFY( ob.getloc() == loc );
-
- locale loc_de ("de_DE");
- locale ret = ob.pubimbue(loc_de);
- VERIFY( ob.getloc() == loc_de );
- VERIFY( ret == loc );
-
- locale::global(loc);
- VERIFY( ob.getloc() == loc_de );
-}
-
-bool over_called;
-
-class Derived_stringbuf : public std::stringbuf
-{
-public:
- int_type overflow(int_type c)
- {
- over_called = true;
- return std::stringbuf::overflow(c);
- }
-
- const char_type* pub_epptr() const
- {
- return epptr();
- }
-
- const char_type* pub_pptr() const
- {
- return pptr();
- }
-};
-
-// libstdc++/9404
-void test09()
-{
- bool test = true;
-
- bool over_expected;
-
- // sputc
- Derived_stringbuf dsbuf_01;
- over_called = false;
- dsbuf_01.sputc('i');
- VERIFY( over_called );
- over_expected = dsbuf_01.pub_epptr() == dsbuf_01.pub_pptr();
- over_called = false;
- dsbuf_01.sputc('v');
- VERIFY( (!over_expected && !over_called)
- || (over_expected && over_called) );
- dsbuf_01.sputc('i');
- VERIFY( dsbuf_01.str() == "ivi" ); // Sanity check.
-
- // sputn
- Derived_stringbuf dsbuf_02;
- over_called = false;
- dsbuf_02.sputn("sonne's", 7);
- VERIFY( over_called );
- over_expected = dsbuf_02.pub_epptr() == dsbuf_02.pub_pptr();
- over_called = false;
- dsbuf_02.sputn(" peak", 5);
- VERIFY( (!over_expected && !over_called)
- || (over_expected && over_called) );
- VERIFY( dsbuf_02.str() == "sonne's peak" ); // Sanity check.
-}
-
-int main()
-{
- using namespace std;
- test01();
-
- // movie star, submarine scientist!
- stringbuf in1("Hedy Lamarr", ios_base::in);
- stringbuf in2(ios_base::in);
- stringbuf in3("", ios_base::in);
- test02(in1, true);
- test02(in2, false);
- test02(in3, false);
-
- __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test08);
- test09();
- return 0;
-}
+++ /dev/null
-// 2001-05-24 Benjamin Kosnik <bkoz@redhat.com>
-
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 27.7.6 member functions (stringstream_members)
-
-#include <sstream>
-#include <testsuite_hooks.h>
-
-void test01()
-{
- bool test = true;
- std::stringstream is01;
- const std::string str00;
- const std::string str01 = "123";
- std::string str02;
- const int i01 = 123;
- int a,b;
-
- std::ios_base::iostate state1, state2, statefail, stateeof;
- statefail = std::ios_base::failbit;
- stateeof = std::ios_base::eofbit;
-
- // string str() const
- str02 = is01.str();
- VERIFY( str00 == str02 );
-
- // void str(const basic_string&)
- is01.str(str01);
- str02 = is01.str();
- VERIFY( str01 == str02 );
- state1 = is01.rdstate();
- is01 >> a;
- state2 = is01.rdstate();
- VERIFY( a = i01 );
- // 22.2.2.1.2 num_get virtual functions
- // p 13
- // in any case, if stage 2 processing was terminated by the test for
- // in == end then err != ios_base::eofbit is performed.
- VERIFY( state1 != state2 );
- VERIFY( state2 == stateeof );
-
- is01.str(str01);
- is01 >> b;
- VERIFY( b != a );
- // as is01.good() is false, istream::sentry blocks extraction.
-
- is01.clear();
- state1 = is01.rdstate();
- is01 >> b;
- state2 = is01.rdstate();
- VERIFY( b == a );
- VERIFY( state1 != state2 );
- VERIFY( state2 == stateeof );
-
- #ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-void
-redirect_buffer(std::ios& stream, std::streambuf* new_buf)
-{ stream.rdbuf(new_buf); }
-
-std::streambuf*
-active_buffer(std::ios& stream)
-{ return stream.rdbuf(); }
-
-// libstdc++/2832
-void test02()
-{
- bool test = true;
- const char* strlit01 = "fuck war";
- const char* strlit02 = "two less cars abstract riot crew, critical mass/SF";
- const std::string str00;
- const std::string str01(strlit01);
- std::string str02;
- std::stringbuf sbuf(str01);
- std::streambuf* pbasebuf0 = &sbuf;
-
- std::stringstream sstrm1;
- VERIFY( sstrm1.str() == str00 );
- // derived rdbuf() always returns original streambuf, even though
- // it's no longer associated with the stream.
- std::stringbuf* const buf1 = sstrm1.rdbuf();
- // base rdbuf() returns the currently associated streambuf
- std::streambuf* pbasebuf1 = active_buffer(sstrm1);
- redirect_buffer(sstrm1, &sbuf);
- std::stringbuf* const buf2 = sstrm1.rdbuf();
- std::streambuf* pbasebuf2 = active_buffer(sstrm1);
- VERIFY( buf1 == buf2 );
- VERIFY( pbasebuf1 != pbasebuf2 );
- VERIFY( pbasebuf2 == pbasebuf0 );
-
- // derived rdbuf() returns the original buf, so str() doesn't change.
- VERIFY( sstrm1.str() != str01 );
- VERIFY( sstrm1.str() == str00 );
- // however, casting the active streambuf to a stringbuf shows what's up:
- std::stringbuf* psbuf = dynamic_cast<std::stringbuf*>(pbasebuf2);
- str02 = psbuf->str();
- VERIFY( str02 == str01 );
-
- // How confusing and non-intuitive is this?
- // These semantics are a joke, a serious defect, and incredibly lame.
-}
-
-void
-test03()
-{
- bool test = true;
-
- //
- // 1: Automatic formatting of a compound string
- //
- int i = 1024;
- int *pi = &i;
- double d = 3.14159;
- double *pd = &d;
- std::string blank;
- std::ostringstream ostrst01;
- std::ostringstream ostrst02(blank);
-
- // No buffer, so should be created.
- ostrst01 << "i: " << i << " i's address: " << pi << "\n"
- << "d: " << d << " d's address: " << pd << std::endl;
- // Buffer, so existing buffer should be overwritten.
- ostrst02 << "i: " << i << " i's address: " << pi << "\n"
- << "d: " << d << " d's address: " << pd << std::endl;
-
- std::string msg01 = ostrst01.str();
- std::string msg02 = ostrst02.str();
- VERIFY( msg01 == msg02 );
- VERIFY( msg02 != blank );
-
- //
- // 2: istringstream
- //
- // extracts the stored ascii values, placing them in turn in the four vars
-#if 0
- int i2 = 0;
- //int* pi2 = &i2;
- void* pi2 = &i2;
- double d2 = 0.0;
- // double* pd2 = &d2;
- void* pd2 = &d2;
- std::istringstream istrst01(ostrst02.str());
-
- istrst01 >> i2 >> pi2 >> d2 >> pd2;
- //istrst01 >> i2;
- //istrst01 >> pi2;
- VERIFY( i2 == i );
- VERIFY( d2 == d );
- VERIFY( pd2 == pd );
- VERIFY( pi2 == pi );
-#endif
-
- // stringstream
- std::string str1("");
- std::string str3("this is a somewhat string");
- std::stringstream ss1(str1, std::ios_base::in|std::ios_base::out);
- std::stringstream ss2(str3, std::ios_base::in|std::ios_base::out);
-}
-
-// libstdc++/8466
-void test04()
-{
- bool test = true;
-
- const char* strlit00 = "orvieto";
- const std::string str00 = strlit00;
-
- std::ostringstream oss;
-
- oss.str(str00);
- oss << "cortona";
- VERIFY( str00 == strlit00 );
-}
-
-int main()
-{
- test01();
- test02();
- test03();
- test04();
- return 0;
-}
// 27.4.2.1 - Types [lib.ios.types]
#include <ios>
-
#include <testsuite_hooks.h>
// libstdc++/7219
--- /dev/null
+// Copyright (C) 2003 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.4.2.1 - Types [lib.ios.types]
+
+#include <ios>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ std::streamsize ssize;
+ std::streamoff soff;
+
+ // No signed/unsigned warnings.
+ long l = ssize;
+
+ // Wrapped in pos_type is EOF.
+ soff = -1;
+}
+
+int main(void)
+{
+ test01();
+ return 0;
+}
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
- testsuite_files testsuite_wchar_t site.exp abi_check
+ testsuite_* site.exp abi_check
# By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
- testsuite_files testsuite_wchar_t site.exp abi_check
+ testsuite_* site.exp abi_check
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
CONFIG_HEADER = ../config.h
set dg-do-what-default run
# Copy any required data files.
- libstdc++-v3-copy-files [glob -nocomplain "$srcdir/{,*/}*/*.tst"] $outdir
- libstdc++-v3-copy-files [glob -nocomplain "$srcdir/{,*/}*/*.txt"] $outdir
+ libstdc++-v3-copy-files [glob -nocomplain "$srcdir/data/*.tst"] $outdir
+ libstdc++-v3-copy-files [glob -nocomplain "$srcdir/data/*.txt"] $outdir
+
+ # Compute lists of files to test.
+ v3-compute-tests
# set LD_LIBRARY_PATH so that libgcc_s, libstdc++ binaries can be found.
# locate libgcc.a so we don't need to account for different values of
}
-# A bit sloppy... Returns a list of source files (full pathnames) to
-# compile. We mimic the mkcheck script in that the first time this is run,
-# all existing files are listed in "testsuite_files" in the output
-# directory. Subsequent runs pull the list from that file, allowing users
-# to trim the list down to problematic tests.
-### This is supposed to be done via RUNTESTFLAGS, but that doesn't work.
-proc libstdc++-v3-list-sourcefiles { } {
+# Constructs lists of source files (full pathnames) to test. Two
+# files are constructed: testsuite_files, which is used to test with
+# the default dg-runtest command, and testsuite_files_interactive,
+# which is used to test cases that require input to be entered. In
+# addition, both lists are pruned of wchar_t tests if the toolchain
+# under test does not support wchar_t functionality.
+#
+# We mimic the mkcheck script in that the first time this is run, all
+# existing files are listed in "testsuite_files" in the output
+# directory. Subsequent runs pull the list from that file, allowing
+# users to trim the list down to problematic tests, or just run
+# paticular directories or sub-directories of tests.
+#
+# Selecting individual tests can also be done with RUNTESTFLAGS, but
+# that doesn't really do all that we are trying to accomplish here.
+proc v3-compute-tests { } {
global srcdir
global outdir
- set files_file "${outdir}/testsuite_files"
+ set tests_file "${outdir}/testsuite_files"
+ set tests_file_inter "${outdir}/testsuite_files_interactive"
set sfiles ""
- if { [file exists $files_file] } {
- set f [open $files_file]
- while { ! [eof $f] } {
- set t [gets $f]
- if { [string length "$t"] != 0 } {
- lappend sfiles ${srcdir}/${t}
- }
- }
- } else {
- set f [open $files_file "w"]
- set where_we_were [pwd]
- cd $srcdir
- foreach s [lsort [glob -nocomplain "*/*.cc" "*/*/*.cc" "{,*/}*/*/*/*.cc" ]] {
- lappend sfiles ${srcdir}/${s}
- puts $f $s
- }
- cd $where_we_were
+
+ # If there is a testsuite_file, use it.
+ if { [file exists $tests_file] } {
+ return
+ }
+
+ # If not, generate it.
+ set where_we_were [pwd]
+ cd $srcdir
+ foreach s [lsort [glob -nocomplain "*/*.cc" "*/*/*.cc" "{,*/}*/*/*/*.cc" ]] {
+ lappend sfiles ${s}
}
- close $f
+ cd $where_we_were
+ # Filter wchar_t tests.
# Disable wchar_t tests if library not configured to support
# wchar_t testing.
set wchar_file "${outdir}/testsuite_wchar_t"
- if { [file exists $wchar_file] } {
- return $sfiles
- } else {
+ if { ! [file exists $wchar_file] } {
# Remove wchar_t tests files from list.
set res {}
foreach w $sfiles {
if [regexp "wchar_t" $w] {
- verbose "element out list is $w"
+ verbose "element wchar list is $w"
} else {
- verbose "element in list is $w"
+ verbose "element non-wchar list is $w"
lappend res $w
}
}
- return $res
+ set sfiles ${res}
+ }
+
+ # Filter interactive tests.
+ # Use special rules to run these tests.
+ set restwo {}
+ set sfiles_inter {}
+ foreach i $sfiles {
+ if [regexp "_xin" $i] {
+ verbose "element interactive list is $i"
+ lappend sfiles_inter $i
+ } else {
+ verbose "element non-interactive list is $i"
+ lappend restwo $i
+ }
+ }
+ set sfiles ${restwo}
+
+ # Write out testsuite_files.
+ set f [open $tests_file "w"]
+ foreach t $sfiles {
+ puts $f $t
+ }
+ close $f
+
+ # Write out testsuite_files_interactive.
+ set f [open $tests_file_inter "w"]
+ foreach t $sfiles_inter {
+ puts $f $t
+ }
+ close $f
+}
+
+proc v3-list-tests { filename } {
+ global srcdir
+ global outdir
+
+ set tests_file "${outdir}/${filename}"
+ set sfiles ""
+
+ # If there is a testsuite_file, use it.
+ if { [file exists $tests_file] } {
+ set f [open $tests_file]
+ while { ! [eof $f] } {
+ set t [gets $f]
+ if { [string length "$t"] != 0 } {
+ lappend sfiles ${srcdir}/${t}
+ }
+ }
+ close $f
+ } else {
+ verbose "cannot open $tests_file"
}
+ return $sfiles
}
}
# Initialize 'dg' last or dejagnu exits with an error...
-libstdc++-v3-init
dg-init
+libstdc++-v3-init
# Main loop.
-dg-runtest [libstdc++-v3-list-sourcefiles] "" $DEFAULT_CXXFLAGS
+dg-runtest [v3-list-tests testsuite_files] "" $DEFAULT_CXXFLAGS
+#dg-runtest [v3-list-tests testsuite_files_interactive] "" $DEFAULT_CXXFLAGS
# All done.
dg-finish