summaryrefslogtreecommitdiffstats
path: root/contrib/libio/tests/tFile.cc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libio/tests/tFile.cc')
-rw-r--r--contrib/libio/tests/tFile.cc558
1 files changed, 0 insertions, 558 deletions
diff --git a/contrib/libio/tests/tFile.cc b/contrib/libio/tests/tFile.cc
deleted file mode 100644
index 42090ff..0000000
--- a/contrib/libio/tests/tFile.cc
+++ /dev/null
@@ -1,558 +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>
-
-const char *tempfile;
-
-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((char*)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)
-{
- char temp [1024] = "tempfile";
-
- 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";
-
- strncpy (&temp [8], &argv[1][2], 1000);
- temp [1008] = '\0';
- }
- tempfile = temp;
- 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";
-}
OpenPOWER on IntegriCloud