This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]