home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
gnu
/
gplibt02
/
tfile.cc
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-24
|
8KB
|
371 lines
// This may look like C code, but it is really -*- C++ -*-
/*
* a few tests for streams
*
*/
#include <stream.h>
#ifndef _OLD_STREAMS
#include <strstrea.h>
#include "unistd.h"
#endif
#include <xsfile.h>
#include <xplotfil.h>
#include <std.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());
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;
char mybuf[1000];
#ifdef _OLD_STREAMS
cout << "creating string-based ostream...\n";
ostream strout(1000, mybuf);
#else
cout << "creating ostrstream...\n";
ostrstream strout(mybuf, 1000);
#endif
assert(strout.good());
assert(strout.writable());
strout << "This is a string-based stream.\n";
strout << "With two lines.\n";
strout.put(char(0));
assert(strout.good());
cout << "with contents:\n";
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";
while (strin.get(ch)) cout.put(ch);
}
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[] = "ffile";
{
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());
}
main()
{
t1();
t2();
t3();
t4();
t5();
t6();
t7();
t9();
t8();
cout << "\nFinal 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";
}