This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[Patch] Fix seekoff/pos and sputbackc testcases
- From: Paolo Carlini <pcarlini at unitus dot it>
- To: libstdc++ at gcc dot gnu dot org
- Cc: bkoz <bkoz at redhat dot com>
- Date: Fri, 13 Jun 2003 18:13:05 +0200
- Subject: [Patch] Fix seekoff/pos and sputbackc testcases
Hi,
the below provides correct unbuffered seekoff/pos testcases and
fixes the existing buffered ones together with those for sputbackc
(both unbuffered and buffered).
Now all the buffered testcases are identical to the unbuffered
counterparts, as should be.
In the near future I'd like to provide some more seek testcases
for pure in and out.
Tested x86-linux, ok with you?
Paolo
/////////
2003-06-13 Paolo Carlini <pcarlini@unitus.it>
* testsuite/27_io/basic_filebuf/seekoff/char/1.cc: Split and
fix for missing seeks between gets and puts into...
* testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc: New.
* testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc: New.
* testsuite/27_io/basic_filebuf/seekpos/char/1.cc: Same, into...
* testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc: New.
* testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc: New.
* testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc: Fix
for missing seeks between gets and puts.
* testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc: Ditto.
* testsuite/data/seekoff-1.tst: New.
* testsuite/data/seekoff-2.tst: New.
* testsuite/data/seekpos-1.tst: New.
* testsuite/data/seekpos-2.tst: New.
diff -urN libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekoff/char/1.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1.cc
--- libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekoff/char/1.cc 2003-04-12 21:21:34.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/1.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,137 +0,0 @@
-// 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 = __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;
-}
diff -urN libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc
--- libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/3-io.cc 2003-06-13 17:59:20.000000000 +0200
@@ -0,0 +1,123 @@
+// 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>
+#include <testsuite_io.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+const char name_01[] = "seekoff-1.tst";
+
+void test05()
+{
+ using namespace std;
+ using namespace __gnu_cxx_test;
+
+ typedef filebuf::int_type int_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+
+ bool test = true;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+
+ int_type c1;
+ int_type c2;
+ int_type c3;
+
+ pos_type pt_1(off_type(-1));
+ pos_type pt_2(off_type(0));
+ off_type off_1 = 0;
+ off_type off_2 = 0;
+
+ // seekoff
+ // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
+ // alters the stream position to off
+
+ // in | out
+ {
+ constraint_filebuf fb_03;
+ fb_03.open(name_01, ios_base::out | ios_base::in);
+ VERIFY( fb_03.write_position() );
+ VERIFY( !fb_03.read_position() );
+ // 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' );
+ fb_03.pubseekoff(3, ios_base::beg);
+ c2 = fb_03.sputc('\n'); //current in pointer +1
+ fb_03.pubseekoff(4, ios_base::beg);
+ 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' );
+ fb_03.pubseekoff(0, ios_base::cur);
+ c2 = fb_03.sputc('x'); //test current out pointer
+ c3 = fb_03.sputc('\n');
+ fb_03.pubseekoff(0, ios_base::cur);
+ 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);
+ 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 );
+ fb_03.pubseekoff(-1, ios_base::end);
+ fb_03.sgetc();
+ 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 );
+ VERIFY( fb_03.write_position() );
+ VERIFY( fb_03.read_position() );
+ }
+}
+
+main()
+{
+ test05();
+ return 0;
+}
diff -urN libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc
--- libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4-io.cc 2003-06-13 18:00:03.000000000 +0200
@@ -0,0 +1,122 @@
+// 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>
+#include <testsuite_io.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+const char name_01[] = "seekoff-2.tst";
+
+void test05()
+{
+ using namespace std;
+ using namespace __gnu_cxx_test;
+
+ typedef filebuf::int_type int_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+
+ bool test = true;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+
+ int_type c1;
+ int_type c2;
+ int_type c3;
+
+ pos_type pt_1(off_type(-1));
+ pos_type pt_2(off_type(0));
+ off_type off_1 = 0;
+ off_type off_2 = 0;
+
+ // seekoff
+ // pubseekoff(off_type off, ios_base::seekdir way, ios_base::openmode which)
+ // alters the stream position to off
+
+ // in | out
+ {
+ constraint_filebuf fb_03;
+ fb_03.pubsetbuf(0, 0);
+ fb_03.open(name_01, ios_base::out | ios_base::in);
+ VERIFY( fb_03.unbuffered() );
+ // 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' );
+ fb_03.pubseekoff(3, ios_base::beg);
+ c2 = fb_03.sputc('\n'); //current in pointer +1
+ fb_03.pubseekoff(4, ios_base::beg);
+ 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' );
+ fb_03.pubseekoff(0, ios_base::cur);
+ c2 = fb_03.sputc('x'); //test current out pointer
+ c3 = fb_03.sputc('\n');
+ fb_03.pubseekoff(0, ios_base::cur);
+ 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);
+ 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 );
+ fb_03.pubseekoff(-1, ios_base::end);
+ fb_03.sgetc();
+ 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 );
+ VERIFY( fb_03.unbuffered() );
+ }
+}
+
+main()
+{
+ test05();
+ return 0;
+}
diff -urN libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekpos/char/1.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1.cc
--- libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekpos/char/1.cc 2003-04-12 21:21:35.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/1.cc 1970-01-01 01:00:00.000000000 +0100
@@ -1,127 +0,0 @@
-// 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 = __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;
-}
diff -urN libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc
--- libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/3-io.cc 2003-06-13 14:21:42.000000000 +0200
@@ -0,0 +1,98 @@
+// 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>
+#include <testsuite_io.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+const char name_01[] = "seekpos-1.tst"; // file with data in it
+
+void test05()
+{
+ using namespace std;
+ using namespace __gnu_cxx_test;
+
+ typedef filebuf::int_type int_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+
+ bool test = true;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+
+ int_type c1;
+ int_type c2;
+ int_type c3;
+
+ pos_type pt_1(off_type(-1));
+ pos_type pt_2(off_type(0));
+ pos_type pt_3;
+ off_type off_1 = 0;
+ off_type off_2 = 0;
+
+ // seekpos
+ // pubseekpos(pos_type sp, ios_base::openmode)
+ // alters the stream position to sp
+
+ // in | out
+ {
+ constraint_filebuf fb_03;
+ fb_03.open(name_01, ios_base::out | ios_base::in);
+ VERIFY( fb_03.write_position() );
+ VERIFY( !fb_03.read_position() );
+ 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' );
+ pt_3 = fb_03.pubseekoff(0, ios_base::cur);
+ fb_03.pubseekpos(pt_3);
+ c2 = fb_03.sputc('\n'); //test current out pointer
+ pt_3 = fb_03.pubseekoff(0, ios_base::cur);
+ fb_03.pubseekpos(pt_3);
+ 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();
+ VERIFY( fb_03.write_position() );
+ VERIFY( !fb_03.read_position() );
+ fb_03.close();
+ VERIFY( !fb_03.is_open() );
+ }
+}
+
+main()
+{
+ test05();
+ return 0;
+}
diff -urN libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc
--- libstdc++-v3-curr/testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/char/4-io.cc 2003-06-13 14:21:45.000000000 +0200
@@ -0,0 +1,97 @@
+// 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>
+#include <testsuite_io.h>
+
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %*.txt
+
+const char name_01[] = "seekpos-2.tst"; // file with data in it
+
+void test05()
+{
+ using namespace std;
+ using namespace __gnu_cxx_test;
+
+ typedef filebuf::int_type int_type;
+ typedef filebuf::pos_type pos_type;
+ typedef filebuf::off_type off_type;
+
+ bool test = true;
+ streamsize strmsz_1, strmsz_2;
+ streamoff strmof_1, strmof_2;
+
+ int_type c1;
+ int_type c2;
+ int_type c3;
+
+ pos_type pt_1(off_type(-1));
+ pos_type pt_2(off_type(0));
+ pos_type pt_3;
+ off_type off_1 = 0;
+ off_type off_2 = 0;
+
+ // seekpos
+ // pubseekpos(pos_type sp, ios_base::openmode)
+ // alters the stream position to sp
+
+ // in | out
+ {
+ constraint_filebuf fb_03;
+ fb_03.pubsetbuf(0, 0);
+ fb_03.open(name_01, ios_base::out | ios_base::in);
+ VERIFY( fb_03.unbuffered() );
+ 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' );
+ pt_3 = fb_03.pubseekoff(0, ios_base::cur);
+ fb_03.pubseekpos(pt_3);
+ c2 = fb_03.sputc('\n'); //test current out pointer
+ pt_3 = fb_03.pubseekoff(0, ios_base::cur);
+ fb_03.pubseekpos(pt_3);
+ 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();
+ VERIFY( fb_03.unbuffered() );
+ fb_03.close();
+ VERIFY( !fb_03.is_open() );
+ }
+}
+
+main()
+{
+ test05();
+ return 0;
+}
diff -urN libstdc++-v3-curr/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc
--- libstdc++-v3-curr/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc 2003-06-10 02:05:49.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/1-io.cc 2003-06-13 17:09:23.000000000 +0200
@@ -54,6 +54,7 @@
VERIFY( !fb_01.read_position() );
strmsz_1 = fb_01.sputn("racadabras", 10);//"abracadabras or what?"
strmsz_2 = fb_01.sputn(", i wanna reach out and", 10);
+ fb_01.pubseekoff(0, std::ios_base::cur);
c1 = fb_01.sgetc(); // -1
c2 = fb_01.sputbackc('z');
strmsz_2 = fb_01.in_avail();
@@ -63,9 +64,9 @@
VERIFY( 1 == strmsz_2 );
//test for _in_cur == _in_beg
// fb_01._M_out_beg = "bd23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZracada" etc
- fb_01.pubseekoff(10, std::ios_base::beg,
- std::ios_base::in | std::ios_base::out);
+ fb_01.pubseekoff(10, std::ios_base::beg);
fb_01.sputc('m');
+ fb_01.pubseekoff(0, std::ios_base::cur);
strmsz_1 = fb_01.in_avail();
c1 = fb_01.sgetc();
fb_01.snextc();
@@ -78,9 +79,11 @@
VERIFY( c2 == 'z' );
// test for replacing char with identical one
fb_01.snextc();
+ fb_01.pubseekoff(0, std::ios_base::cur);
fb_01.sputc('u');
fb_01.sputc('v');
fb_01.sputc('a');
+ fb_01.pubseekoff(0, std::ios_base::end);
strmsz_1 = fb_01.in_avail();
c2 = fb_01.sputbackc('a');
strmsz_2 = fb_01.in_avail();
diff -urN libstdc++-v3-curr/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc
--- libstdc++-v3-curr/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc 2003-06-10 02:05:49.000000000 +0200
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/sputbackc/char/2-io.cc 2003-06-13 17:07:53.000000000 +0200
@@ -54,6 +54,7 @@
VERIFY( fb_01.unbuffered() );
strmsz_1 = fb_01.sputn("racadabras", 10);//"abracadabras or what?"
strmsz_2 = fb_01.sputn(", i wanna reach out and", 10);
+ fb_01.pubseekoff(0, std::ios_base::cur);
c1 = fb_01.sgetc(); // -1
c2 = fb_01.sputbackc('z');
strmsz_2 = fb_01.in_avail();
@@ -63,9 +64,9 @@
VERIFY( 1 == strmsz_2 );
//test for _in_cur == _in_beg
// fb_01._M_out_beg = "bd23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZracada" etc
- fb_01.pubseekoff(10, std::ios_base::beg,
- std::ios_base::in | std::ios_base::out);
+ fb_01.pubseekoff(10, std::ios_base::beg);
fb_01.sputc('m');
+ fb_01.pubseekoff(0, std::ios_base::cur);
strmsz_1 = fb_01.in_avail();
c1 = fb_01.sgetc();
fb_01.snextc();
@@ -78,15 +79,17 @@
VERIFY( c2 == 'z' );
// test for replacing char with identical one
fb_01.snextc();
+ fb_01.pubseekoff(0, std::ios_base::cur);
fb_01.sputc('u');
fb_01.sputc('v');
fb_01.sputc('a');
+ fb_01.pubseekoff(0, std::ios_base::end);
strmsz_1 = fb_01.in_avail();
c2 = fb_01.sputbackc('a');
strmsz_2 = fb_01.in_avail();
c3 = fb_01.sgetc();
VERIFY( c3 == c2 );
- VERIFY( strmsz_1 == strmsz_2 );
+ VERIFY( strmsz_1 + 1 == strmsz_2 );
VERIFY( fb_01.unbuffered() );
}
}
diff -urN libstdc++-v3-curr/testsuite/data/seekoff-1.tst libstdc++-v3/testsuite/data/seekoff-1.tst
--- libstdc++-v3-curr/testsuite/data/seekoff-1.tst 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/data/seekoff-1.tst 2003-06-13 13:53:18.000000000 +0200
@@ -0,0 +1,3 @@
+// 990117 bkoz
+// test functionality of basic_filebuf for char_type == char
+// this is a data file for 27filebuf.cc
diff -urN libstdc++-v3-curr/testsuite/data/seekoff-2.tst libstdc++-v3/testsuite/data/seekoff-2.tst
--- libstdc++-v3-curr/testsuite/data/seekoff-2.tst 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/data/seekoff-2.tst 2003-06-13 13:53:18.000000000 +0200
@@ -0,0 +1,3 @@
+// 990117 bkoz
+// test functionality of basic_filebuf for char_type == char
+// this is a data file for 27filebuf.cc
diff -urN libstdc++-v3-curr/testsuite/data/seekpos-1.tst libstdc++-v3/testsuite/data/seekpos-1.tst
--- libstdc++-v3-curr/testsuite/data/seekpos-1.tst 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/data/seekpos-1.tst 2003-06-13 13:53:18.000000000 +0200
@@ -0,0 +1,3 @@
+// 990117 bkoz
+// test functionality of basic_filebuf for char_type == char
+// this is a data file for 27filebuf.cc
diff -urN libstdc++-v3-curr/testsuite/data/seekpos-2.tst libstdc++-v3/testsuite/data/seekpos-2.tst
--- libstdc++-v3-curr/testsuite/data/seekpos-2.tst 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/data/seekpos-2.tst 2003-06-13 13:53:18.000000000 +0200
@@ -0,0 +1,3 @@
+// 990117 bkoz
+// test functionality of basic_filebuf for char_type == char
+// this is a data file for 27filebuf.cc