diff options
Diffstat (limited to 'contrib/libg++/libio/tests/tFile.cc')
| -rw-r--r-- | contrib/libg++/libio/tests/tFile.cc | 550 | 
1 files changed, 0 insertions, 550 deletions
| diff --git a/contrib/libg++/libio/tests/tFile.cc b/contrib/libg++/libio/tests/tFile.cc deleted file mode 100644 index d8a1ee301fa6c..0000000000000 --- a/contrib/libg++/libio/tests/tFile.cc +++ /dev/null @@ -1,550 +0,0 @@ -/*  -Copyright (C) 1993 Free Software Foundation - -This file is part of the GNU IO 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, if you link this library with files -compiled with a GNU compiler to produce an executable, this does not 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. */ - -// This may look like C code, but it is really -*- C++ -*- - -/* - * a few tests for streams - * - */ - -#include <stream.h> -#include <fstream.h> -#ifndef _OLD_STREAMS -#include <strstream.h> -#include "unistd.h" -#endif -#include <SFile.h> -#include <PlotFile.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <assert.h> - -class record -{ -public: -  char c; int i; double d; -}; - -ostream& operator<<(ostream& s, record& r) -{ -  return(s << "(i = " << r.i << " c = " << r.c << " d = " << r.d << ")"); -} - -void t1() -{ -  char ch; - -  assert(cout.good()); -  assert(cout.writable()); -  assert(cout.is_open()); -  cout << "Hello, world via cout\n"; -  assert(cerr.good()); -  assert(cerr.writable()); -  assert(cerr.is_open()); -  cerr << "Hello, world via cerr\n"; - -  assert(cin.good()); -  assert(cin.readable()); -  assert(cin.is_open()); - -  cout << "enter a char:";  cin >> ch; -  cout.put('c');  cout.put(' ');  cout.put('=');  cout.put(' '); -  cout.put('"');  cout.put(ch);    cout << '"';  cout << char('\n'); -  assert(cin.good()); -  assert(cout.good()); -} - -void t2() -{ -  int i; -  short h; -  long l; -  float f; -  double d; -  char s[100]; - -  cout << "enter three integers (short, int, long):";   -  cin >> h; cin >> i;    -  // cin.scan("%ld", &l); -  cin >> l; -  cout << "first  = " << h << " via dec = " << dec(h, 8) << "\n"; -  cout << "second = " << i << form(" via form = %d = 0%o", i, i); -  cout.form(" via cout.form = %d = 0x%x\n", i, i); -  cout << "third  = " << l  << " via hex = " << hex(l) << "\n"; -  assert(cin.good()); -  assert(cout.good()); - -  cout << "enter a float then a double:";  cin >> f; cin >> d; -  cout << "first  = " << f << "\n"; -  cout << "second = " << d << "\n"; -  assert(cin.good()); -  assert(cout.good()); - -  cout << "enter 5 characters separated with spaces:";  cin >> s; -  cout << "first  = " << s << "\n"; -  cin.get(s, 100); -  cout << "rest   = " << s << "\n"; - -  assert(cin.good()); - -  cin.width(10); -  cin >> s; -  cin.clear(); -  cout << "A 10-character buffer: " << s << endl; - -  assert(cout.good()); - -} - -void t3() -{ -  char ch; -  cout << "\nMaking streams sout and sin..."; -#ifdef _OLD_STREAMS -  ostream sout("streamfile", io_writeonly, a_create); -#else -  ofstream sout("streamfile"); -#endif -  assert(sout.good()); -  assert(sout.is_open()); -  assert(sout.writable()); -  assert(!sout.readable()); -  sout << "This file has one line testing output streams.\n"; -  sout.close(); -  assert(!sout.is_open()); -#ifdef _OLD_STREAMS -  istream sin("streamfile", io_readonly, a_useonly); -#else -  ifstream sin("streamfile"); -#endif -  assert(sin.good()); -  assert(sin.is_open()); -  assert(!sin.writable()); -  assert(sin.readable()); -  cout << "contents of file:\n"; -  while(sin >> ch) cout << ch; -  sin.close(); -  assert(!sin.is_open()); -} - - -void t4() -{ -  char s[100]; -  char ch; -  int i; - -  cout << "\nMaking File tf ... ";  -#ifdef _OLD_STREAMS -  File tf("tempfile", io_readwrite, a_create); -#else -  fstream tf("tempfile", ios::in|ios::out|ios::trunc); -#endif -  assert(tf.good()); -  assert(tf.is_open()); -  assert(tf.writable()); -  assert(tf.readable()); -  strcpy(s, "This is the first and only line of this file.\n"); -#ifdef _OLD_STREAMS -  tf.put(s); -  tf.seek(0); -#else -  tf << s; -  tf.rdbuf()->seekoff(0, ios::beg); -#endif -  tf.get(s, 100); -  assert(tf.good()); -  cout << "first line of file:\n" << s << "\n"; -  cout << "next char = "; -  tf.get(ch); -  cout << (int)ch; -  cout.put('\n'); -  assert(ch == 10); -  strcpy(s, "Now there is a second line.\n"); -  cout << "reopening tempfile, appending: " << s; -#ifdef _OLD_STREAMS -  tf.open(tf.name(), io_appendonly, a_use); -#else -  tf.close(); -  tf.open("tempfile", ios::app); -#endif -  assert(tf.good()); -  assert(tf.is_open()); -  assert(tf.writable()); -  assert(!tf.readable()); -#ifdef _OLD_STREAMS -  tf.put(s); -  assert(tf.good()); -  tf.open(tf.name(), io_readonly, a_use); -#else -  tf << s; -  assert(tf.good()); -  tf.close(); -  tf.open("tempfile", ios::in); -#endif -  tf.raw(); -  assert(tf.good()); -  assert(tf.is_open()); -  assert(!tf.writable()); -  assert(tf.readable()); -  cout << "First 10 chars via raw system read after reopen for input:\n"; -  read(tf.filedesc(), s, 10); -  assert(tf.good()); -  for (i = 0; i < 10; ++ i) -    cout.put(s[i]); -  lseek(tf.filedesc(), 5, 0); -  cout << "\nContents after raw lseek to pos 5:\n"; -  while ( (tf.get(ch)) && (cout.put(ch)) ); -#ifdef _OLD_STREAMS -  tf.remove(); -#else -  tf.close(); -  unlink("tempfile"); -#endif -  assert(!tf.is_open()); -} - -void t5() -{ -  record r; -  int i; -  cout << "\nMaking SFile rf..."; -#ifdef _OLD_STREAMS -  SFile rf("recfile", sizeof(record), io_readwrite, a_create); -#else -  SFile rf("recfile", sizeof(record), ios::in|ios::out|ios::trunc); -#endif -  assert(rf.good()); -  assert(rf.is_open()); -  assert(rf.writable()); -  assert(rf.readable()); -  for (i = 0; i < 10; ++i) -  { -    r.c = i + 'a'; -    r.i = i; -    r.d = (double)(i) / 1000.0; -    rf.put(&r); -  } -  assert(rf.good()); -  cout << "odd elements of file in reverse order:\n"; -  for (i = 9; i >= 0; i -= 2) -  { -    rf[i].get(&r); -    assert(r.c == i + 'a'); -    assert(r.i == i); -    cout << r << "\n"; -  } -  assert(rf.good()); -#ifdef _OLD_STREAMS -  rf.remove(); -#else -  rf.close(); -  unlink("recfile"); -#endif -  assert(!rf.is_open()); -} - -void t6() -{ -  cout << "\nMaking PlotFile pf ..."; -  static const char plot_name[] = "plot.out"; -  PlotFile pf(plot_name); -  assert(pf.good()); -  assert(pf.is_open()); -  assert(pf.writable()); -  assert(!pf.readable()); -  pf.move(10,10); -  pf.label("Test"); -  pf.circle(300,300,200); -  pf.line(100, 100, 500, 500); -  assert(pf.good()); -#ifdef _OLD_STREAMS -  cout << "(You may delete or attempt to plot " << pf.name() << ")\n"; -#else -  cout << "(You may delete or attempt to plot " << plot_name << ")\n"; -#endif -} - -void t7() -{ -  char ch; -  static char t7_line1[] = "This is a string-based stream.\n"; -  static char t7_line2[] = "With two lines.\n"; -  char mybuf[60]; -  char *bufp; -#ifdef _OLD_STREAMS -  cout << "creating string-based ostream...\n"; -  ostream strout(60, mybuf); -#else -  cout << "creating ostrstream...\n"; -  ostrstream strout(mybuf, 60); -#endif -  assert(strout.good()); -  assert(strout.writable()); -  strout << t7_line1 << t7_line2 << ends; -  assert(strout.good()); -  cout << "with contents:\n"; -  bufp = strout.str(); -  assert(bufp == mybuf); -  strout.rdbuf()->freeze(0); /* Should be a no-op */ -  cout << mybuf; -#ifdef _OLD_STREAMS -  cout << "using it to create string-based istream...\n"; -  istream strin(strlen(mybuf), mybuf); -#else -  cout << "using it to create istrstream...\n"; -  istrstream strin(mybuf, strlen(mybuf)); -#endif -  assert(strin.good()); -  assert(strin.readable()); -  cout << "with contents:\n"; -#ifndef _OLD_STREAMS -  char line[100]; -  strin.getline(line, 100); -  int line1_len = strlen(t7_line1); -  assert(strin.tellg() == line1_len); -  int line_len = strin.gcount(); -  assert(line_len == line1_len); -  cout.write(line, line1_len - 1); -  cout << endl; -#endif -  while (strin.get(ch)) cout.put(ch); - -  strstream str1; -  strstream str2; -  str1 << "Testing string-based stream using strstream.\n"; -  str1.seekg(0); -  for (;;) { -      int i = str1.get(); -      if (i == EOF) -	  break; -      str2 << (char)i; -  } -  str2 << ends; -  cout << str2.str(); - -  // This should make it overflow. -  strout << t7_line1; -  assert (strout.bad()); -} - -void t8() -{ -#ifdef _OLD_STREAMS -  cout << "\nThe following file open should generate error message:"; -  cout.flush(); -  File ef("shouldnotexist", io_readonly, a_useonly); -#else -  ifstream ef("shouldnotexist"); -#endif -  assert(!ef.good()); -  assert(!ef.is_open()); -} - -void t9() -{ -  char ch; -  static char ffile_name[] = "ftmp"; -  { -      cout << "\nMaking filebuf streams fout and fin..."; -      filebuf foutbuf; -#ifdef _OLD_STREAMS -      foutbuf.open(ffile_name, output); -#else -      foutbuf.open(ffile_name, ios::out); -#endif -      ostream fout(&foutbuf); -      assert(fout.good()); -      assert(fout.is_open()); -      assert(fout.writable()); -      assert(!fout.readable()); -      fout << "This file has one line testing output streams.\n"; -#ifdef _OLD_STREAMS -      fout.close(); -      assert(!fout.is_open()); -#endif -  } -  filebuf finbuf; -#ifdef _OLD_STREAMS -  finbuf.open(ffile_name, input); -#else -  finbuf.open(ffile_name, ios::in); -#endif -  istream fin(&finbuf); -  assert(fin.good()); -  assert(fin.is_open()); -  assert(!fin.writable()); -  assert(fin.readable()); -  cout << "contents of file:\n"; -  while(fin >> ch) cout << ch; -#ifndef _OLD_STREAMS -  cout << '\n'; -#endif -  fin.close(); -  assert(!fin.is_open()); -} - -void t10() -{ -    int fileCnt = 3; -    char *file_name_pattern = "ftmp%d"; -    char current_file_name[50]; -    ifstream inFile; -    ofstream outFile; -    char c; -    int i; -     -    cout << '\n'; - -    // Write some files. -    for (i=0; i < fileCnt; i++)   { -	sprintf(current_file_name, file_name_pattern, i); -	outFile.open(current_file_name, ios::out); -		 -	if ( outFile.fail() ) -	    cerr << "File " << current_file_name -		<< " can't be opened for output" << endl; -	else { -	    outFile << "This is line 1 of " << current_file_name << '\n'; -	    outFile << "This is line 2 of " << current_file_name << endl; -	    outFile.close(); -	} -    } - -    // Now read the files back in, and write then out to cout. -    for (i=0; i < fileCnt; i++)   { -	sprintf(current_file_name, file_name_pattern, i); -	inFile.open(current_file_name, ios::in); -		 - -	if ( inFile.fail() ) -	    cerr << "File " << current_file_name  -		<< " can't be opened for input" << endl; -	else { -	    while ( inFile.get (c)) -		cout << c; -	    cout << endl; -	    inFile.close(); -	} -    } -} - -// Test form - -void t11() -{ -    int count1, count2; -    cout.form("%.2f+%.2f = %4.3e\n%n", 5.5, 6.25, 5.5+6.25, &count1); -    char *text = "Previous line has12345"; -    char text_length_to_use = strlen(text) - 5; -    count2 = cout.rdbuf()->form("%-*.*s%3g characters\n", -				text_length_to_use + 1,  -				text_length_to_use, -				text, -				(double)(count1-1)); -    cout.form("%-*.*s%+d characters\n%n", -	      text_length_to_use + 1, text_length_to_use, text, -	      count2-1, &count1); -    assert(count1 == 33); -} - -static void -show_int (long val) -{ -  cout.setf(ios::showbase); -  cout << dec; cout.width (8); cout << val << "(dec) = "; -  cout << hex; cout.width (8); cout << (0xFFFF & val) << "(hex) = "; -  cout << oct; cout.width (8); -  cout << (0xFFFF & val) << "(oct) [showbase on]\n"; -  cout.unsetf(ios::showbase); -  cout << dec; cout.width (8); cout << val << "(dec) = "; -  cout << hex; cout.width (8); cout << (0xFFFF & val) << "(hex) = "; -  cout << oct; cout.width (8); -  cout << (0xFFFF & val) << "(oct) [showbase off]\n"; -} - -void -t12 () -{ -  ios::fmtflags old_flags = cout.setf(ios::showpos); -  int fill = cout.fill('_'); -  cout.unsetf(ios::uppercase); -  cout.setf(ios::internal, ios::adjustfield); -  show_int(34567); -  show_int(-34567); -  cout.setf(ios::right, ios::adjustfield); -  show_int(0); -  cout.setf(ios::uppercase); -  cout.unsetf(ios::showpos); -  show_int(34567); -  cout.setf(ios::left, ios::adjustfield); -  show_int(-34567); -  cout.fill(fill); -  show_int(0); -  cout.setf(old_flags, -	    ios::adjustfield|ios::basefield -	    |ios::showbase|ios::showpos|ios::uppercase); -} - -main(int argc, char **argv) -{ - if (argc > 1 && strncmp(argv[1], "-b", 2) == 0) { -     streambuf *sb = cout.rdbuf(); -     streambuf *ret; -     int buffer_size = atoi(&argv[1][2]); -     if (buffer_size == 0) -	 ret = sb->setbuf(NULL, 0); -     else -	 ret = sb->setbuf(new char[buffer_size], buffer_size); -     if (ret != sb) -	 cerr << "Warning: cout.rdbuf()->setbuf failed!\n"; -  } -  t1(); -  t2(); -  t3(); -  t4(); -  t5(); -  t6(); -  t7(); -  t9(); -  t8(); -  t10(); -  t11(); -  t12(); - -  cout << "Final names & states:\n"; -#ifdef _OLD_STREAMS -  cout << "cin:      " << cin.name()  << "\t" << cin.rdstate() << "\n"; -  cout << "cout:     " << cout.name() << "\t" << cout.rdstate() << "\n"; -  cout << "cerr:     " << cerr.name() << "\t" << cerr.rdstate() << "\n"; -#else -  cout << "cin:      " << "(stdin)"  << "\t" << cin.rdstate() << "\n"; -  cout << "cout:     " << "(stdout)" << "\t" << cout.rdstate() << "\n"; -  cout << "cerr:     " << "(stderr)" << "\t" << cerr.rdstate() << "\n"; -#endif -  cout << "\nend of test.\n"; -} | 
