diff options
Diffstat (limited to 'contrib/libg++/libio/tests/tiomisc.cc')
-rw-r--r-- | contrib/libg++/libio/tests/tiomisc.cc | 236 |
1 files changed, 0 insertions, 236 deletions
diff --git a/contrib/libg++/libio/tests/tiomisc.cc b/contrib/libg++/libio/tests/tiomisc.cc deleted file mode 100644 index 3351e4d88145..000000000000 --- a/contrib/libg++/libio/tests/tiomisc.cc +++ /dev/null @@ -1,236 +0,0 @@ -/* Random regression tests etc. */ - -#include <fstream.h> -#include <stdio.h> -#include <strstream.h> -#include <string.h> -#include <fcntl.h> -#include <stdlib.h> -#include <assert.h> - -#define BUF_SIZE 4096 - -void -test1 () -{ - fstream f; - char buf[BUF_SIZE]; - - f.setbuf( buf, BUF_SIZE ); -} - -void -test2 ( ) -{ - char string[BUF_SIZE]; - ostrstream s( string, BUF_SIZE ); - - s << "Bla bla bla " << 55 << ' ' << 3.23 << '\0' << endl; - cout << "Test2: " << string << endl; -} - - -/* Test case from Joe Buck <jbuck@Synopsys.COM>. */ - -class special_ofstream : public ofstream { -public: - special_ofstream() : ofstream() {} - special_ofstream(int fd) : ofstream(fd) {} - special_ofstream(const char *name, int mode=ios::out, int prot=0664) { - open(name,mode,prot); - } - void open(const char *name, int mode=ios::out, int prot=0664); -}; - -void special_ofstream::open(const char* name, int mode, int prot) { - if (strcmp(name, "<cout>") == 0) { - rdbuf()->attach(1); - } - else if (strcmp(name, "<cerr>") == 0) { - rdbuf()->attach(2); - setf(unitbuf); - } - else ofstream::open(name,mode,prot); -} - -void -test3 () -{ - { - special_ofstream o("<cout>"); - o << "Hello\n"; - // o is destructed now. This should not close cout - } - { - special_ofstream o("<cout>"); - o << "Line 2\n"; - } -} - -void -getline_test1 () -{ - char buf[1000]; - char data[] = "#include <iostream.h>\n#include <fstream.h>\n"; - istrstream infile(data, strlen(data)); - infile.getline(buf,1000); - infile.getline(buf,1000); - - cout << buf << '\n'; -} - -// test istream::getline on readng overlong lines. -void -getline_test2 () -{ - char data[] = "Line one.\nline 2.\n"; - char line[100]; - istrstream strin(data, strlen(data)); - strin.getline(line, 10); - cout << "line: " << line << ", count: " << strin.gcount () << "\n"; -} - -void -getline_test3 () -{ - char data[] = "123456789\nabcdefghijkl.\n"; - char line[10]; - istrstream strin(data, strlen(data)); - strin.getline(line, 10); - cout << "line: " << line << ", count: " << strin.gcount () << "\n"; - strin.getline(line, 10); - cout << "line: " << line << ", count: " << strin.gcount () << "\n"; - assert (!strin.good()); - strin.clear (); - strin.getline(line, 10); - cout << "line: " << line << ", count: " << strin.gcount () << "\n"; -} - -class A : private ostream -{ -public: - A(streambuf* s); - ostream::flush; -}; -A::A(streambuf* s) -: ostream(s) -{ -} - -void -flush1_test() -{ - A os(cout.rdbuf()); - os.flush(); -} - -void -reread_test () -{ // This is PR 5486. - int tag_char; - char *fname = "Makefile"; - int mode = O_RDONLY; - filebuf file_p; - - int fd = ::open(fname, mode, 0666); - file_p.attach(fd); - - istream d_istream(&file_p); - - // Read a character from the stream, save it and put it back. - tag_char = d_istream.get(); - int save_char = tag_char; - d_istream.putback((char) tag_char); - - // Uncomment then next statement and the next get will be EOF. - streampos pos = d_istream.tellg(); - - // Re-read the first character - tag_char = d_istream.get(); - - cout << "reread_test: " << (char)save_char << " " << (char)tag_char << "\n"; - cout.flush(); - -} - -void *danger_pointer; -void operator delete (void *p) -{ - if (p) - { - if (p == danger_pointer) - fprintf (stderr, "maybe deleted\n"); - - free (p); - } -} - -struct my_ostream: virtual public ios, public ostream -{ - my_ostream (ostream &s): ios (s.rdbuf()) { } -}; - -void -test_destroy () -{ - ofstream fstr ("foo.dat"); - my_ostream wa (fstr); - - /* Check that sure wa.rdbuf() is only freed once. */ - danger_pointer = wa.rdbuf (); - - wa << "Hi there" << endl; -#ifdef _IO_NEW_STREAMS - fprintf (stderr, "maybe deleted\n"); -#endif -} - -/* Submitted by Luke Blanshard <luke@cs.wisc.edu>. - - In certain circumstances, the library will write past the end of the - buffer it has allocated for a file: You must read from the file, - exactly enough bytes that the read pointer is at the end of the - buffer. Then you must write to the file, at the same place you just - finished reading from. - - "Your patch looks great, and you're welcome to use the test code for any - purpose whatever. I hereby renounce my implicit copyright on it." */ - -void -test_read_write_flush () -{ - fstream f; - char buf[8192]; - - for ( int index=0; index < sizeof buf; ++index ) - buf[index] = (index+1)&63? 'x' : '\n'; - - f.open( "foo.dat", ios::in|ios::out|ios::trunc ); - f.write( buf, sizeof buf ); - - f.seekg( 0, ios::beg ); - f.read( buf, sizeof buf ); - -// f.seekp( sizeof buf, ios::beg ); // Present or absent, bug still happens. - f.write( "a", 1 ); - - if ( f.rdbuf()->_IO_write_ptr > f.rdbuf()->_IO_buf_end ) - cerr << "test_read_write_flush: it's broken.\n"; - else - cout << "test_read_write_flush: the problem isn't showing itself.\n"; -} - -int main( ) -{ - test1 (); - test2 (); - test3 (); - getline_test1 (); - getline_test2 (); - getline_test3 (); - flush1_test (); - reread_test (); - test_destroy (); - test_read_write_flush (); - return 0; -} |