2832.cc: New.
authorPaolo Carlini <paolo@gcc.gnu.org>
Tue, 24 Aug 2004 13:55:44 +0000 (13:55 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 24 Aug 2004 13:55:44 +0000 (13:55 +0000)
2004-08-24  Paolo Carlini  <pcarlini@suse.de>

* testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc: New.
* testsuite/27_io/basic_istringstream/str/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_ostringstream/cons/wchar_t/3.cc: Likewise.
* testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc: Likewise.
* testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc: Likewise.
* testsuite/27_io/basic_ostringstream/str/wchar_t/2.cc: Likewise.

* testsuite/27_io/basic_istringstream/rdbuf/char/2832.cc: Trim excess
newlines.
* testsuite/27_io/basic_istringstream/str/char/1.cc: Likewise.

From-SVN: r86481

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/char/2832.cc
libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_istringstream/str/char/1.cc
libstdc++-v3/testsuite/27_io/basic_istringstream/str/wchar_t/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/wchar_t/3.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/2.cc [new file with mode: 0644]

index 22f535fc8761c5671138d65d775ebd875f5ab43b..94abb59bd56c7fd8dbd38f7f0cfdc5627a7b511c 100644 (file)
@@ -1,7 +1,20 @@
+2004-08-24  Paolo Carlini  <pcarlini@suse.de>
+
+       * testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc: New.
+       * testsuite/27_io/basic_istringstream/str/wchar_t/1.cc: Likewise.
+       * testsuite/27_io/basic_ostringstream/cons/wchar_t/3.cc: Likewise.
+       * testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc: Likewise.
+       * testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc: Likewise.
+       * testsuite/27_io/basic_ostringstream/str/wchar_t/2.cc: Likewise.
+
+       * testsuite/27_io/basic_istringstream/rdbuf/char/2832.cc: Trim excess
+       newlines.
+       * testsuite/27_io/basic_istringstream/str/char/1.cc: Likewise.
+
 2004-08-22  Matthias Klose  <doko@debian.org>
 
-        * config/abi/m68k-linux-gnu/baseline_symbols.txt: New.
-        * config/abi/sparc-linux-gnu/baseline_symbols.txt: Update to 3.4.0.
+       * config/abi/m68k-linux-gnu/baseline_symbols.txt: New.
+       * config/abi/sparc-linux-gnu/baseline_symbols.txt: Update to 3.4.0.
 
 2004-08-23  Paolo Carlini  <pcarlini@suse.de>
 
 2004-05-18  Jan Beulich  <jbeulich@novell.com>
  
         PR libstdc++/15489
-        * scripts/create_testsuite_files: Also find source files through
-          symbolic links.
+       * scripts/create_testsuite_files: Also find source files through
+       symbolic links.
 
 2004-05-18  Jan Beulich  <jbeulich@novell.com>
 
index 7e30ccd342932ccf17e0170a4ea30218946c339f..445ede3d43baff9f1ced1f62a8e66f5619b0d6b9 100644 (file)
@@ -1,6 +1,6 @@
 // 2000-01-10 bkoz
 
-// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2003, 2004 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
@@ -73,6 +73,3 @@ int main()
   test02();
   return 0;
 }
-
-
-
diff --git a/libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc b/libstdc++-v3/testsuite/27_io/basic_istringstream/rdbuf/wchar_t/2832.cc
new file mode 100644 (file)
index 0000000..7f6d8e3
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright (C) 2004 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.7.2.2 member functions (istringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void 
+redirect_buffer(std::wios& stream, std::wstreambuf* new_buf) 
+{ stream.rdbuf(new_buf); }
+
+std::wstreambuf*
+active_buffer(std::wios& stream)
+{ return stream.rdbuf(); }
+
+// libstdc++/2832
+void test02()
+{
+  bool test __attribute__((unused)) = true;
+  const wchar_t* strlit01 = L"fuck war";
+  const std::wstring str00;
+  const std::wstring str01(strlit01);
+  std::wstring str02;
+  std::wstringbuf sbuf(str01);
+  std::wstreambuf* pbasebuf0 = &sbuf;
+
+  std::wistringstream sstrm1;
+  VERIFY( sstrm1.str() == str00 );
+  // derived rdbuf() always returns original streambuf, even though
+  // it's no longer associated with the stream.
+  std::wstringbuf* const buf1 = sstrm1.rdbuf();
+  // base rdbuf() returns the currently associated streambuf
+  std::wstreambuf* pbasebuf1 = active_buffer(sstrm1);
+  redirect_buffer(sstrm1, &sbuf);
+  std::wstringbuf* const buf2 = sstrm1.rdbuf();
+  std::wstreambuf* pbasebuf2 = active_buffer(sstrm1);
+  VERIFY( buf1 == buf2 ); 
+  VERIFY( pbasebuf1 != pbasebuf2 );
+  VERIFY( pbasebuf2 == pbasebuf0 );
+
+  // derived rdbuf() returns the original buf, so str() doesn't change.
+  VERIFY( sstrm1.str() != str01 );
+  VERIFY( sstrm1.str() == str00 );
+  // however, casting the active streambuf to a stringbuf shows what's up:
+  std::wstringbuf* psbuf = dynamic_cast<std::wstringbuf*>(pbasebuf2);
+  str02 = psbuf->str();
+  VERIFY( str02 == str01 );
+
+  // How confusing and non-intuitive is this?
+  // These semantics are a joke, a serious defect, and incredibly lame.
+}
+
+int main()
+{
+  test02();
+  return 0;
+}
index d9cd676704b43a59b84d545389b672e372be258f..f95b4a2bd7a8cf55c784e72be3a34b10ea8ffd96 100644 (file)
@@ -75,6 +75,3 @@ int main()
   test01();
   return 0;
 }
-
-
-
diff --git a/libstdc++-v3/testsuite/27_io/basic_istringstream/str/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_istringstream/str/wchar_t/1.cc
new file mode 100644 (file)
index 0000000..d64bf12
--- /dev/null
@@ -0,0 +1,75 @@
+// Copyright (C) 2004 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.7.2.2 member functions (istringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+  bool test __attribute__((unused)) = true;
+  std::wistringstream is01;
+  const std::wstring str00; 
+  const std::wstring str01 = L"123";
+  std::wstring str02;
+  const int i01 = 123;
+  int a, b;
+
+  std::ios_base::iostate state1, state2, statefail, stateeof;
+  statefail = std::ios_base::failbit;
+  stateeof = std::ios_base::eofbit;
+
+  // string str() const
+  str02 = is01.str();
+  VERIFY( str00 == str02 );
+
+  // void str(const basic_string&)
+  is01.str(str01);
+  str02 = is01.str();
+  VERIFY( str01 == str02 );
+  state1 = is01.rdstate();
+  is01 >> a;
+  state2 = is01.rdstate();
+  VERIFY( a == i01 );
+  // 22.2.2.1.2 num_get virtual functions
+  // p 13
+  // in any case, if stage 2 processing was terminated by the test for
+  // in == end then err != ios_base::eofbit is performed.
+  VERIFY( state1 != state2 );
+  VERIFY( state2 == stateeof ); 
+
+  is01.str(str01);
+  is01 >> b;
+  VERIFY( b != a ); 
+  // as is01.good() is false, istream::sentry blocks extraction.
+
+  is01.clear();
+  state1 = is01.rdstate();
+  is01 >> b;
+  state2 = is01.rdstate();
+  VERIFY( b == a ); 
+  VERIFY( state1 != state2 );
+  VERIFY( state2 == stateeof ); 
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/wchar_t/3.cc b/libstdc++-v3/testsuite/27_io/basic_ostringstream/cons/wchar_t/3.cc
new file mode 100644 (file)
index 0000000..c763275
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright (C) 2004 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.7.3.2 member functions (ostringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// 03: sanity checks for strings, stringbufs
+void
+test03()
+{
+  bool test __attribute__((unused)) = false;
+
+  // Empty string sanity check.
+  std::wstring str01;
+  std::wstring::iterator __i_start = str01.begin();
+  std::wstring::iterator __i_end = str01.end();
+  std::wstring::size_type len = str01.size();
+  test = __i_start == __i_end;
+  VERIFY( len == 0 );
+
+  // Full string sanity check.
+  std::wstring str02(L"these golden days, i spend waiting for you:\n"
+                    L"Betty Carter on Verve with I'm Yours and You're Mine.");
+  __i_start = str02.begin();
+  __i_end = str02.end();
+  len = str02.size();
+  VERIFY( __i_start != __i_end );
+  VERIFY( len != 0 );
+  // Test an empty ostringstream for sanity.
+  std::wostringstream ostrstream0;
+  std::wstring str03 = ostrstream0.str();
+  __i_start = str03.begin();
+  __i_end = str03.end();
+  len = str03.size();
+  VERIFY( __i_start == __i_end );
+  VERIFY( len == 0 );
+  VERIFY( str01 == str03 );
+}
+
+int main()
+{
+  test03();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc b/libstdc++-v3/testsuite/27_io/basic_ostringstream/rdbuf/wchar_t/2832.cc
new file mode 100644 (file)
index 0000000..b0d7456
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright (C) 2004 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.7.3.2 member functions (ostringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void 
+redirect_buffer(std::wios& stream, std::wstreambuf* new_buf) 
+{ stream.rdbuf(new_buf); }
+
+std::wstreambuf*
+active_buffer(std::wios& stream)
+{ return stream.rdbuf(); }
+
+// libstdc++/2832
+void test02()
+{
+  bool test __attribute__((unused)) = true;
+  const wchar_t* strlit01 = L"fuck war";
+  const std::wstring str00;
+  const std::wstring str01(strlit01);
+  std::wstring str02;
+  std::wstringbuf sbuf(str01);
+  std::wstreambuf* pbasebuf0 = &sbuf;
+
+  std::wostringstream sstrm1;
+  VERIFY( sstrm1.str() == str00 );
+  // derived rdbuf() always returns original streambuf, even though
+  // it's no longer associated with the stream.
+  std::wstringbuf* const buf1 = sstrm1.rdbuf();
+  // base rdbuf() returns the currently associated streambuf
+  std::wstreambuf* pbasebuf1 = active_buffer(sstrm1);
+  redirect_buffer(sstrm1, &sbuf);
+  std::wstringbuf* const buf2 = sstrm1.rdbuf();
+  std::wstreambuf* pbasebuf2 = active_buffer(sstrm1);
+  VERIFY( buf1 == buf2 ); 
+  VERIFY( pbasebuf1 != pbasebuf2 );
+  VERIFY( pbasebuf2 == pbasebuf0 );
+
+  // derived rdbuf() returns the original buf, so str() doesn't change.
+  VERIFY( sstrm1.str() != str01 );
+  VERIFY( sstrm1.str() == str00 );
+  // however, casting the active streambuf to a stringbuf shows what's up:
+  std::wstringbuf* psbuf = dynamic_cast<std::wstringbuf*>(pbasebuf2);
+  str02 = psbuf->str();
+  VERIFY( str02 == str01 );
+
+  // How confusing and non-intuitive is this?
+  // These semantics are a joke, a serious defect, and incredibly lame.
+}
+
+int main()
+{
+  test02();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/1.cc
new file mode 100644 (file)
index 0000000..b89f07f
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright (C) 2004 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.7.3.2 member functions (ostringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+  bool test __attribute__((unused)) = true;
+  std::wostringstream os01;
+  const std::wstring str00; 
+  const std::wstring str01 = L"123";
+  std::wstring str02;
+
+  std::ios_base::iostate statefail, stateeof;
+  statefail = std::ios_base::failbit;
+  stateeof = std::ios_base::eofbit;
+
+  // string str() const
+  str02 = os01.str();
+  VERIFY( str00 == str02 );
+
+  // void str(const basic_string&)
+  os01.str(str01);
+  str02 = os01.str();
+  VERIFY( str01 == str02 );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_ostringstream/str/wchar_t/2.cc
new file mode 100644 (file)
index 0000000..5856302
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright (C) 2004 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.7.3.2 member functions (ostringstream_members)
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// user-reported error
+class derived_oss: public std::wostringstream 
+{
+public:
+  derived_oss() : std::wostringstream() { }
+};
+
+void
+test04()
+{
+  bool test __attribute__((unused)) = true;
+  derived_oss yy;
+  yy << L"buena vista social club\n";
+  VERIFY( yy.str() == std::wstring(L"buena vista social club\n") );
+}
+
+int main()
+{
+  test04();
+  return 0;
+}