This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

[v3] 27_io/seekoff/pos and sputbackc testcases


Hi,

tested x86-linux, reviewed by Benjamin.

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]