summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/27_io/basic_istream/seekg
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/testsuite/27_io/basic_istream/seekg
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'libstdc++-v3/testsuite/27_io/basic_istream/seekg')
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/2.cc48
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/26211.cc63
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-1.cc52
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc52
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc87
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc128
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc136
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/2.cc46
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/26211.cc63
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-1.cc49
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc49
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/exceptions_badbit_throw.cc87
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc124
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/sstream.cc134
14 files changed, 1118 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/2.cc
new file mode 100644
index 000000000..56800531d
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/2.cc
@@ -0,0 +1,48 @@
+// 2003-04-22 pme
+
+// Copyright (C) 2003, 2009 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// DR 60 -- seekg does not effect calls to gcount
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ istringstream ist("the lamb lies down on broadway");
+ ios::pos_type pos = ist.tellg();
+ ist.ignore(4);
+ int count1 = ist.gcount();
+ ist.seekg(pos);
+ int count2 = ist.gcount();
+ VERIFY( count1 == count2 );
+ ist.seekg(ios::off_type(pos), ios::beg);
+ count2 = ist.gcount();
+ VERIFY( count1 == count2 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/26211.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/26211.cc
new file mode 100644
index 000000000..be2865078
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/26211.cc
@@ -0,0 +1,63 @@
+// 2010-11-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/26211
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ typedef istringstream::pos_type pos_type;
+
+ istringstream iss("Duos for Doris");
+ ostringstream oss;
+
+ const pos_type p0 = iss.tellg();
+ VERIFY( p0 == pos_type(0) );
+
+ iss >> oss.rdbuf();
+ VERIFY( iss.rdstate() == iss.eofbit );
+
+ iss.seekg(0, ios_base::beg);
+ VERIFY( iss.good() );
+
+ iss.seekg(0, ios_base::beg);
+ VERIFY( !iss.fail() );
+ VERIFY( iss.tellg() == p0 );
+
+ iss >> oss.rdbuf();
+ VERIFY( iss.rdstate() == iss.eofbit );
+
+ iss.seekg(p0);
+ VERIFY( iss.good() );
+
+ iss.seekg(p0);
+ VERIFY( !iss.fail() );
+ VERIFY( iss.tellg() == p0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-1.cc
new file mode 100644
index 000000000..1c28cf369
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-1.cc
@@ -0,0 +1,52 @@
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+// Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8348
+void test06(void)
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+ string num1("555");
+
+ // seekg
+ {
+ istringstream iss(num1);
+ istream::pos_type pos1 = iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.seekg(pos1);
+ VERIFY( test = !iss.fail() );
+ }
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
new file mode 100644
index 000000000..899a48d78
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/8348-2.cc
@@ -0,0 +1,52 @@
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010
+// Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8348
+void test06(void)
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+ string num1("555");
+
+ // seekg
+ {
+ istringstream iss(num1);
+ iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.seekg(0, ios_base::beg);
+ VERIFY( test = !iss.fail() );
+ }
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc
new file mode 100644
index 000000000..3d66ce70b
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/exceptions_badbit_throw.cc
@@ -0,0 +1,87 @@
+// Copyright (C) 2003, 2004, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <istream>
+#include <streambuf>
+#include <sstream>
+#include <testsuite_hooks.h>
+#include <testsuite_io.h>
+
+using namespace std;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ __gnu_test::fail_streambuf bib;
+ istream stream(&bib);
+ stream.exceptions(ios_base::badbit);
+
+ istream::pos_type pos;
+
+ try
+ {
+ stream.seekg(pos);
+ VERIFY( false );
+ }
+ catch (const __gnu_test::positioning_error&)
+ {
+ // stream should set badbit and rethrow facet_error.
+ VERIFY( stream.bad() );
+ VERIFY( (stream.rdstate() & ios_base::failbit) == 0 );
+ VERIFY( !stream.eof() );
+ }
+ catch (...)
+ {
+ VERIFY(false);
+ }
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+ __gnu_test::fail_streambuf bib;
+ istream stream(&bib);
+ stream.exceptions(ios_base::badbit);
+
+ istream::off_type off(5);
+
+ try
+ {
+ stream.seekg(off, ios_base::cur);
+ VERIFY( false );
+ }
+ catch (const __gnu_test::positioning_error&)
+ {
+ // stream should set badbit and rethrow facet_error.
+ VERIFY( stream.bad() );
+ VERIFY( (stream.rdstate() & ios_base::failbit) == 0 );
+ VERIFY( !stream.eof() );
+ }
+ catch (...)
+ {
+ VERIFY(false);
+ }
+}
+
+// libstdc++/9546
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
new file mode 100644
index 000000000..503841a75
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/fstream.cc
@@ -0,0 +1,128 @@
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// { dg-require-fileio "" }
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// fstreams
+void test04(void)
+{
+ typedef std::istream::off_type off_type;
+
+ bool test __attribute__((unused)) = true;
+ std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ std::ios_base::iostate state01, state02;
+ const char str_lit01[] = "istream_seeks-1.txt";
+ const char str_lit02[] = "istream_seeks-2.txt";
+ std::ifstream if01(str_lit01, std::ios_base::in | std::ios_base::out);
+ std::ifstream if02(str_lit01, std::ios_base::in);
+ std::ifstream if03(str_lit02, std::ios_base::out | std::ios_base::trunc);
+ VERIFY( if01.good() );
+ VERIFY( if02.good() );
+ VERIFY( if03.good() );
+
+ std::istream is01(if01.rdbuf());
+ std::istream is02(if02.rdbuf());
+ std::istream is03(if03.rdbuf());
+
+ pos01 = is01.tellg();
+ pos02 = is01.tellg();
+ pos03 = is02.tellg();
+ pos04 = is02.tellg();
+ pos05 = is03.tellg();
+ pos06 = is03.tellg();
+
+ // istream& seekg(pos_type)
+ // istream& seekg(off_type, ios_base::seekdir)
+
+ // cur
+ // NB: see library issues list 136. It's the v-3 interp that seekg
+ // only sets the input buffer, or else istreams with buffers that
+ // have _M_mode == ios_base::out will fail to have consistency
+ // between seekg and tellg.
+ state01 = is01.rdstate();
+ is01.seekg(10, std::ios_base::cur);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(10, std::ios_base::cur);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(10, std::ios_base::cur);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+
+ // beg
+ state01 = is01.rdstate();
+ is01.seekg(20, std::ios_base::beg);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(20, std::ios_base::beg);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(20, std::ios_base::beg);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
new file mode 100644
index 000000000..183decc9e
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/sstream.cc
@@ -0,0 +1,136 @@
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+// { dg-require-fileio "" }
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// stringstreams
+void test05(void)
+{
+ typedef std::istream::off_type off_type;
+
+ bool test __attribute__((unused)) = true;
+ std::istream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ std::ios_base::iostate state01, state02;
+ const char str_lit01[] = "istream_seeks-1.tst";
+ std::ifstream if01(str_lit01);
+ std::ifstream if02(str_lit01);
+ std::ifstream if03(str_lit01);
+ VERIFY( if01.good() );
+ VERIFY( if02.good() );
+ VERIFY( if03.good() );
+
+ std::stringbuf strbuf01(std::ios_base::in | std::ios_base::out);
+ if01 >> &strbuf01;
+ // initialize stringbufs that are ios_base::out
+ std::stringbuf strbuf03(strbuf01.str(), std::ios_base::out);
+ // initialize stringbufs that are ios_base::in
+ std::stringbuf strbuf02(strbuf01.str(), std::ios_base::in);
+
+ std::istream is01(&strbuf01);
+ std::istream is02(&strbuf02);
+ std::istream is03(&strbuf03);
+
+ // pos_type tellg()
+ // in | out
+ pos01 = is01.tellg();
+ pos02 = is01.tellg();
+ pos03 = is02.tellg();
+ pos04 = is02.tellg();
+ pos05 = is03.tellg();
+ pos06 = is03.tellg();
+
+ // istream& seekg(pos_type)
+ // istream& seekg(off_type, ios_base::seekdir)
+
+ // cur
+ // NB: see library issues list 136. It's the v-3 interp that seekg
+ // only sets the input buffer, or else istreams with buffers that
+ // have _M_mode == ios_base::out will fail to have consistency
+ // between seekg and tellg.
+ state01 = is01.rdstate();
+ is01.seekg(10, std::ios_base::cur);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(10, std::ios_base::cur);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(10, std::ios_base::cur);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 ); // as only out buffer
+ VERIFY( state01 != state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+
+ // beg
+ state01 = is01.rdstate();
+ is01.seekg(20, std::ios_base::beg);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(20, std::ios_base::beg);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(20, std::ios_base::beg);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 ); // as only out buffer
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/2.cc
new file mode 100644
index 000000000..c4088d8e6
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/2.cc
@@ -0,0 +1,46 @@
+// Copyright (C) 2004, 2009 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// DR 60 -- seekg does not effect calls to gcount
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ wistringstream ist(L"the lamb lies down on broadway");
+ wios::pos_type pos = ist.tellg();
+ ist.ignore(4);
+ int count1 = ist.gcount();
+ ist.seekg(pos);
+ int count2 = ist.gcount();
+ VERIFY( count1 == count2 );
+ ist.seekg(wios::off_type(pos), wios::beg);
+ count2 = ist.gcount();
+ VERIFY( count1 == count2 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/26211.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/26211.cc
new file mode 100644
index 000000000..2a73e1ec7
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/26211.cc
@@ -0,0 +1,63 @@
+// 2010-11-18 Paolo Carlini <paolo.carlini@oracle.com>
+
+// Copyright (C) 2010 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/26211
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ typedef wistringstream::pos_type pos_type;
+
+ wistringstream iss(L"Duos for Doris");
+ wostringstream oss;
+
+ const pos_type p0 = iss.tellg();
+ VERIFY( p0 == pos_type(0) );
+
+ iss >> oss.rdbuf();
+ VERIFY( iss.rdstate() == iss.eofbit );
+
+ iss.seekg(0, ios_base::beg);
+ VERIFY( iss.good() );
+
+ iss.seekg(0, ios_base::beg);
+ VERIFY( !iss.fail() );
+ VERIFY( iss.tellg() == p0 );
+
+ iss >> oss.rdbuf();
+ VERIFY( iss.rdstate() == iss.eofbit );
+
+ iss.seekg(p0);
+ VERIFY( iss.good() );
+
+ iss.seekg(p0);
+ VERIFY( !iss.fail() );
+ VERIFY( iss.tellg() == p0 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-1.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-1.cc
new file mode 100644
index 000000000..f2d323744
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-1.cc
@@ -0,0 +1,49 @@
+// Copyright (C) 2004, 2005, 2006, 2009 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8348
+void test06(void)
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+ wstring num1(L"555");
+
+ // seekg
+ {
+ wistringstream iss(num1);
+ wistream::pos_type pos1 = iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.seekg(pos1);
+ VERIFY( test = !iss.fail() );
+ }
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc
new file mode 100644
index 000000000..d428a88ba
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/8348-2.cc
@@ -0,0 +1,49 @@
+// Copyright (C) 2004, 2005, 2006, 2009, 2010 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+
+#include <istream>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/8348
+void test06(void)
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+ wstring num1(L"555");
+
+ // seekg
+ {
+ wistringstream iss(num1);
+ iss.tellg();
+ int asNum = 0;
+ iss >> asNum;
+ VERIFY( test = iss.eof() );
+ VERIFY( test = !iss.fail() );
+ iss.seekg(0, ios_base::beg);
+ VERIFY( test = !iss.fail() );
+ }
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/exceptions_badbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/exceptions_badbit_throw.cc
new file mode 100644
index 000000000..849e26863
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/exceptions_badbit_throw.cc
@@ -0,0 +1,87 @@
+// Copyright (C) 2004, 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+
+#include <istream>
+#include <streambuf>
+#include <sstream>
+#include <testsuite_hooks.h>
+#include <testsuite_io.h>
+
+using namespace std;
+
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+ __gnu_test::fail_wstreambuf bib;
+ wistream stream(&bib);
+ stream.exceptions(ios_base::badbit);
+
+ wistream::pos_type pos;
+
+ try
+ {
+ stream.seekg(pos);
+ VERIFY( false );
+ }
+ catch (const __gnu_test::positioning_error&)
+ {
+ // stream should set badbit and rethrow facet_error.
+ VERIFY( stream.bad() );
+ VERIFY( (stream.rdstate() & ios_base::failbit) == 0 );
+ VERIFY( !stream.eof() );
+ }
+ catch (...)
+ {
+ VERIFY(false);
+ }
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+ __gnu_test::fail_wstreambuf bib;
+ wistream stream(&bib);
+ stream.exceptions(ios_base::badbit);
+
+ wistream::off_type off(5);
+
+ try
+ {
+ stream.seekg(off, ios_base::cur);
+ VERIFY( false );
+ }
+ catch (const __gnu_test::positioning_error&)
+ {
+ // stream should set badbit and rethrow facet_error.
+ VERIFY( stream.bad() );
+ VERIFY( (stream.rdstate() & ios_base::failbit) == 0 );
+ VERIFY( !stream.eof() );
+ }
+ catch (...)
+ {
+ VERIFY(false);
+ }
+}
+
+// libstdc++/9546
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc
new file mode 100644
index 000000000..2aa7260e7
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/fstream.cc
@@ -0,0 +1,124 @@
+// Copyright (C) 2004, 2009 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// fstreams
+void test04(void)
+{
+ typedef std::wistream::off_type off_type;
+
+ bool test __attribute__((unused)) = true;
+ std::wistream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ std::ios_base::iostate state01, state02;
+ const char str_lit01[] = "wistream_seeks-1.txt";
+ const char str_lit02[] = "wistream_seeks-2.txt";
+ std::wifstream if01(str_lit01, std::ios_base::in | std::ios_base::out);
+ std::wifstream if02(str_lit01, std::ios_base::in);
+ std::wifstream if03(str_lit02, std::ios_base::out | std::ios_base::trunc);
+ VERIFY( if01.good() );
+ VERIFY( if02.good() );
+ VERIFY( if03.good() );
+
+ std::wistream is01(if01.rdbuf());
+ std::wistream is02(if02.rdbuf());
+ std::wistream is03(if03.rdbuf());
+
+ pos01 = is01.tellg();
+ pos02 = is01.tellg();
+ pos03 = is02.tellg();
+ pos04 = is02.tellg();
+ pos05 = is03.tellg();
+ pos06 = is03.tellg();
+
+ // istream& seekg(pos_type)
+ // istream& seekg(off_type, ios_base::seekdir)
+
+ // cur
+ // NB: see library issues list 136. It's the v3 interp that seekg
+ // only sets the input buffer, or else istreams with buffers that
+ // have _M_mode == ios_base::out will fail to have consistency
+ // between seekg and tellg.
+ state01 = is01.rdstate();
+ is01.seekg(10, std::ios_base::cur);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(10, std::ios_base::cur);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(10, std::ios_base::cur);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+
+ // beg
+ state01 = is01.rdstate();
+ is01.seekg(20, std::ios_base::beg);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(20, std::ios_base::beg);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(20, std::ios_base::beg);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/sstream.cc b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/sstream.cc
new file mode 100644
index 000000000..dcc196b8b
--- /dev/null
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/sstream.cc
@@ -0,0 +1,134 @@
+// 2000-06-29 bkoz
+
+// Copyright (C) 2000, 2001, 2002, 2003, 2009 Free Software Foundation
+//
+// 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 27.6.1.3 unformatted input functions
+// NB: ostream has a particular "seeks" category. Adopt this for istreams too.
+// @require@ %-*.tst %-*.txt
+// @diff@ %-*.tst %-*.txt
+
+#include <istream>
+#include <sstream>
+#include <fstream>
+#include <testsuite_hooks.h>
+
+// stringstreams
+void test05(void)
+{
+ typedef std::istream::off_type off_type;
+
+ bool test __attribute__((unused)) = true;
+ std::wistream::pos_type pos01, pos02, pos03, pos04, pos05, pos06;
+ std::ios_base::iostate state01, state02;
+ const char str_lit01[] = "wistream_seeks-1.tst";
+ std::wifstream if01(str_lit01);
+ std::wifstream if02(str_lit01);
+ std::wifstream if03(str_lit01);
+ VERIFY( if01.good() );
+ VERIFY( if02.good() );
+ VERIFY( if03.good() );
+
+ std::wstringbuf strbuf01(std::ios_base::in | std::ios_base::out);
+ if01 >> &strbuf01;
+ // initialize stringbufs that are ios_base::out
+ std::wstringbuf strbuf03(strbuf01.str(), std::ios_base::out);
+ // initialize stringbufs that are ios_base::in
+ std::wstringbuf strbuf02(strbuf01.str(), std::ios_base::in);
+
+ std::wistream is01(&strbuf01);
+ std::wistream is02(&strbuf02);
+ std::wistream is03(&strbuf03);
+
+ // pos_type tellg()
+ // in | out
+ pos01 = is01.tellg();
+ pos02 = is01.tellg();
+ pos03 = is02.tellg();
+ pos04 = is02.tellg();
+ pos05 = is03.tellg();
+ pos06 = is03.tellg();
+
+ // istream& seekg(pos_type)
+ // istream& seekg(off_type, ios_base::seekdir)
+
+ // cur
+ // NB: see library issues list 136. It's the v-3 interp that seekg
+ // only sets the input buffer, or else istreams with buffers that
+ // have _M_mode == ios_base::out will fail to have consistency
+ // between seekg and tellg.
+ state01 = is01.rdstate();
+ is01.seekg(10, std::ios_base::cur);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(10, std::ios_base::cur);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(10, std::ios_base::cur);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 ); // as only out buffer
+ VERIFY( state01 != state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+
+ // beg
+ state01 = is01.rdstate();
+ is01.seekg(20, std::ios_base::beg);
+ state02 = is01.rdstate();
+ pos01 = is01.tellg();
+ VERIFY( pos01 == pos02 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos02 = is01.tellg();
+ VERIFY( pos02 == pos01 );
+
+ state01 = is02.rdstate();
+ is02.seekg(20, std::ios_base::beg);
+ state02 = is02.rdstate();
+ pos03 = is02.tellg();
+ VERIFY( pos03 == pos04 + off_type(10) );
+ VERIFY( state01 == state02 );
+ pos04 = is02.tellg();
+ VERIFY( pos03 == pos04 );
+
+ state01 = is03.rdstate();
+ is03.seekg(20, std::ios_base::beg);
+ state02 = is03.rdstate();
+ pos05 = is03.tellg();
+ VERIFY( pos05 == pos06 ); // as only out buffer
+ VERIFY( state01 == state02 );
+ pos06 = is03.tellg();
+ VERIFY( pos05 == pos06 );
+}
+
+int main()
+{
+ test05();
+ return 0;
+}