summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog92
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/append/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/append.cc)2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/append/wchar_t/1.cc164
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/assign/char/1.cc53
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/assign/char/2.cc59
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/assign/char/3.cc (renamed from libstdc++-v3/testsuite/21_strings/assign.cc)57
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/1.cc53
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/2.cc59
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/3.cc61
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc (renamed from libstdc++-v3/testsuite/21_strings/capacity.cc)93
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc102
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/2.cc43
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc102
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/2.cc43
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/compare/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/compare.cc)3
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/compare/wchar_t/1.cc136
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc)79
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/2.cc41
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/3.cc69
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/4.cc43
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc44
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/1.cc161
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/2.cc41
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/3.cc69
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/4.cc43
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc44
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/element_access.cc)2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/2.cc (renamed from libstdc++-v3/testsuite/21_strings/invariants.cc)62
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc90
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/1.cc94
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/2.cc115
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/3.cc90
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/find/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/find.cc)2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/1.cc198
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/insert/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/insert.cc)58
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/insert/char/2.cc87
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/1.cc195
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/2.cc87
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/inserters_extractors.cc)194
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/4.cc69
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc90
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/6.cc65
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/7.cc57
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/8.cc53
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/9.cc56
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc171
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc69
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc90
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc65
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc57
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc53
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc56
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/operators/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/operations.cc)2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/operators/char/2.cc (renamed from libstdc++-v3/testsuite/21_strings/nonmember.cc)2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/1.cc56
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/2.cc300
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/char/1.cc87
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/char/2.cc46
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/char/3.cc74
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/char/4.cc67
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/char/5.cc43
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/1.cc87
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/2.cc47
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/3.cc74
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/4.cc67
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/5.cc43
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/rfind.cc)30
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/2.cc41
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/3.cc40
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/1.cc97
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/2.cc41
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/3.cc40
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/substr/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/substr.cc)2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/substr/wchar_t/1.cc80
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/c_strings.cc)23
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc48
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc69
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc47
-rw-r--r--libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc)99
-rw-r--r--libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/1.cc109
-rw-r--r--libstdc++-v3/testsuite/21_strings/char_traits/typedefs/char/1.cc (renamed from libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc)2
-rw-r--r--libstdc++-v3/testsuite/21_strings/replace.cc202
-rw-r--r--libstdc++-v3/testsuite/testsuite_hooks.cc2
83 files changed, 5052 insertions, 896 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 1209342de98..728cf5e23d1 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,93 @@
+2003-03-18 Paolo Carlini <pcarlini@unitus.it>
+
+ Reshuffle 21_strings testsuite.
+ * testsuite/21_strings/append.cc, c_strings.cc, invariants.cc,
+ assign.cc, ctor_copy_dtor.cc, nonmember.cc, capacity.cc,
+ element_access.cc, operations.cc, char_traits_requirements.cc,
+ find.cc, replace.cc, char_traits_typedefs.cc, insert.cc, rfind.cc,
+ compare.cc, inserters_extractors.cc, substr.cc: Split up, add
+ wchar_t tests as follows.
+ * 21_strings/basic_string/append/char/1.cc: New.
+ * 21_strings/basic_string/append/wchar_t/1.cc: New.
+ * 21_strings/basic_string/assign/char/1.cc: New.
+ * 21_strings/basic_string/assign/char/2.cc: New.
+ * 21_strings/basic_string/assign/char/3.cc: New.
+ * 21_strings/basic_string/assign/wchar_t/1.cc: New.
+ * 21_strings/basic_string/assign/wchar_t/2.cc: New.
+ * 21_strings/basic_string/assign/wchar_t/3.cc: New.
+ * 21_strings/basic_string/capacity/1.cc: New.
+ * 21_strings/basic_string/capacity/char/1.cc: New.
+ * 21_strings/basic_string/capacity/char/2.cc: New.
+ * 21_strings/basic_string/capacity/wchar_t/1.cc: New.
+ * 21_strings/basic_string/capacity/wchar_t/2.cc: New.
+ * 21_strings/basic_string/compare/char/1.cc: New.
+ * 21_strings/basic_string/compare/wchar_t/1.cc: New.
+ * 21_strings/basic_string/cons/char/1.cc: New.
+ * 21_strings/basic_string/cons/char/2.cc: New.
+ * 21_strings/basic_string/cons/char/3.cc: New.
+ * 21_strings/basic_string/cons/char/4.cc: New.
+ * 21_strings/basic_string/cons/char/5.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/1.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/2.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/3.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/4.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/5.cc: New.
+ * 21_strings/basic_string/element_access/char/1.cc: New.
+ * 21_strings/basic_string/element_access/char/2.cc: New.
+ * 21_strings/basic_string/element_access/char/3.cc: New.
+ * 21_strings/basic_string/element_access/wchar_t/1.cc: New.
+ * 21_strings/basic_string/element_access/wchar_t/2.cc: New.
+ * 21_strings/basic_string/element_access/wchar_t/3.cc: New.
+ * 21_strings/basic_string/find/char/1.cc: New.
+ * 21_strings/basic_string/find/wchar_t/1.cc: New.
+ * 21_strings/basic_string/insert/char/1.cc: New.
+ * 21_strings/basic_string/insert/char/2.cc: New.
+ * 21_strings/basic_string/insert/wchar_t/1.cc: New.
+ * 21_strings/basic_string/insert/wchar_t/2.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/1.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/4.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/5.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/6.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/7.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/8.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/9.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/1.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/4.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/5.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/6.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/7.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/8.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/9.cc: New.
+ * 21_strings/basic_string/operators/char/1.cc: New.
+ * 21_strings/basic_string/operators/char/2.cc: New.
+ * 21_strings/basic_string/operators/wchar_t/1.cc: New.
+ * 21_strings/basic_string/operators/wchar_t/2.cc: New.
+ * 21_strings/basic_string/replace/char/1.cc: New.
+ * 21_strings/basic_string/replace/char/2.cc: New.
+ * 21_strings/basic_string/replace/char/3.cc: New.
+ * 21_strings/basic_string/replace/char/4.cc: New.
+ * 21_strings/basic_string/replace/char/5.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/1.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/2.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/3.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/4.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/5.cc: New.
+ * 21_strings/basic_string/rfind/char/1.cc: New.
+ * 21_strings/basic_string/rfind/char/2.cc: New.
+ * 21_strings/basic_string/rfind/char/3.cc: New.
+ * 21_strings/basic_string/rfind/wchar_t/1.cc: New.
+ * 21_strings/basic_string/rfind/wchar_t/2.cc: New.
+ * 21_strings/basic_string/rfind/wchar_t/3.cc: New.
+ * 21_strings/basic_string/substr/char/1.cc: New.
+ * 21_strings/basic_string/substr/wchar_t/1.cc: New.
+ * 21_strings/c_strings/char/1.cc: New.
+ * 21_strings/c_strings/char/2.cc: New.
+ * 21_strings/c_strings/wchar_t/1.cc: New.
+ * 21_strings/c_strings/wchar_t/2.cc: New.
+ * 21_strings/char_traits/requirements/char/1.cc: New.
+ * 21_strings/char_traits/requirements/wchar_t/1.cc: New.
+ * 21_strings/char_traits/typedefs/char/1.cc: New.
+
2003-03-17 Paolo Carlini <pcarlini@unitus.it>
Petur Runolfsson <peturr02@ru.is>
@@ -1192,7 +1282,7 @@
global_templates.cc time_get_members_wchar_t.cc, members.cc,
time_put.cc, messages_byname.cc, time_put_members_char.cc,
messages.cc, time_put_members_wchar_t.cc, messages_members_char.cc):
- Splint up into individual test cases...
+ Split up into individual test cases...
* 22_locale/codecvt/1.cc: New.
* 22_locale/codecvt/2.cc: New.
* 22_locale/codecvt/always_noconv/char/1.cc: New.
diff --git a/libstdc++-v3/testsuite/21_strings/append.cc b/libstdc++-v3/testsuite/21_strings/basic_string/append/char/1.cc
index c518e952671..a7fc70e7a04 100644
--- a/libstdc++-v3/testsuite/21_strings/append.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/append/char/1.cc
@@ -1,6 +1,6 @@
// 1999-07-08 bkoz
-// Copyright (C) 1999 Free Software Foundation, Inc.
+// Copyright (C) 1999, 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
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/append/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/append/wchar_t/1.cc
new file mode 100644
index 00000000000..ea8cd17b954
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/append/wchar_t/1.cc
@@ -0,0 +1,164 @@
+// 1999-07-08 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.5.3 basic_string::assign
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+bool test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::const_reference cref;
+ typedef std::wstring::reference ref;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const wchar_t str_lit01[] = L"point bolivar, texas";
+ const std::wstring str01(str_lit01);
+ const std::wstring str02(L"corpus, ");
+ const std::wstring str03;
+ std::wstring str05;
+
+
+ // wstring& append(const wstring&)
+ str05 = str02;
+ str05.append(str05);
+ VERIFY( str05 == L"corpus, corpus, " );
+ str05.append(str01);
+ VERIFY( str05 == L"corpus, corpus, point bolivar, texas" );
+ str05.append(str03);
+ VERIFY( str05 == L"corpus, corpus, point bolivar, texas" );
+ std::wstring str06;
+ str06.append(str05);
+ VERIFY( str06 == str05 );
+
+
+ // wstring& append(const wstring&, size_type pos, size_type n)
+ str05.erase();
+ str06.erase();
+ csz01 = str03.size();
+ try {
+ str06.append(str03, csz01 + 1, 0);
+ VERIFY( false );
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ csz01 = str01.size();
+ try {
+ str06.append(str01, csz01 + 1, 0);
+ VERIFY( false );
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ str05 = str02;
+ str05.append(str01, 0, std::wstring::npos);
+ VERIFY( str05 == L"corpus, point bolivar, texas" );
+ VERIFY( str05 != str02 );
+
+ str06 = str02;
+ str06.append(str01, 15, std::wstring::npos);
+ VERIFY( str06 == L"corpus, texas" );
+ VERIFY( str02 != str06 );
+
+
+ // wstring& append(const wchar_t* s)
+ str05.erase();
+ str06.erase();
+ str05.append(L"");
+ VERIFY( str05 == str03 );
+
+ str05.append(str_lit01);
+ VERIFY( str05 == str01 );
+
+ str06 = str02;
+ str06.append(L"corpus, ");
+ VERIFY( str06 == L"corpus, corpus, " );
+
+
+ // wstring& append(const wchar_t* s, size_type n)
+ str05.erase();
+ str06.erase();
+ str05.append(L"", 0);
+ VERIFY( str05.size() == 0 );
+ VERIFY( str05 == str03 );
+
+ str05.append(str_lit01, sizeof(str_lit01) - 1);
+ VERIFY( str05 == str01 );
+
+ str06 = str02;
+ str06.append(L"corpus, ", 6);
+ VERIFY( str06 == L"corpus, corpus" );
+
+ str06 = str02;
+ str06.append(L"corpus, ", 12);
+ VERIFY( str06 != L"corpus, corpus, " );
+
+
+ // wstring& append(size_type n, char c)
+ str05.erase();
+ str06.erase();
+ str05.append(0, L'a');
+ VERIFY( str05 == str03 );
+ str06.append(8, L'.');
+ VERIFY( str06 == L"........" );
+
+
+ // template<typename InputIter>
+ // wstring& append(InputIter first, InputIter last)
+ str05.erase();
+ str06.erase();
+ str05.append(str03.begin(), str03.end());
+ VERIFY( str05 == str03 );
+
+ str06 = str02;
+ str06.append(str01.begin(), str01.begin() + str01.find(L'r'));
+ VERIFY( str06 == L"corpus, point boliva" );
+ VERIFY( str06 != str01 );
+ VERIFY( str06 != str02 );
+
+ str05 = str01;
+ str05.append(str05.begin(), str05.begin() + str05.find(L'r'));
+ VERIFY( str05 == L"point bolivar, texaspoint boliva" );
+ VERIFY( str05 != str01 );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/assign/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/assign/char/1.cc
new file mode 100644
index 00000000000..735c61c86e0
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/assign/char/1.cc
@@ -0,0 +1,53 @@
+// 2001-10-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 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.
+
+// 21.3.5 string modifiers
+
+#include <string>
+#include <cstdio>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test = true;
+
+ using namespace std;
+
+ const char* strlit = "../the long pier/Hanalei Bay/Kauai/Hawaii";
+ string aux = strlit;
+ string::size_type i = aux.rfind("/");
+ if (i != string::npos)
+ aux.assign(aux, i + 1, string::npos);
+ VERIFY(aux == "Hawaii");
+
+ aux = strlit;
+ i = aux.rfind("r/");
+ if (i != string::npos)
+ aux.assign(aux, i + 1, string::npos);
+ VERIFY(aux.c_str()[9] == 'B');
+ VERIFY(aux == "/Hanalei Bay/Kauai/Hawaii");
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/assign/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/assign/char/2.cc
new file mode 100644
index 00000000000..9783c45202c
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/assign/char/2.cc
@@ -0,0 +1,59 @@
+// 2001-10-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 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.
+
+// 21.3.5 string modifiers
+
+#include <string>
+#include <cstdio>
+#include <testsuite_hooks.h>
+
+// assign(const basic_string& __str, size_type __pos, size_type __n)
+void
+test02()
+{
+ bool test = true;
+
+ using namespace std;
+
+ string one = "Selling England by the pound";
+ string two = one;
+ string three = "Brilliant trees";
+
+ one.assign(one, 8, 100);
+ VERIFY( one == "England by the pound" );
+
+ one.assign(one, 8, 0);
+ VERIFY( one == "" );
+
+ one.assign(two, 8, 7);
+ VERIFY( one == "England" );
+
+ one.assign(three, 10, 100);
+ VERIFY( one == "trees" );
+
+ three.assign(one, 0, 3);
+ VERIFY( three == "tre" );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/assign.cc b/libstdc++-v3/testsuite/21_strings/basic_string/assign/char/3.cc
index fb1ec09b5a3..cfc35545da4 100644
--- a/libstdc++-v3/testsuite/21_strings/assign.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/assign/char/3.cc
@@ -1,6 +1,6 @@
// 2001-10-30 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 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
@@ -24,56 +24,6 @@
#include <cstdio>
#include <testsuite_hooks.h>
-void
-test01()
-{
- bool test = true;
-
- using namespace std;
-
- const char* strlit = "../the long pier/Hanalei Bay/Kauai/Hawaii";
- string aux = strlit;
- string::size_type i = aux.rfind("/");
- if (i != string::npos)
- aux.assign(aux, i + 1, string::npos);
- VERIFY(aux == "Hawaii");
-
- aux = strlit;
- i = aux.rfind("r/");
- if (i != string::npos)
- aux.assign(aux, i + 1, string::npos);
- VERIFY(aux.c_str()[9] == 'B');
- VERIFY(aux == "/Hanalei Bay/Kauai/Hawaii");
-}
-
-// assign(const basic_string& __str, size_type __pos, size_type __n)
-void
-test02()
-{
- bool test = true;
-
- using namespace std;
-
- string one = "Selling England by the pound";
- string two = one;
- string three = "Brilliant trees";
-
- one.assign(one, 8, 100);
- VERIFY( one == "England by the pound" );
-
- one.assign(one, 8, 0);
- VERIFY( one == "" );
-
- one.assign(two, 8, 7);
- VERIFY( one == "England" );
-
- one.assign(three, 10, 100);
- VERIFY( one == "trees" );
-
- three.assign(one, 0, 3);
- VERIFY( three == "tre" );
-}
-
// assign(const _CharT* __s, size_type __n)
// assign(const _CharT* __s)
void
@@ -104,13 +54,8 @@ test03()
VERIFY( one == "by the" );
}
-
-
int main()
{
- test01();
- test02();
test03();
-
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/1.cc
new file mode 100644
index 00000000000..5f110598bb9
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/1.cc
@@ -0,0 +1,53 @@
+// 2001-10-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 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.
+
+// 21.3.5 string modifiers
+
+#include <string>
+#include <cstdio>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+ bool test = true;
+
+ using namespace std;
+
+ const wchar_t* strlit = L"../the long pier/Hanalei Bay/Kauai/Hawaii";
+ wstring aux = strlit;
+ wstring::size_type i = aux.rfind(L"/");
+ if (i != wstring::npos)
+ aux.assign(aux, i + 1, wstring::npos);
+ VERIFY(aux == L"Hawaii");
+
+ aux = strlit;
+ i = aux.rfind(L"r/");
+ if (i != wstring::npos)
+ aux.assign(aux, i + 1, wstring::npos);
+ VERIFY(aux.c_str()[9] == L'B');
+ VERIFY(aux == L"/Hanalei Bay/Kauai/Hawaii");
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/2.cc
new file mode 100644
index 00000000000..458204c522e
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/2.cc
@@ -0,0 +1,59 @@
+// 2001-10-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 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.
+
+// 21.3.5 string modifiers
+
+#include <string>
+#include <cstdio>
+#include <testsuite_hooks.h>
+
+// assign(const basic_string& __str, size_type __pos, size_type __n)
+void
+test02()
+{
+ bool test = true;
+
+ using namespace std;
+
+ wstring one = L"Selling England by the pound";
+ wstring two = one;
+ wstring three = L"Brilliant trees";
+
+ one.assign(one, 8, 100);
+ VERIFY( one == L"England by the pound" );
+
+ one.assign(one, 8, 0);
+ VERIFY( one == L"" );
+
+ one.assign(two, 8, 7);
+ VERIFY( one == L"England" );
+
+ one.assign(three, 10, 100);
+ VERIFY( one == L"trees" );
+
+ three.assign(one, 0, 3);
+ VERIFY( three == L"tre" );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/3.cc
new file mode 100644
index 00000000000..fc9b5a21eea
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/assign/wchar_t/3.cc
@@ -0,0 +1,61 @@
+// 2001-10-30 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 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.
+
+// 21.3.5 string modifiers
+
+#include <string>
+#include <cstdio>
+#include <testsuite_hooks.h>
+
+// assign(const _CharT* __s, size_type __n)
+// assign(const _CharT* __s)
+void
+test03()
+{
+ bool test = true;
+
+ using namespace std;
+
+ wstring one;
+ wstring two;
+ wstring three = two;
+ const wchar_t* source = L"Selling England by the pound";
+
+ one.assign(source);
+ VERIFY( one == L"Selling England by the pound" );
+
+ one.assign(source, 28);
+ VERIFY( one == L"Selling England by the pound" );
+
+ two.assign(source, 7);
+ VERIFY( two == L"Selling" );
+
+ one.assign(one.c_str() + 8, 20);
+ VERIFY( one == L"England by the pound" );
+
+ one.assign(one.c_str() + 8, 6);
+ VERIFY( one == L"by the" );
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/capacity.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
index 99a5b655f58..0a50ee7d9ed 100644
--- a/libstdc++-v3/testsuite/21_strings/capacity.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/1.cc
@@ -1,6 +1,6 @@
// 1999-05-11 bkoz
-// Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+// Copyright (C) 1999, 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
@@ -125,37 +125,9 @@ namespace std
void test01()
{
- // 1 POD types : resize, capacity, reserve
bool test = true;
- std::string str01;
- typedef std::string::size_type size_type_s;
-
- size_type_s sz01 = str01.capacity();
- str01.reserve(100);
- size_type_s sz02 = str01.capacity();
- VERIFY( sz02 >= sz01 );
- VERIFY( sz02 >= 100 );
- str01.reserve();
- sz01 = str01.capacity();
- VERIFY( sz01 >= 0 );
-
- sz01 = str01.size() + 5;
- str01.resize(sz01);
- sz02 = str01.size();
- VERIFY( sz01 == sz02 );
-
- sz01 = str01.size() - 5;
- str01.resize(sz01);
- sz02 = str01.size();
- VERIFY( sz01 == sz02 );
-
- std::string str05(30, 'q');
- std::string str06 = str05;
- str05 = str06 + str05;
- VERIFY( str05.capacity() >= str05.size() );
- VERIFY( str06.capacity() >= str06.size() );
-
- // 2 non POD types : resize, capacity, reserve
+
+ // non POD types : resize, capacity, reserve
std::basic_string< A<B> > str02;
typedef std::basic_string< A<B> >::size_type size_type_o;
size_type_o sz03;
@@ -187,48 +159,8 @@ void test01()
VERIFY( str07.capacity() >= str07.size() );
VERIFY( str08.capacity() >= str08.size() );
- // 3 POD types: size, length, max_size, clear(), empty()
- bool b01;
- std::string str011;
- b01 = str01.empty();
- VERIFY( b01 == true );
- sz01 = str01.size();
- sz02 = str01.length();
- VERIFY( sz01 == sz02 );
- str01.c_str();
- sz01 = str01.size();
- sz02 = str01.length();
- VERIFY( sz01 == sz02 );
-
- sz01 = str01.length();
- str01.c_str();
- str011 = str01 + "_addendum_";
- str01.c_str();
- sz02 = str01.length();
- VERIFY( sz01 == sz02 );
- sz02 = str011.length();
- VERIFY( sz02 > sz01 );
-
- // trickster allocator issues involved with these:
- std::string str3 = "8-chars_8-chars_";
- const char* p3 = str3.c_str();
- std::string str4 = str3 + "7-chars";
- const char* p4 = str3.c_str();
-
- sz01 = str01.size();
- sz02 = str01.max_size();
- VERIFY( sz02 >= sz01 );
-
- sz01 = str01.size();
- str01.clear();
- b01 = str01.empty();
- VERIFY( b01 == true );
- sz02 = str01.size();
- VERIFY( sz01 >= sz02 );
-
-
- // 4 non-POD types: size, length, max_size, clear(), empty()
- b01 = str02.empty();
+ // non-POD types: size, length, max_size, clear(), empty()
+ bool b01 = str02.empty();
VERIFY( b01 == true );
sz03 = str02.size();
sz04 = str02.length();
@@ -249,19 +181,6 @@ void test01()
VERIFY( sz03 >= sz04 );
}
-// libstdc++/4548
-// http://gcc.gnu.org/ml/libstdc++/2001-11/msg00150.html
-void test02()
-{
- bool test = true;
-
- std::string str01 = "twelve chars";
- // str01 becomes shared
- std::string str02 = str01;
- str01.reserve(1);
- VERIFY( str01.capacity() == 12 );
-}
-
#if !__GXX_WEAK__
// Explicitly instantiate for systems with no COMDAT or weak support.
template
@@ -276,7 +195,5 @@ template
int main()
{
test01();
- test02();
-
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
new file mode 100644
index 00000000000..6072898318a
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc
@@ -0,0 +1,102 @@
+// 1999-05-11 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.3 string capacity
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ // POD types : resize, capacity, reserve
+ bool test = true;
+ std::string str01;
+ typedef std::string::size_type size_type_s;
+
+ size_type_s sz01 = str01.capacity();
+ str01.reserve(100);
+ size_type_s sz02 = str01.capacity();
+ VERIFY( sz02 >= sz01 );
+ VERIFY( sz02 >= 100 );
+ str01.reserve();
+ sz01 = str01.capacity();
+ VERIFY( sz01 >= 0 );
+
+ sz01 = str01.size() + 5;
+ str01.resize(sz01);
+ sz02 = str01.size();
+ VERIFY( sz01 == sz02 );
+
+ sz01 = str01.size() - 5;
+ str01.resize(sz01);
+ sz02 = str01.size();
+ VERIFY( sz01 == sz02 );
+
+ std::string str05(30, 'q');
+ std::string str06 = str05;
+ str05 = str06 + str05;
+ VERIFY( str05.capacity() >= str05.size() );
+ VERIFY( str06.capacity() >= str06.size() );
+
+ // POD types: size, length, max_size, clear(), empty()
+ bool b01;
+ std::string str011;
+ b01 = str01.empty();
+ VERIFY( b01 == true );
+ sz01 = str01.size();
+ sz02 = str01.length();
+ VERIFY( sz01 == sz02 );
+ str01.c_str();
+ sz01 = str01.size();
+ sz02 = str01.length();
+ VERIFY( sz01 == sz02 );
+
+ sz01 = str01.length();
+ str01.c_str();
+ str011 = str01 + "_addendum_";
+ str01.c_str();
+ sz02 = str01.length();
+ VERIFY( sz01 == sz02 );
+ sz02 = str011.length();
+ VERIFY( sz02 > sz01 );
+
+ // trickster allocator issues involved with these:
+ std::string str3 = "8-chars_8-chars_";
+ const char* p3 = str3.c_str();
+ std::string str4 = str3 + "7-chars";
+ const char* p4 = str3.c_str();
+
+ sz01 = str01.size();
+ sz02 = str01.max_size();
+ VERIFY( sz02 >= sz01 );
+
+ sz01 = str01.size();
+ str01.clear();
+ b01 = str01.empty();
+ VERIFY( b01 == true );
+ sz02 = str01.size();
+ VERIFY( sz01 >= sz02 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/2.cc
new file mode 100644
index 00000000000..731a9187065
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/2.cc
@@ -0,0 +1,43 @@
+// 1999-05-11 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.3 string capacity
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// libstdc++/4548
+// http://gcc.gnu.org/ml/libstdc++/2001-11/msg00150.html
+void test02()
+{
+ bool test = true;
+
+ std::string str01 = "twelve chars";
+ // str01 becomes shared
+ std::string str02 = str01;
+ str01.reserve(1);
+ VERIFY( str01.capacity() == 12 );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
new file mode 100644
index 00000000000..18af608d7d1
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc
@@ -0,0 +1,102 @@
+// 1999-05-11 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.3 string capacity
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ // POD types : resize, capacity, reserve
+ bool test = true;
+ std::wstring str01;
+ typedef std::wstring::size_type size_type_s;
+
+ size_type_s sz01 = str01.capacity();
+ str01.reserve(100);
+ size_type_s sz02 = str01.capacity();
+ VERIFY( sz02 >= sz01 );
+ VERIFY( sz02 >= 100 );
+ str01.reserve();
+ sz01 = str01.capacity();
+ VERIFY( sz01 >= 0 );
+
+ sz01 = str01.size() + 5;
+ str01.resize(sz01);
+ sz02 = str01.size();
+ VERIFY( sz01 == sz02 );
+
+ sz01 = str01.size() - 5;
+ str01.resize(sz01);
+ sz02 = str01.size();
+ VERIFY( sz01 == sz02 );
+
+ std::wstring str05(30, L'q');
+ std::wstring str06 = str05;
+ str05 = str06 + str05;
+ VERIFY( str05.capacity() >= str05.size() );
+ VERIFY( str06.capacity() >= str06.size() );
+
+ // POD types: size, length, max_size, clear(), empty()
+ bool b01;
+ std::wstring str011;
+ b01 = str01.empty();
+ VERIFY( b01 == true );
+ sz01 = str01.size();
+ sz02 = str01.length();
+ VERIFY( sz01 == sz02 );
+ str01.c_str();
+ sz01 = str01.size();
+ sz02 = str01.length();
+ VERIFY( sz01 == sz02 );
+
+ sz01 = str01.length();
+ str01.c_str();
+ str011 = str01 + L"_addendum_";
+ str01.c_str();
+ sz02 = str01.length();
+ VERIFY( sz01 == sz02 );
+ sz02 = str011.length();
+ VERIFY( sz02 > sz01 );
+
+ // trickster allocator issues involved with these:
+ std::wstring str3 = L"8-chars_8-chars_";
+ const wchar_t* p3 = str3.c_str();
+ std::wstring str4 = str3 + L"7-chars";
+ const wchar_t* p4 = str3.c_str();
+
+ sz01 = str01.size();
+ sz02 = str01.max_size();
+ VERIFY( sz02 >= sz01 );
+
+ sz01 = str01.size();
+ str01.clear();
+ b01 = str01.empty();
+ VERIFY( b01 == true );
+ sz02 = str01.size();
+ VERIFY( sz01 >= sz02 );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/2.cc
new file mode 100644
index 00000000000..08aa2294bfa
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/2.cc
@@ -0,0 +1,43 @@
+// 1999-05-11 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.3 string capacity
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// libstdc++/4548
+// http://gcc.gnu.org/ml/libstdc++/2001-11/msg00150.html
+void test02()
+{
+ bool test = true;
+
+ std::wstring str01 = L"twelve chars";
+ // str01 becomes shared
+ std::wstring str02 = str01;
+ str01.reserve(1);
+ VERIFY( str01.capacity() == 12 );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/compare.cc b/libstdc++-v3/testsuite/21_strings/basic_string/compare/char/1.cc
index bd95253e4db..02b6b79037b 100644
--- a/libstdc++-v3/testsuite/21_strings/compare.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/compare/char/1.cc
@@ -1,6 +1,6 @@
// 980930 bkoz work with libstdc++v3
-// Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+// Copyright (C) 1998, 1999, 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
@@ -132,6 +132,5 @@ int
main()
{
test01();
-
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/compare/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/compare/wchar_t/1.cc
new file mode 100644
index 00000000000..25f8abdab97
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/compare/wchar_t/1.cc
@@ -0,0 +1,136 @@
+// 980930 bkoz work with libstdc++v3
+
+// Copyright (C) 1998, 1999, 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.
+
+// 21.3.6.8 basic_string::compare
+// int compare(const basic_string& str) const;
+// int compare(size_type pos1, size_type n1, const basic_string& str) const;
+// int compare(size_type pos1, size_type n1, const basic_string& str,
+// size_type pos2, size_type n2) const;
+// int compare(const charT* s) const;
+// int compare(size_type pos1, size_type n1,
+// const charT* s, size_type n2 = npos) const;
+
+// NB compare should be thought of as a lexographical compare, ie how
+// things would be sorted in a dictionary.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+enum want_value {lt=0, z=1, gt=2};
+
+int
+test_value(int result, want_value expected);
+
+int
+test_value(int result, want_value expected)
+{
+ bool pass = false;
+
+ switch (expected) {
+ case lt:
+ if (result < 0)
+ pass = true;
+ break;
+ case z:
+ if (!result)
+ pass = true;
+ break;
+ case gt:
+ if (result > 0)
+ pass = true;
+ break;
+ default:
+ pass = false; //should not get here
+ }
+
+#ifdef DEBUG_ASSERT
+ assert(pass);
+#endif
+
+ return 0;
+}
+
+
+int
+test01()
+{
+ using namespace std;
+
+ wstring str_0(L"costa rica");
+ wstring str_1(L"costa marbella");
+ wstring str_2;
+
+ //sanity check
+ test_value(wcscmp(L"costa marbella", L"costa rica"), lt);
+ test_value(wcscmp(L"costa rica", L"costa rica"), z);
+ test_value(wcscmp(str_1.data(), str_0.data()), lt);
+ test_value(wcscmp(str_0.data(), str_1.data()), gt);
+ test_value(wcsncmp(str_1.data(), str_0.data(), 6), z);
+ test_value(wcsncmp(str_1.data(), str_0.data(), 14), lt);
+ test_value(wmemcmp(str_1.data(), str_0.data(), 6), z);
+ test_value(wmemcmp(str_1.data(), str_0.data(), 14), lt);
+ test_value(wmemcmp(L"costa marbella", L"costa rica", 14), lt);
+
+ // int compare(const basic_string& str) const;
+ test_value(str_0.compare(str_1), gt); //because r>m
+ test_value(str_1.compare(str_0), lt); //because m<r
+ str_2 = str_0;
+ test_value(str_2.compare(str_0), z);
+ str_2 = L"cost";
+ test_value(str_2.compare(str_0), lt);
+ str_2 = L"costa ricans";
+ test_value(str_2.compare(str_0), gt);
+
+ // int compare(size_type pos1, size_type n1, const basic_string& str) const;
+ test_value(str_1.compare(0, 6, str_0), lt);
+ str_2 = L"cost";
+ test_value(str_1.compare(0, 4, str_2), z);
+ test_value(str_1.compare(0, 5, str_2), gt);
+
+ // int compare(size_type pos1, size_type n1, const basic_string& str,
+ // size_type pos2, size_type n2) const;
+ test_value(str_1.compare(0, 6, str_0, 0, 6), z);
+ test_value(str_1.compare(0, 7, str_0, 0, 7), lt);
+ test_value(str_0.compare(0, 7, str_1, 0, 7), gt);
+
+ // int compare(const charT* s) const;
+ test_value(str_0.compare(L"costa marbella"), gt);
+ test_value(str_1.compare(L"costa rica"), lt);
+ str_2 = str_0;
+ test_value(str_2.compare(L"costa rica"), z);
+ test_value(str_2.compare(L"cost"), gt);
+ test_value(str_2.compare(L"costa ricans"), lt);
+
+ // int compare(size_type pos, size_type n1, const charT* str,
+ // size_type n2 = npos) const;
+ test_value(str_1.compare(0, 6, L"costa rica", 0, 6), z);
+ test_value(str_1.compare(0, 7, L"costa rica", 0, 7), lt);
+ test_value(str_0.compare(0, 7, L"costa marbella", 0, 7), gt);
+
+ return 0;
+}
+
+
+int
+main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/1.cc
index 28e9d8ef160..3c92910f312 100644
--- a/libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/1.cc
@@ -22,7 +22,6 @@
#include <new>
#include <string>
-#include <vector>
#include <stdexcept>
#include <testsuite_hooks.h>
@@ -154,87 +153,9 @@ void test01(void)
VERIFY( str06 == str01 );
}
-void test02()
-{
- bool test = true;
-
- // template<typename _InputIter>
- // basic_string(_InputIter begin, _InputIter end, const allocator& a)
- // where _InputIter is integral [21.3.1 para 15]
- std::string s(10,0);
- VERIFY( s.size() == 10 );
-}
-
-void test03()
-{
- bool test = true;
- const char* with_nulls = "This contains \0 a zero byte.";
-
- // These are tests to see how basic_string handles data with NUL
- // bytes. Obviously basic_string(char*) will halt at the first one, but
- // nothing else should.
- std::string s1 (with_nulls, 28);
- VERIFY( s1.size() == 28 );
- std::string s2 (s1);
- VERIFY( s2.size() == 28 );
-
- // Not defined, but libstdc++ throws an exception.
- const char* bogus = 0;
- try
- {
- std::string str1(bogus);
- VERIFY( false );
- }
- catch(std::exception& fail)
- {
- VERIFY( true );
- }
-
- // Not defined, but libstdc++ throws an exception.
- try
- {
- std::string str2(bogus, 5);
- VERIFY( false );
- }
- catch(std::exception& fail)
- {
- VERIFY( true );
- }
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2002-06/msg00025.html
-void test04()
-{
- bool test = true;
-
- std::string str01("portofino");
-
- std::string::reverse_iterator i1 = str01.rbegin();
- std::string::reverse_iterator i2 = str01.rend();
- std::string str02(i1, i2);
- VERIFY( str02 == "onifotrop" );
-}
-
-// libstdc++/8347
-void test05()
-{
- bool test = true;
-
- std::vector<char> empty;
- std::string empty2(empty.begin(), empty.end());
-
- // libstdc++/8716 (same underlying situation, same fix)
- char const * s = NULL;
- std::string zero_length_built_with_NULL(s,0);
-}
-
int main()
{
__gnu_cxx_test::set_memory_limits();
test01();
- test02();
- test03();
- test04();
- test05();
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/2.cc
new file mode 100644
index 00000000000..d6458a96712
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/2.cc
@@ -0,0 +1,41 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test02()
+{
+ bool test = true;
+
+ // template<typename _InputIter>
+ // basic_string(_InputIter begin, _InputIter end, const allocator& a)
+ // where _InputIter is integral [21.3.1 para 15]
+ std::string s(10,0);
+ VERIFY( s.size() == 10 );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/3.cc
new file mode 100644
index 00000000000..6f40dda1833
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/3.cc
@@ -0,0 +1,69 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <new>
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+void test03()
+{
+ bool test = true;
+ const char* with_nulls = "This contains \0 a zero byte.";
+
+ // These are tests to see how basic_string handles data with NUL
+ // bytes. Obviously basic_string(char*) will halt at the first one, but
+ // nothing else should.
+ std::string s1 (with_nulls, 28);
+ VERIFY( s1.size() == 28 );
+ std::string s2 (s1);
+ VERIFY( s2.size() == 28 );
+
+ // Not defined, but libstdc++ throws an exception.
+ const char* bogus = 0;
+ try
+ {
+ std::string str1(bogus);
+ VERIFY( false );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( true );
+ }
+
+ // Not defined, but libstdc++ throws an exception.
+ try
+ {
+ std::string str2(bogus, 5);
+ VERIFY( false );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( true );
+ }
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/4.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/4.cc
new file mode 100644
index 00000000000..fe2f3213215
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/4.cc
@@ -0,0 +1,43 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// http://gcc.gnu.org/ml/libstdc++/2002-06/msg00025.html
+void test04()
+{
+ bool test = true;
+
+ std::string str01("portofino");
+
+ std::string::reverse_iterator i1 = str01.rbegin();
+ std::string::reverse_iterator i2 = str01.rend();
+ std::string str02(i1, i2);
+ VERIFY( str02 == "onifotrop" );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc
new file mode 100644
index 00000000000..4b2f4015854
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/5.cc
@@ -0,0 +1,44 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <string>
+#include <vector>
+#include <testsuite_hooks.h>
+
+// libstdc++/8347
+void test05()
+{
+ bool test = true;
+
+ std::vector<char> empty;
+ std::string empty2(empty.begin(), empty.end());
+
+ // libstdc++/8716 (same underlying situation, same fix)
+ char const * s = NULL;
+ std::string zero_length_built_with_NULL(s,0);
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/1.cc
new file mode 100644
index 00000000000..eeb3516d236
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/1.cc
@@ -0,0 +1,161 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <new>
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+void test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::iterator citerator;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const wchar_t str_lit01[] = L"rodeo beach, marin";
+ const std::wstring str01(str_lit01);
+ const std::wstring str02(L"baker beach, san francisco");
+
+ // basic_string(const wstring&, size_type pos = 0, siz_type n = npos, alloc)
+ csz01 = str01.size();
+ try {
+ std::wstring str03(str01, csz01 + 1);
+ VERIFY( false );
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ try {
+ std::wstring str03(str01, csz01);
+ VERIFY( str03.size() == 0 );
+ VERIFY( str03.size() <= str03.capacity() );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ // basic_string(const wchar_t* s, size_type n, alloc)
+ csz01 = str01.max_size();
+ // NB: As strlen(str_lit01) != csz01, this test is undefined. It
+ // should not crash, but what gets constructed is a bit arbitrary.
+ try {
+ std::wstring str03(str_lit01, csz01 + 1);
+ VERIFY( true );
+ }
+ catch(std::length_error& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ // NB: As strlen(str_lit01) != csz01, this test is undefined. It
+ // should not crash, but what gets constructed is a bit arbitrary.
+ // The "maverick's" of all string objects.
+ try {
+ std::wstring str04(str_lit01, npos);
+ VERIFY( true );
+ }
+ catch(std::length_error& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ // Build a maxsize - 1 lengthed string consisting of all A's
+ try {
+ std::wstring str03(csz01 - 1, 'A');
+ VERIFY( str03.size() == csz01 - 1 );
+ VERIFY( str03.size() <= str03.capacity() );
+ }
+ // NB: bad_alloc is regrettable but entirely kosher for
+ // out-of-memory situations.
+ catch(std::bad_alloc& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ // basic_string(const wchar_t* s, const allocator& a = allocator())
+ std::wstring str04(str_lit01);
+ VERIFY( str01 == str04 );
+
+
+ // basic_string(size_type n, char c, const allocator& a = allocator())
+ csz01 = str01.max_size();
+ try {
+ std::wstring str03(csz01 + 1, L'z');
+ VERIFY( false );
+ }
+ catch(std::length_error& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ try {
+ std::wstring str04(npos, L'b'); // the "maverick's" of all string objects.
+ VERIFY( false );
+ }
+ catch(std::length_error& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ try {
+ std::wstring str03(csz01 - 1, L'z');
+ VERIFY( str03.size() != 0 );
+ VERIFY( str03.size() <= str03.capacity() );
+ }
+ // NB: bad_alloc is regrettable but entirely kosher for
+ // out-of-memory situations.
+ catch(std::bad_alloc& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+
+ // template<typename _InputIter>
+ // basic_string(_InputIter begin, _InputIter end, const allocator& a)
+ std::wstring str06(str01.begin(), str01.end());
+ VERIFY( str06 == str01 );
+}
+
+int main()
+{
+ __gnu_cxx_test::set_memory_limits();
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/2.cc
new file mode 100644
index 00000000000..9eaf4ce2700
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/2.cc
@@ -0,0 +1,41 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test02()
+{
+ bool test = true;
+
+ // template<typename _InputIter>
+ // basic_string(_InputIter begin, _InputIter end, const allocator& a)
+ // where _InputIter is integral [21.3.1 para 15]
+ std::wstring s(10, 0);
+ VERIFY( s.size() == 10 );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/3.cc
new file mode 100644
index 00000000000..46b7287b0e0
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/3.cc
@@ -0,0 +1,69 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <new>
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+void test03()
+{
+ bool test = true;
+ const wchar_t* with_nulls = L"This contains \0 a zero byte.";
+
+ // These are tests to see how basic_string handles data with NUL
+ // bytes. Obviously basic_string(char*) will halt at the first one, but
+ // nothing else should.
+ std::wstring s1 (with_nulls, 28);
+ VERIFY( s1.size() == 28 );
+ std::wstring s2 (s1);
+ VERIFY( s2.size() == 28 );
+
+ // Not defined, but libstdc++ throws an exception.
+ const wchar_t* bogus = 0;
+ try
+ {
+ std::wstring str1(bogus);
+ VERIFY( false );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( true );
+ }
+
+ // Not defined, but libstdc++ throws an exception.
+ try
+ {
+ std::wstring str2(bogus, 5);
+ VERIFY( false );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( true );
+ }
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/4.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/4.cc
new file mode 100644
index 00000000000..87dab121eab
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/4.cc
@@ -0,0 +1,43 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// http://gcc.gnu.org/ml/libstdc++/2002-06/msg00025.html
+void test04()
+{
+ bool test = true;
+
+ std::wstring str01(L"portofino");
+
+ std::wstring::reverse_iterator i1 = str01.rbegin();
+ std::wstring::reverse_iterator i2 = str01.rend();
+ std::wstring str02(i1, i2);
+ VERIFY( str02 == L"onifotrop" );
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc
new file mode 100644
index 00000000000..d02dc9c8f4b
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/5.cc
@@ -0,0 +1,44 @@
+// 1999-06-04 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.1 basic_string constructors.
+
+#include <string>
+#include <vector>
+#include <testsuite_hooks.h>
+
+// libstdc++/8347
+void test05()
+{
+ bool test = true;
+
+ std::vector<wchar_t> empty;
+ std::wstring empty2(empty.begin(), empty.end());
+
+ // libstdc++/8716 (same underlying situation, same fix)
+ wchar_t const * s = NULL;
+ std::wstring zero_length_built_with_NULL(s,0);
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/element_access.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/1.cc
index d9525ba61b1..069aa278680 100644
--- a/libstdc++-v3/testsuite/21_strings/element_access.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/1.cc
@@ -1,6 +1,6 @@
// 1999-06-08 bkoz
-// Copyright (C) 1999 Free Software Foundation, Inc.
+// Copyright (C) 1999, 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
diff --git a/libstdc++-v3/testsuite/21_strings/invariants.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/2.cc
index d6dd05d6831..fbfa0136b67 100644
--- a/libstdc++-v3/testsuite/21_strings/invariants.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/2.cc
@@ -1,6 +1,6 @@
// 1999-06-08 bkoz
-// Copyright (C) 1999 Free Software Foundation, Inc.
+// Copyright (C) 1999, 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
@@ -108,68 +108,8 @@ bool test01(void)
return test;
}
-// Do another sanity check, this time for member functions that return
-// iterators, namely insert and erase.
-bool test02(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::iterator siterator;
- typedef std::string::reverse_iterator sriterator;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
- siterator it1;
- sriterator rit1;
-
- const std::string str01("its beach, santa cruz");
-
- std::string str02 = str01;
- std::string str05 = str02; // optional, so that begin below causes a mutate
- std::string::iterator p = str02.insert(str02.begin(), ' ');
- std::string str03 = str02;
- VERIFY( str03 == str02 );
- *p = '!';
- VERIFY( *str03.c_str() == ' ' );
- str03[0] = '@';
- VERIFY( str02[0] == '!' );
- VERIFY( *p == '!' );
- VERIFY( str02 != str05 );
- VERIFY( str02 != str03 );
-
- std::string str10 = str01;
- std::string::iterator p2 = str10.insert(str10.begin(), 'a');
- std::string str11 = str10;
- *p2 = 'e';
- VERIFY( str11 != str10 );
-
- std::string str06 = str01;
- std::string str07 = str06; // optional, so that begin below causes a mutate
- p = str06.erase(str06.begin());
- std::string str08 = str06;
- VERIFY( str08 == str06 );
- *p = '!';
- VERIFY( *str08.c_str() == 't' );
- str08[0] = '@';
- VERIFY( str06[0] == '!' );
- VERIFY( *p == '!' );
- VERIFY( str06 != str07 );
- VERIFY( str06 != str08 );
-
- std::string str12 = str01;
- p2 = str12.erase(str12.begin(), str12.begin() + str12.size() - 1);
- std::string str13 = str12;
- *p2 = 'e';
- VERIFY( str12 != str13 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
int main()
{
test01();
- test02();
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc
new file mode 100644
index 00000000000..426d0e39638
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc
@@ -0,0 +1,90 @@
+// 1999-06-08 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3 template class basic_string
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+// Do another sanity check, this time for member functions that return
+// iterators, namely insert and erase.
+bool test02(void)
+{
+ bool test = true;
+ typedef std::string::size_type csize_type;
+ typedef std::string::iterator siterator;
+ typedef std::string::reverse_iterator sriterator;
+ csize_type npos = std::string::npos;
+ csize_type csz01, csz02;
+ siterator it1;
+ sriterator rit1;
+
+ const std::string str01("its beach, santa cruz");
+
+ std::string str02 = str01;
+ std::string str05 = str02; // optional, so that begin below causes a mutate
+ std::string::iterator p = str02.insert(str02.begin(), ' ');
+ std::string str03 = str02;
+ VERIFY( str03 == str02 );
+ *p = '!';
+ VERIFY( *str03.c_str() == ' ' );
+ str03[0] = '@';
+ VERIFY( str02[0] == '!' );
+ VERIFY( *p == '!' );
+ VERIFY( str02 != str05 );
+ VERIFY( str02 != str03 );
+
+ std::string str10 = str01;
+ std::string::iterator p2 = str10.insert(str10.begin(), 'a');
+ std::string str11 = str10;
+ *p2 = 'e';
+ VERIFY( str11 != str10 );
+
+ std::string str06 = str01;
+ std::string str07 = str06; // optional, so that begin below causes a mutate
+ p = str06.erase(str06.begin());
+ std::string str08 = str06;
+ VERIFY( str08 == str06 );
+ *p = '!';
+ VERIFY( *str08.c_str() == 't' );
+ str08[0] = '@';
+ VERIFY( str06[0] == '!' );
+ VERIFY( *p == '!' );
+ VERIFY( str06 != str07 );
+ VERIFY( str06 != str08 );
+
+ std::string str12 = str01;
+ p2 = str12.erase(str12.begin(), str12.begin() + str12.size() - 1);
+ std::string str13 = str12;
+ *p2 = 'e';
+ VERIFY( str12 != str13 );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/1.cc
new file mode 100644
index 00000000000..00394cf36c8
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/1.cc
@@ -0,0 +1,94 @@
+// 1999-06-08 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.4 basic_string element access
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+bool test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::const_reference cref;
+ typedef std::wstring::reference ref;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const std::wstring str01(L"tamarindo, costa rica");
+ std::wstring str02(L"41st street beach, capitola, california");
+ std::wstring str03;
+
+ // const_reference operator[] (size_type pos) const;
+ csz01 = str01.size();
+ cref cref1 = str01[csz01 - 1];
+ VERIFY( cref1 == L'a' );
+ cref cref2 = str01[csz01];
+ VERIFY( cref2 == wchar_t() );
+
+ // reference operator[] (size_type pos);
+ csz02 = str02.size();
+ ref ref1 = str02[csz02 - 1];
+ VERIFY( ref1 == L'a' );
+ ref ref2 = str02[1];
+ VERIFY( ref2 == L'1' );
+
+ // const_reference at(size_type pos) const;
+ csz01 = str01.size();
+ cref cref3 = str01.at(csz01 - 1);
+ VERIFY( cref3 == L'a' );
+ try {
+ cref cref4 = str01.at(csz01);
+ VERIFY( false ); // Should not get here, as exception thrown.
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ // reference at(size_type pos);
+ csz01 = str02.size();
+ ref ref3 = str02.at(csz02 - 1);
+ VERIFY( ref3 == L'a' );
+ try {
+ ref ref4 = str02.at(csz02);
+ VERIFY( false ); // Should not get here, as exception thrown.
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/2.cc
new file mode 100644
index 00000000000..37aec1c93ce
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/2.cc
@@ -0,0 +1,115 @@
+// 1999-06-08 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3 template class basic_string
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+// Do a quick sanity check on known problems with element access and
+// ref-counted strings. These should all pass, regardless of the
+// underlying string implementation, of course.
+bool test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::iterator siterator;
+ typedef std::wstring::reverse_iterator sriterator;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+ siterator it1;
+ sriterator rit1;
+
+ std::wstring str01(L"montara beach, half moon bay");
+ const std::wstring str02(L"ocean beach, san francisco");
+ std::wstring str03;
+
+ // 21.3 p 5
+
+ // References, pointers, and iterators referring to the elements of
+ // a basic_string may be invalidated by the following uses of that
+ // basic_string object:
+
+ // ...
+
+ // Susequent to any of the above uses except the forms of insert()
+ // and erase() which return iterators, the first call to non-const
+ // member functions operator[](), at(), begin(), rbegin(), end(), or
+ // rend()
+
+ str03 = str01;
+ it1 = str01.begin();
+ *it1 = L'x';
+ VERIFY( str01[0] == L'x' );
+ VERIFY( str03[0] == L'm' );
+
+ str03 = str01;
+ csz01 = str01.size();
+ rit1 = str01.rbegin(); // NB: Pointing at one-past the end, so ...
+ *rit1 = L'z'; // ... but it's taken care of here
+ VERIFY( str01[csz01 - 1] == L'z' );
+ VERIFY( str03[csz01 - 1] == L'y' );
+
+ str03 = str01;
+ csz01 = str01.size();
+ std::wstring::reference r1 = str01.at(csz01 - 2);
+ VERIFY( str03 == str01 );
+ r1 = L'd';
+ VERIFY( str01[csz01 - 2] == L'd' );
+ VERIFY( str03[csz01 - 2] == L'a' );
+
+ str03 = str01;
+ csz01 = str01.size();
+ std::wstring::reference r2 = str01[csz01 - 3];
+ VERIFY( str03 == str01 );
+ r2 = L'w';
+ VERIFY( str01[csz01 - 3] == L'w' );
+ VERIFY( str03[csz01 - 3] == L'b' );
+
+ str03 = str01;
+ csz02 = str01.size();
+ it1 = str01.end();
+ VERIFY( str03 == str01 );
+ --it1;
+ *it1 = L'q';
+ VERIFY( str01[csz02 - 1] == L'q' );
+ VERIFY( str03[csz02 - 1] == L'z' );
+
+ str03 = str01;
+ rit1 = str01.rend();
+ VERIFY( str03 == str01 );
+ --rit1;
+ *rit1 = L'p';
+ VERIFY( str01[0] == L'p' );
+ VERIFY( str03[0] == L'x' );
+
+ // need to also test for const begin/const end
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/3.cc
new file mode 100644
index 00000000000..b7710382ca8
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/wchar_t/3.cc
@@ -0,0 +1,90 @@
+// 1999-06-08 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3 template class basic_string
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+// Do another sanity check, this time for member functions that return
+// iterators, namely insert and erase.
+bool test02(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::iterator siterator;
+ typedef std::wstring::reverse_iterator sriterator;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+ siterator it1;
+ sriterator rit1;
+
+ const std::wstring str01(L"its beach, santa cruz");
+
+ std::wstring str02 = str01;
+ std::wstring str05 = str02; // optional, so that begin below causes a mutate
+ std::wstring::iterator p = str02.insert(str02.begin(), L' ');
+ std::wstring str03 = str02;
+ VERIFY( str03 == str02 );
+ *p = L'!';
+ VERIFY( *str03.c_str() == L' ' );
+ str03[0] = L'@';
+ VERIFY( str02[0] == L'!' );
+ VERIFY( *p == L'!' );
+ VERIFY( str02 != str05 );
+ VERIFY( str02 != str03 );
+
+ std::wstring str10 = str01;
+ std::wstring::iterator p2 = str10.insert(str10.begin(), L'a');
+ std::wstring str11 = str10;
+ *p2 = L'e';
+ VERIFY( str11 != str10 );
+
+ std::wstring str06 = str01;
+ std::wstring str07 = str06; // optional, so that begin below causes a mutate
+ p = str06.erase(str06.begin());
+ std::wstring str08 = str06;
+ VERIFY( str08 == str06 );
+ *p = L'!';
+ VERIFY( *str08.c_str() == L't' );
+ str08[0] = L'@';
+ VERIFY( str06[0] == L'!' );
+ VERIFY( *p == L'!' );
+ VERIFY( str06 != str07 );
+ VERIFY( str06 != str08 );
+
+ std::wstring str12 = str01;
+ p2 = str12.erase(str12.begin(), str12.begin() + str12.size() - 1);
+ std::wstring str13 = str12;
+ *p2 = L'e';
+ VERIFY( str12 != str13 );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/find.cc b/libstdc++-v3/testsuite/21_strings/basic_string/find/char/1.cc
index c6a4c1cbac8..e59f577374a 100644
--- a/libstdc++-v3/testsuite/21_strings/find.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/find/char/1.cc
@@ -1,6 +1,6 @@
// 1999-06-09 bkoz
-// Copyright (C) 1994, 1999, 2000 Free Software Foundation, Inc.
+// Copyright (C) 1994, 1999, 2000, 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
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/1.cc
new file mode 100644
index 00000000000..4cd643ebcf5
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/find/wchar_t/1.cc
@@ -0,0 +1,198 @@
+// 1999-06-09 bkoz
+
+// Copyright (C) 1994, 1999, 2000, 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.
+
+// 21.3.6.1 basic_string find
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+bool test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::const_reference cref;
+ typedef std::wstring::reference ref;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const wchar_t str_lit01[] = L"mave";
+ const std::wstring str01(L"mavericks, santa cruz");
+ std::wstring str02(str_lit01);
+ std::wstring str03(L"s, s");
+ std::wstring str04;
+
+ // size_type find(const wstring&, size_type pos = 0) const;
+ csz01 = str01.find(str01);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find(str01, 4);
+ VERIFY( csz01 == npos );
+ csz01 = str01.find(str02, 0);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find(str02, 3);
+ VERIFY( csz01 == npos );
+ csz01 = str01.find(str03, 0);
+ VERIFY( csz01 == 8 );
+ csz01 = str01.find(str03, 3);
+ VERIFY( csz01 == 8 );
+ csz01 = str01.find(str03, 12);
+ VERIFY( csz01 == npos );
+
+ // An empty string consists of no characters
+ // therefore it should be found at every point in a string,
+ // except beyond the end
+ csz01 = str01.find(str04, 0);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find(str04, 5);
+ VERIFY( csz01 == 5 );
+ csz01 = str01.find(str04, str01.size());
+ VERIFY( csz01 == str01.size() );
+ csz01 = str01.find(str04, str01.size()+1);
+ VERIFY( csz01 == npos );
+
+ // size_type find(const wchar_t* s, size_type pos, size_type n) const;
+ csz01 = str01.find(str_lit01, 0, 3);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find(str_lit01, 3, 0);
+ VERIFY( csz01 == 3 );
+
+ // size_type find(const wchar_t* s, size_type pos = 0) const;
+ csz01 = str01.find(str_lit01);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find(str_lit01, 3);
+ VERIFY( csz01 == npos );
+
+ // size_type find(wchar_t c, size_type pos = 0) const;
+ csz01 = str01.find(L'z');
+ csz02 = str01.size() - 1;
+ VERIFY( csz01 == csz02 );
+ csz01 = str01.find(L'/');
+ VERIFY( csz01 == npos );
+
+ // size_type find_first_of(const wstring&, size_type pos = 0) const;
+ std::wstring str05(L"xena rulez");
+ csz01 = str01.find_first_of(str01);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find_first_of(str01, 4);
+ VERIFY( csz01 == 4 );
+ csz01 = str01.find_first_of(str02, 0);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find_first_of(str02, 3);
+ VERIFY( csz01 == 3 );
+ csz01 = str01.find_first_of(str03, 0);
+ VERIFY( csz01 == 8 );
+ csz01 = str01.find_first_of(str03, 3);
+ VERIFY( csz01 == 8 );
+ csz01 = str01.find_first_of(str03, 12);
+ VERIFY( csz01 == 16 );
+ csz01 = str01.find_first_of(str05, 0);
+ VERIFY( csz01 == 1 );
+ csz01 = str01.find_first_of(str05, 4);
+ VERIFY( csz01 == 4 );
+
+ // An empty string consists of no characters
+ // therefore it should be found at every point in a string,
+ // except beyond the end
+ // However, str1.find_first_of(str2,pos) finds the first character in
+ // str1 (starting at pos) that exists in str2, which is none for empty str2
+ csz01 = str01.find_first_of(str04, 0);
+ VERIFY( csz01 == npos );
+ csz01 = str01.find_first_of(str04, 5);
+ VERIFY( csz01 == npos );
+
+ // size_type find_first_of(const wchar_t* s, size_type pos, size_type n) const;
+ csz01 = str01.find_first_of(str_lit01, 0, 3);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find_first_of(str_lit01, 3, 0);
+ VERIFY( csz01 == npos );
+
+ // size_type find_first_of(const char* s, size_type pos = 0) const;
+ csz01 = str01.find_first_of(str_lit01);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.find_first_of(str_lit01, 3);
+ VERIFY( csz01 == 3 );
+
+ // size_type find_first_of(wchar_t c, size_type pos = 0) const;
+ csz01 = str01.find_first_of(L'z');
+ csz02 = str01.size() - 1;
+ VERIFY( csz01 == csz02 );
+
+ // size_type find_last_of(const wstring& str, size_type pos = 0) const;
+ // size_type find_last_of(const wchar_t* s, size_type pos, size_type n) const;
+ // size_type find_last_of(const wchar_t* s, size_type pos = 0) const;
+ // size_type find_last_of(wchar_t c, size_type pos = 0) const;
+
+#if 1
+// from tstring.cc, from jason merrill, et. al.
+ std::wstring x;
+ std::wstring::size_type pos;
+ pos = x.find_last_not_of(L'X');
+ VERIFY( pos == npos );
+ pos = x.find_last_not_of(L"XYZ");
+ VERIFY( pos == npos );
+
+ std::wstring y(L"a");
+ pos = y.find_last_not_of(L'X');
+ VERIFY( pos == 0 );
+ pos = y.find_last_not_of(L'a');
+ VERIFY( pos == npos );
+ pos = y.find_last_not_of(L"XYZ");
+ VERIFY( pos == 0 );
+ pos = y.find_last_not_of(L"a");
+ VERIFY( pos == npos );
+
+ std::wstring z(L"ab");
+ pos = z.find_last_not_of(L'X');
+ VERIFY( pos == 1 );
+ pos = z.find_last_not_of(L"XYZ");
+ VERIFY( pos == 1 );
+ pos = z.find_last_not_of(L'b');
+ VERIFY( pos == 0 );
+ pos = z.find_last_not_of(L"Xb");
+ VERIFY( pos == 0 );
+ pos = z.find_last_not_of(L"Xa");
+ VERIFY( pos == 1 );
+ pos = z.find_last_of(L"ab");
+ VERIFY( pos == 1 );
+ pos = z.find_last_of(L"Xa");
+ VERIFY( pos == 0 );
+ pos = z.find_last_of(L"Xb");
+ VERIFY( pos == 1 );
+ pos = z.find_last_of(L"XYZ");
+ VERIFY( pos == std::wstring::npos );
+ pos = z.find_last_of(L'a');
+ VERIFY( pos == 0 );
+ pos = z.find_last_of(L'b');
+ VERIFY( pos == 1 );
+ pos = z.find_last_of(L'X');
+ VERIFY( pos == std::wstring::npos );
+#endif
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/insert.cc b/libstdc++-v3/testsuite/21_strings/basic_string/insert/char/1.cc
index 5e1eda86959..a6052e2170b 100644
--- a/libstdc++-v3/testsuite/21_strings/insert.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/insert/char/1.cc
@@ -187,67 +187,9 @@ int test01(void)
return test;
}
-// Once more
-// string& insert(size_type __p, const char* s, size_type n);
-// string& insert(size_type __p, const char* s);
-// but now s points inside the _Rep
-int test02(void)
-{
- bool test = true;
-
- std::string str01;
- const char* title = "Everything was beautiful, and nothing hurt";
- // Increasing size: str01 is reallocated every time.
- str01 = title;
- str01.insert(0, str01.c_str() + str01.size() - 4, 4);
- VERIFY( str01 == "hurtEverything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(0, str01.c_str(), 5);
- VERIFY( str01 == "EveryEverything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(10, str01.c_str() + 4, 6);
- VERIFY( str01 == "Everythingything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(15, str01.c_str(), 10);
- VERIFY( str01 == "Everything was Everythingbeautiful, and nothing hurt" );
- str01 = title;
- str01.insert(15, str01.c_str() + 11, 13);
- VERIFY( str01 == "Everything was was beautifulbeautiful, and nothing hurt" );
- str01 = title;
- str01.insert(0, str01.c_str());
- VERIFY( str01 == "Everything was beautiful, and nothing hurt"
- "Everything was beautiful, and nothing hurt");
- // Again: no reallocations.
- str01 = title;
- str01.insert(0, str01.c_str() + str01.size() - 4, 4);
- VERIFY( str01 == "hurtEverything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(0, str01.c_str(), 5);
- VERIFY( str01 == "EveryEverything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(10, str01.c_str() + 4, 6);
- VERIFY( str01 == "Everythingything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(15, str01.c_str(), 10);
- VERIFY( str01 == "Everything was Everythingbeautiful, and nothing hurt" );
- str01 = title;
- str01.insert(15, str01.c_str() + 11, 13);
- VERIFY( str01 == "Everything was was beautifulbeautiful, and nothing hurt" );
- str01 = title;
- str01.insert(0, str01.c_str());
- VERIFY( str01 == "Everything was beautiful, and nothing hurt"
- "Everything was beautiful, and nothing hurt");
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
int main()
{
__gnu_cxx_test::set_memory_limits();
test01();
- test02();
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/insert/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/insert/char/2.cc
new file mode 100644
index 00000000000..80b0cee58b7
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/insert/char/2.cc
@@ -0,0 +1,87 @@
+// 1999-06-03 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.5.4 basic_string::insert
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// More
+// string& insert(size_type __p, const char* s, size_type n);
+// string& insert(size_type __p, const char* s);
+// but now s points inside the _Rep
+int test02(void)
+{
+ bool test = true;
+
+ std::string str01;
+ const char* title = "Everything was beautiful, and nothing hurt";
+ // Increasing size: str01 is reallocated every time.
+ str01 = title;
+ str01.insert(0, str01.c_str() + str01.size() - 4, 4);
+ VERIFY( str01 == "hurtEverything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(0, str01.c_str(), 5);
+ VERIFY( str01 == "EveryEverything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(10, str01.c_str() + 4, 6);
+ VERIFY( str01 == "Everythingything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(15, str01.c_str(), 10);
+ VERIFY( str01 == "Everything was Everythingbeautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(15, str01.c_str() + 11, 13);
+ VERIFY( str01 == "Everything was was beautifulbeautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(0, str01.c_str());
+ VERIFY( str01 == "Everything was beautiful, and nothing hurt"
+ "Everything was beautiful, and nothing hurt");
+ // Again: no reallocations.
+ str01 = title;
+ str01.insert(0, str01.c_str() + str01.size() - 4, 4);
+ VERIFY( str01 == "hurtEverything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(0, str01.c_str(), 5);
+ VERIFY( str01 == "EveryEverything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(10, str01.c_str() + 4, 6);
+ VERIFY( str01 == "Everythingything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(15, str01.c_str(), 10);
+ VERIFY( str01 == "Everything was Everythingbeautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(15, str01.c_str() + 11, 13);
+ VERIFY( str01 == "Everything was was beautifulbeautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(0, str01.c_str());
+ VERIFY( str01 == "Everything was beautiful, and nothing hurt"
+ "Everything was beautiful, and nothing hurt");
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/1.cc
new file mode 100644
index 00000000000..96f71b0839e
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/1.cc
@@ -0,0 +1,195 @@
+// 1999-06-03 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.5.4 basic_string::insert
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+int test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::iterator citerator;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const std::wstring str01(L"rodeo beach, marin");
+ const std::wstring str02(L"baker beach, san francisco");
+ std::wstring str03;
+
+ // wstring& insert(size_type p1, const wstring& str, size_type p2, size_type n)
+ // requires:
+ // 1) p1 <= size()
+ // 2) p2 <= str.size()
+ // 3) rlen = min(n, str.size() - p2)
+ // throws:
+ // 1) out_of_range if p1 > size() || p2 > str.size()
+ // 2) length_error if size() >= npos - rlen
+ // effects:
+ // replaces *this with new wstring of length size() + rlen such that
+ // nstr[0] to nstr[p1] == thisstr[0] to thisstr[p1]
+ // nstr[p1 + 1] to nstr[p1 + rlen] == str[p2] to str[p2 + rlen]
+ // nstr[p1 + 1 + rlen] to nstr[...] == thisstr[p1 + 1] to thisstr[...]
+ str03 = str01;
+ csz01 = str03.size();
+ csz02 = str02.size();
+ try {
+ str03.insert(csz01 + 1, str02, 0, 5);
+ VERIFY( false );
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ str03 = str01;
+ csz01 = str03.size();
+ csz02 = str02.size();
+ try {
+ str03.insert(0, str02, csz02 + 1, 5);
+ VERIFY( false );
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ csz01 = str01.max_size();
+ try {
+ std::wstring str04(csz01, L'b');
+ str03 = str04;
+ csz02 = str02.size();
+ try {
+ str03.insert(0, str02, 0, 5);
+ VERIFY( false );
+ }
+ catch(std::length_error& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+ }
+ catch(std::bad_alloc& failure){
+ VERIFY( true );
+ }
+ catch(std::exception& failure){
+ VERIFY( false );
+ }
+
+ str03 = str01;
+ csz01 = str03.size();
+ csz02 = str02.size();
+ str03.insert(13, str02, 0, 12);
+ VERIFY( str03 == L"rodeo beach, baker beach,marin" );
+
+ str03 = str01;
+ csz01 = str03.size();
+ csz02 = str02.size();
+ str03.insert(0, str02, 0, 12);
+ VERIFY( str03 == L"baker beach,rodeo beach, marin" );
+
+ str03 = str01;
+ csz01 = str03.size();
+ csz02 = str02.size();
+ str03.insert(csz01, str02, 0, csz02);
+ VERIFY( str03 == L"rodeo beach, marinbaker beach, san francisco" );
+
+ // wstring& insert(size_type __p, const wstring& wstr);
+ // insert(p1, str, 0, npos)
+ str03 = str01;
+ csz01 = str03.size();
+ csz02 = str02.size();
+ str03.insert(csz01, str02);
+ VERIFY( str03 == L"rodeo beach, marinbaker beach, san francisco" );
+
+ str03 = str01;
+ csz01 = str03.size();
+ csz02 = str02.size();
+ str03.insert(0, str02);
+ VERIFY( str03 == L"baker beach, san franciscorodeo beach, marin" );
+
+ // wstring& insert(size_type __p, const wchar_t* s, size_type n);
+ // insert(p1, wstring(s,n))
+ str03 = str02;
+ csz01 = str03.size();
+ str03.insert(0, L"-break at the bridge", 20);
+ VERIFY( str03 == L"-break at the bridgebaker beach, san francisco" );
+
+ // wstring& insert(size_type __p, const wchar_t* s);
+ // insert(p1, wstring(s))
+ str03 = str02;
+ str03.insert(0, L"-break at the bridge");
+ VERIFY( str03 == L"-break at the bridgebaker beach, san francisco" );
+
+ // wstring& insert(size_type __p, size_type n, wchar_t c)
+ // insert(p1, wstring(n,c))
+ str03 = str02;
+ csz01 = str03.size();
+ str03.insert(csz01, 5, L'z');
+ VERIFY( str03 == L"baker beach, san franciscozzzzz" );
+
+ // iterator insert(iterator p, wchar_t c)
+ // inserts a copy of c before the character referred to by p
+ str03 = str02;
+ citerator cit01 = str03.begin();
+ str03.insert(cit01, L'u');
+ VERIFY( str03 == L"ubaker beach, san francisco" );
+
+ // iterator insert(iterator p, size_type n, wchar_t c)
+ // inserts n copies of c before the character referred to by p
+ str03 = str02;
+ cit01 = str03.begin();
+ str03.insert(cit01, 5, L'u');
+ VERIFY( str03 == L"uuuuubaker beach, san francisco" );
+
+ // template<inputit>
+ // void
+ // insert(iterator p, inputit first, inputit, last)
+ // ISO-14882: defect #7 part 1 clarifies this member function to be:
+ // insert(p - begin(), wstring(first,last))
+ str03 = str02;
+ csz01 = str03.size();
+ str03.insert(str03.begin(), str01.begin(), str01.end());
+ VERIFY( str03 == L"rodeo beach, marinbaker beach, san francisco" );
+
+ str03 = str02;
+ csz01 = str03.size();
+ str03.insert(str03.end(), str01.begin(), str01.end());
+ VERIFY( str03 == L"baker beach, san franciscorodeo beach, marin" );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ __gnu_cxx_test::set_memory_limits();
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/2.cc
new file mode 100644
index 00000000000..04cc454e14b
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/insert/wchar_t/2.cc
@@ -0,0 +1,87 @@
+// 1999-06-03 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.5.4 basic_string::insert
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// More
+// wstring& insert(size_type __p, const wchar_t* s, size_type n);
+// wstring& insert(size_type __p, const wchar_t* s);
+// but now s points inside the _Rep
+int test02(void)
+{
+ bool test = true;
+
+ std::wstring str01;
+ const wchar_t* title = L"Everything was beautiful, and nothing hurt";
+ // Increasing size: str01 is reallocated every time.
+ str01 = title;
+ str01.insert(0, str01.c_str() + str01.size() - 4, 4);
+ VERIFY( str01 == L"hurtEverything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(0, str01.c_str(), 5);
+ VERIFY( str01 == L"EveryEverything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(10, str01.c_str() + 4, 6);
+ VERIFY( str01 == L"Everythingything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(15, str01.c_str(), 10);
+ VERIFY( str01 == L"Everything was Everythingbeautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(15, str01.c_str() + 11, 13);
+ VERIFY( str01 == L"Everything was was beautifulbeautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(0, str01.c_str());
+ VERIFY( str01 == L"Everything was beautiful, and nothing hurt"
+ L"Everything was beautiful, and nothing hurt");
+ // Again: no reallocations.
+ str01 = title;
+ str01.insert(0, str01.c_str() + str01.size() - 4, 4);
+ VERIFY( str01 == L"hurtEverything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(0, str01.c_str(), 5);
+ VERIFY( str01 == L"EveryEverything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(10, str01.c_str() + 4, 6);
+ VERIFY( str01 == L"Everythingything was beautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(15, str01.c_str(), 10);
+ VERIFY( str01 == L"Everything was Everythingbeautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(15, str01.c_str() + 11, 13);
+ VERIFY( str01 == L"Everything was was beautifulbeautiful, and nothing hurt" );
+ str01 = title;
+ str01.insert(0, str01.c_str());
+ VERIFY( str01 == L"Everything was beautiful, and nothing hurt"
+ L"Everything was beautiful, and nothing hurt");
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/inserters_extractors.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/1.cc
index 41a9a65f6ea..4b862322653 100644
--- a/libstdc++-v3/testsuite/21_strings/inserters_extractors.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/1.cc
@@ -1,6 +1,6 @@
// 1999-07-01 bkoz
-// Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2000, 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
@@ -29,7 +29,6 @@
#include <sstream>
#include <fstream>
#include <iostream>
-#include <iomanip>
#include <testsuite_hooks.h>
bool test01(void)
@@ -165,199 +164,8 @@ bool test01(void)
return test;
}
-
-// testing basic_stringbuf::xsputn via stress testing with large strings
-// based on a bug report libstdc++ 9
-void test04(int size)
-{
- bool test = true;
- std::string str(size, 's');
- int expected_size = 2 * (size + 1);
- std::ostringstream oss(str);
-
- // sanity checks
- VERIFY( str.size() == size );
- VERIFY( oss.good() );
-
- // stress test
- oss << str << std::endl;
- if (!oss.good())
- test = false;
-
- oss << str << std::endl;
- if (!oss.good())
- test = false;
-
- VERIFY( str.size() == size );
- VERIFY( oss.good() );
- std::string str_tmp = oss.str();
- VERIFY( str_tmp.size() == expected_size );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-
-// testing basic_filebuf::xsputn via stress testing with large strings
-// based on a bug report libstdc++ 9
-// mode == out
-void test05(int size)
-{
- bool test = true;
- const char filename[] = "inserters_extractors-1.txt";
- const char fillc = 'f';
- std::ofstream ofs(filename);
- std::string str(size, fillc);
-
- // sanity checks
- VERIFY( str.size() == size );
- VERIFY( ofs.good() );
-
- // stress test
- ofs << str << std::endl;
- if (!ofs.good())
- test = false;
-
- ofs << str << std::endl;
- if (!ofs.good())
- test = false;
-
- VERIFY( str.size() == size );
- VERIFY( ofs.good() );
-
- ofs.close();
-
- // sanity check on the written file
- std::ifstream ifs(filename);
- int count = 0;
- char c;
- while (count <= (2 * size) + 4)
- {
- ifs >> c;
- if (ifs.good() && c == fillc)
- {
- ++count;
- c = '0';
- }
- else
- break;
- }
-
- VERIFY( count == 2 * size );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-
-// istringstream/stringbuf extractor properly size buffer based on
-// actual, not allocated contents (string.size() vs. string.capacity()).
-// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00049.html
-void test06(void)
-{
- bool test = true;
-
- typedef std::string::size_type size_type;
- std::string str01("@silent");
- size_type i01 = str01.size();
- size_type i02 = str01.capacity();
- str01.erase(0, 1);
- size_type i03 = str01.size();
- size_type i04 = str01.capacity();
- VERIFY( i01 - 1 == i03 );
- VERIFY( i02 >= i04 );
-
- std::istringstream is(str01);
- std::string str02;
- is >> str02 >> std::ws;
- size_type i05 = str02.size();
- size_type i06 = str02.capacity();
- VERIFY( i05 == i03 );
- VERIFY( i06 <= i04 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00085.html
-// istream::operator>>(string)
-// sets failbit
-// NB: this is a defect in the standard.
-void test07(void)
-{
- bool test = true;
- const std::string name("z6.cc");
- std::istringstream iss (name);
- int i = 0;
- std::string s;
- while (iss >> s)
- ++i;
-
- VERIFY( i < 3 );
- VERIFY( static_cast<bool>(iss.rdstate() & std::ios_base::failbit) );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-// libstdc++/1019
-void test08()
-{
- using namespace std;
-
- bool test = true;
- istringstream istrm("enero:2001");
- int year;
- char sep;
- string month;
-
- istrm >> setw(5) >> month >> sep >> year;
- VERIFY( month.size() == 5 );
- VERIFY( sep == ':' );
- VERIFY( year == 2001 );
-}
-
-// libstdc++/2830
-void test09()
-{
- bool test = true;
- std::string blanks( 3, '\0');
- std::string foo = "peace";
- foo += blanks;
- foo += "& love";
-
- std::ostringstream oss1;
- oss1 << foo;
- VERIFY( oss1.str() == foo );
-
- std::ostringstream oss2;
- oss2.width(20);
- oss2 << foo;
- VERIFY( oss2.str() != foo );
- VERIFY( oss2.str().size() == 20 );
-}
-
int main()
{
test01();
-
- test04(1); // expected_size == 4
- test04(1000); // expected_size == 2002
- test04(10000); // expected_size == 20002
-
- test05(1);
- test05(1000);
- test05(10000);
-
- test06();
- test07();
-
- test08();
-
- test09();
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/4.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/4.cc
new file mode 100644
index 00000000000..55eecc19a28
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/4.cc
@@ -0,0 +1,69 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// testing basic_stringbuf::xsputn via stress testing with large strings
+// based on a bug report libstdc++ 9
+void test04(int size)
+{
+ bool test = true;
+ std::string str(size, 's');
+ int expected_size = 2 * (size + 1);
+ std::ostringstream oss(str);
+
+ // sanity checks
+ VERIFY( str.size() == size );
+ VERIFY( oss.good() );
+
+ // stress test
+ oss << str << std::endl;
+ if (!oss.good())
+ test = false;
+
+ oss << str << std::endl;
+ if (!oss.good())
+ test = false;
+
+ VERIFY( str.size() == size );
+ VERIFY( oss.good() );
+ std::string str_tmp = oss.str();
+ VERIFY( str_tmp.size() == expected_size );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+}
+
+int main()
+{
+ test04(1); // expected_size == 4
+ test04(1000); // expected_size == 2002
+ test04(10000); // expected_size == 20002
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc
new file mode 100644
index 00000000000..8e24f5b55b7
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/5.cc
@@ -0,0 +1,90 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <fstream>
+#include <iostream>
+#include <testsuite_hooks.h>
+
+// testing basic_filebuf::xsputn via stress testing with large strings
+// based on a bug report libstdc++ 9
+// mode == out
+void test05(int size)
+{
+ bool test = true;
+ const char filename[] = "inserters_extractors-1.txt";
+ const char fillc = 'f';
+ std::ofstream ofs(filename);
+ std::string str(size, fillc);
+
+ // sanity checks
+ VERIFY( str.size() == size );
+ VERIFY( ofs.good() );
+
+ // stress test
+ ofs << str << std::endl;
+ if (!ofs.good())
+ test = false;
+
+ ofs << str << std::endl;
+ if (!ofs.good())
+ test = false;
+
+ VERIFY( str.size() == size );
+ VERIFY( ofs.good() );
+
+ ofs.close();
+
+ // sanity check on the written file
+ std::ifstream ifs(filename);
+ int count = 0;
+ char c;
+ while (count <= (2 * size) + 4)
+ {
+ ifs >> c;
+ if (ifs.good() && c == fillc)
+ {
+ ++count;
+ c = '0';
+ }
+ else
+ break;
+ }
+
+ VERIFY( count == 2 * size );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+}
+
+int main()
+{
+ test05(1);
+ test05(1000);
+ test05(10000);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/6.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/6.cc
new file mode 100644
index 00000000000..5d426259752
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/6.cc
@@ -0,0 +1,65 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// istringstream/stringbuf extractor properly size buffer based on
+// actual, not allocated contents (string.size() vs. string.capacity()).
+// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00049.html
+void test06(void)
+{
+ bool test = true;
+
+ typedef std::string::size_type size_type;
+ std::string str01("@silent");
+ size_type i01 = str01.size();
+ size_type i02 = str01.capacity();
+ str01.erase(0, 1);
+ size_type i03 = str01.size();
+ size_type i04 = str01.capacity();
+ VERIFY( i01 - 1 == i03 );
+ VERIFY( i02 >= i04 );
+
+ std::istringstream is(str01);
+ std::string str02;
+ is >> str02 >> std::ws;
+ size_type i05 = str02.size();
+ size_type i06 = str02.capacity();
+ VERIFY( i05 == i03 );
+ VERIFY( i06 <= i04 );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/7.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/7.cc
new file mode 100644
index 00000000000..7e6116ec148
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/7.cc
@@ -0,0 +1,57 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00085.html
+// istream::operator>>(string)
+// sets failbit
+// NB: this is a defect in the standard.
+void test07(void)
+{
+ bool test = true;
+ const std::string name("z6.cc");
+ std::istringstream iss (name);
+ int i = 0;
+ std::string s;
+ while (iss >> s)
+ ++i;
+
+ VERIFY( i < 3 );
+ VERIFY( static_cast<bool>(iss.rdstate() & std::ios_base::failbit) );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+}
+
+int main()
+{
+ test07();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/8.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/8.cc
new file mode 100644
index 00000000000..bdc848e8055
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/8.cc
@@ -0,0 +1,53 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+// libstdc++/1019
+void test08()
+{
+ using namespace std;
+
+ bool test = true;
+ istringstream istrm("enero:2001");
+ int year;
+ char sep;
+ string month;
+
+ istrm >> setw(5) >> month >> sep >> year;
+ VERIFY( month.size() == 5 );
+ VERIFY( sep == ':' );
+ VERIFY( year == 2001 );
+}
+
+int main()
+{
+ test08();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/9.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/9.cc
new file mode 100644
index 00000000000..fb201c26929
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/9.cc
@@ -0,0 +1,56 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+// libstdc++/2830
+void test09()
+{
+ bool test = true;
+ std::string blanks( 3, '\0');
+ std::string foo = "peace";
+ foo += blanks;
+ foo += "& love";
+
+ std::ostringstream oss1;
+ oss1 << foo;
+ VERIFY( oss1.str() == foo );
+
+ std::ostringstream oss2;
+ oss2.width(20);
+ oss2 << foo;
+ VERIFY( oss2.str() != foo );
+ VERIFY( oss2.str().size() == 20 );
+}
+
+int main()
+{
+ test09();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc
new file mode 100644
index 00000000000..5297958c453
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc
@@ -0,0 +1,171 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <stdexcept>
+#include <sstream>
+#include <fstream>
+#include <iostream>
+#include <testsuite_hooks.h>
+
+bool test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::const_reference cref;
+ typedef std::wstring::reference ref;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const std::wstring str01(L"sailing grand traverse bay\n"
+ L"\t\t\t from Elk Rapids to the point reminds me of miles");
+ const std::wstring str02(L"sailing");
+ const std::wstring str03(L"grand");
+ const std::wstring str04(L"traverse");
+ const std::wstring str05;
+ std::wstring str10;
+
+ // istream& operator>>(istream&, string&)
+ std::wistringstream istrs01(str01);
+ istrs01 >> str10;
+ VERIFY( str10 == str02 );
+ try
+ {
+ std::wistringstream::int_type i01 = istrs01.peek(); //a-boo
+ VERIFY( std::wistringstream::traits_type::to_char_type(i01) == L' ' );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( false ); // shouldn't throw
+ }
+
+ istrs01.clear();
+ istrs01 >> str10;
+ VERIFY( str10 == str03 );
+ istrs01.clear();
+ istrs01 >> str10;
+ VERIFY( str10 == str04 ); // sentry picks out the white spaces. .
+
+ std::wistringstream istrs02(str05); // empty
+ istrs02 >> str10;
+ VERIFY( str10 == str04 );
+
+ // istream& getline(istream&, string&, char)
+ // istream& getline(istream&, string&)
+ try
+ {
+ istrs01.clear();
+ getline(istrs01, str10);
+ VERIFY( !istrs01.fail() );
+ VERIFY( !istrs01.eof() );
+ VERIFY( istrs01.good() );
+ VERIFY( str10 == L" bay" );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( false ); // shouldn't throw
+ }
+
+ try
+ {
+ istrs01.clear();
+ getline(istrs01, str10, L'\t');
+ VERIFY( !istrs01.fail() );
+ VERIFY( !istrs01.eof() );
+ VERIFY( istrs01.good() );
+ VERIFY( str10 == str05 );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( false ); // shouldn't throw
+ }
+
+ try
+ {
+ istrs01.clear();
+ getline(istrs01, str10, L'\t');
+ VERIFY( !istrs01.fail() );
+ VERIFY( !istrs01.eof() );
+ VERIFY( istrs01.good() );
+ VERIFY( str10 == str05 );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( false ); // shouldn't throw
+ }
+
+ try
+ {
+ istrs01.clear();
+ getline(istrs01, str10, L'.');
+ VERIFY( !istrs01.fail() );
+ VERIFY( istrs01.eof() );
+ VERIFY( !istrs01.good() );
+ VERIFY( str10 == L"\t from Elk Rapids to the point reminds me of miles" );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( false ); // shouldn't throw
+ }
+
+ try
+ {
+ getline(istrs02, str10);
+ VERIFY( istrs02.fail() );
+ VERIFY( istrs02.eof() );
+ VERIFY( str10 == L"\t from Elk Rapids to the point reminds me of miles" );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( false ); // shouldn't throw
+ }
+
+ // ostream& operator<<(ostream&, const basic_string&)
+ std::wostringstream ostrs01;
+ try
+ {
+ ostrs01 << str01;
+ VERIFY( ostrs01.str() == str01 );
+ }
+ catch(std::exception& fail)
+ {
+ VERIFY( false );
+ }
+
+ std::wstring hello_world;
+ std::wcout << hello_world;
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc
new file mode 100644
index 00000000000..f47d8da43aa
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc
@@ -0,0 +1,69 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// testing basic_stringbuf::xsputn via stress testing with large strings
+// based on a bug report libstdc++ 9
+void test04(int size)
+{
+ bool test = true;
+ std::wstring str(size, L's');
+ int expected_size = 2 * (size + 1);
+ std::wostringstream oss(str);
+
+ // sanity checks
+ VERIFY( str.size() == size );
+ VERIFY( oss.good() );
+
+ // stress test
+ oss << str << std::endl;
+ if (!oss.good())
+ test = false;
+
+ oss << str << std::endl;
+ if (!oss.good())
+ test = false;
+
+ VERIFY( str.size() == size );
+ VERIFY( oss.good() );
+ std::wstring str_tmp = oss.str();
+ VERIFY( str_tmp.size() == expected_size );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+}
+
+int main()
+{
+ test04(1); // expected_size == 4
+ test04(1000); // expected_size == 2002
+ test04(10000); // expected_size == 20002
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc
new file mode 100644
index 00000000000..e9a701e8c52
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc
@@ -0,0 +1,90 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <fstream>
+#include <iostream>
+#include <testsuite_hooks.h>
+
+// testing basic_filebuf::xsputn via stress testing with large strings
+// based on a bug report libstdc++ 9
+// mode == out
+void test05(int size)
+{
+ bool test = true;
+ const char filename[] = "inserters_extractors-1.txt";
+ const wchar_t fillc = L'f';
+ std::wofstream ofs(filename);
+ std::wstring str(size, fillc);
+
+ // sanity checks
+ VERIFY( str.size() == size );
+ VERIFY( ofs.good() );
+
+ // stress test
+ ofs << str << std::endl;
+ if (!ofs.good())
+ test = false;
+
+ ofs << str << std::endl;
+ if (!ofs.good())
+ test = false;
+
+ VERIFY( str.size() == size );
+ VERIFY( ofs.good() );
+
+ ofs.close();
+
+ // sanity check on the written file
+ std::wifstream ifs(filename);
+ int count = 0;
+ wchar_t c;
+ while (count <= (2 * size) + 4)
+ {
+ ifs >> c;
+ if (ifs.good() && c == fillc)
+ {
+ ++count;
+ c = '0';
+ }
+ else
+ break;
+ }
+
+ VERIFY( count == 2 * size );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+}
+
+int main()
+{
+ test05(1);
+ test05(1000);
+ test05(10000);
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc
new file mode 100644
index 00000000000..aedcdb26391
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc
@@ -0,0 +1,65 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// istringstream/stringbuf extractor properly size buffer based on
+// actual, not allocated contents (string.size() vs. string.capacity()).
+// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00049.html
+void test06(void)
+{
+ bool test = true;
+
+ typedef std::wstring::size_type size_type;
+ std::wstring str01(L"@silent");
+ size_type i01 = str01.size();
+ size_type i02 = str01.capacity();
+ str01.erase(0, 1);
+ size_type i03 = str01.size();
+ size_type i04 = str01.capacity();
+ VERIFY( i01 - 1 == i03 );
+ VERIFY( i02 >= i04 );
+
+ std::wistringstream is(str01);
+ std::wstring str02;
+ is >> str02 >> std::ws;
+ size_type i05 = str02.size();
+ size_type i06 = str02.capacity();
+ VERIFY( i05 == i03 );
+ VERIFY( i06 <= i04 );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+}
+
+int main()
+{
+ test06();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc
new file mode 100644
index 00000000000..4028924674b
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc
@@ -0,0 +1,57 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00085.html
+// istream::operator>>(string)
+// sets failbit
+// NB: this is a defect in the standard.
+void test07(void)
+{
+ bool test = true;
+ const std::wstring name(L"z6.cc");
+ std::wistringstream iss(name);
+ int i = 0;
+ std::wstring s;
+ while (iss >> s)
+ ++i;
+
+ VERIFY( i < 3 );
+ VERIFY( static_cast<bool>(iss.rdstate() & std::ios_base::failbit) );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+}
+
+int main()
+{
+ test07();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc
new file mode 100644
index 00000000000..d43d818633f
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc
@@ -0,0 +1,53 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+// libstdc++/1019
+void test08()
+{
+ using namespace std;
+
+ bool test = true;
+ wistringstream istrm(L"enero:2001");
+ int year;
+ wchar_t sep;
+ wstring month;
+
+ istrm >> setw(5) >> month >> sep >> year;
+ VERIFY( month.size() == 5 );
+ VERIFY( sep == ':' );
+ VERIFY( year == 2001 );
+}
+
+int main()
+{
+ test08();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc
new file mode 100644
index 00000000000..726dacc9816
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc
@@ -0,0 +1,56 @@
+// 1999-07-01 bkoz
+
+// Copyright (C) 1999, 2000, 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.
+
+// 21.3.7.9 inserters and extractors
+
+// NB: This file is predicated on sstreams, istreams, and ostreams
+// working, not to mention other major details like char_traits, and
+// all of the string class.
+
+#include <string>
+#include <sstream>
+#include <iomanip>
+#include <testsuite_hooks.h>
+
+// libstdc++/2830
+void test09()
+{
+ bool test = true;
+ std::wstring blanks(3, L'\0');
+ std::wstring foo = L"peace";
+ foo += blanks;
+ foo += L"& love";
+
+ std::wostringstream oss1;
+ oss1 << foo;
+ VERIFY( oss1.str() == foo );
+
+ std::wostringstream oss2;
+ oss2.width(20);
+ oss2 << foo;
+ VERIFY( oss2.str() != foo );
+ VERIFY( oss2.str().size() == 20 );
+}
+
+int main()
+{
+ test09();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/operations.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operators/char/1.cc
index b6c68ebcb9e..da8b30638ff 100644
--- a/libstdc++-v3/testsuite/21_strings/operations.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operators/char/1.cc
@@ -1,6 +1,6 @@
// 1999-05-07 bkoz
-// Copyright (C) 1999 Free Software Foundation, Inc.
+// Copyright (C) 1999, 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
diff --git a/libstdc++-v3/testsuite/21_strings/nonmember.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operators/char/2.cc
index 8b9671a4961..c41ac68ffe2 100644
--- a/libstdc++-v3/testsuite/21_strings/nonmember.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operators/char/2.cc
@@ -1,6 +1,6 @@
// 1998-10-01, 1999-06-25 bkoz
-// Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+// Copyright (C) 1998, 1999, 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
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/1.cc
new file mode 100644
index 00000000000..cd8f18bf663
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/1.cc
@@ -0,0 +1,56 @@
+// 1999-05-07 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.6 string operations
+
+#include <string>
+#include <cstdio>
+#include <testsuite_hooks.h>
+
+int test01(void)
+{
+ bool test = true;
+
+ std::wstring str1;
+ std::wstring str2;
+
+ // Should get this:
+ // 1:8-chars_8-chars_
+ // 2:8-chars_8-chars_
+ str1 = std::wstring(L"8-chars_") + L"8-chars_";
+ const wchar_t* p1 = str1.c_str();
+ // wprintf("1:%s\n", str1.c_str());
+ str2 = str1 + L"7-chars";
+ // wprintf("2:%s\n", str1.c_str()); //str1 is gone
+ const wchar_t* p2 = str1.c_str();
+ return 0;
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/2.cc
new file mode 100644
index 00000000000..11e63f70e93
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operators/wchar_t/2.cc
@@ -0,0 +1,300 @@
+// 1998-10-01, 1999-06-25 bkoz
+
+// Copyright (C) 1998, 1999, 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.
+
+// 21.3.7.1 basic_string non-member functions
+
+// 21.3.7.2 operator==
+/*
+template<class charT, class traits, class Allocator>
+ bool operator==(const basic_string<charT,traits,Allocator>& lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator==(const charT* lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator==(const basic_string<charT,traits,Allocator>& lhs,
+ const charT* rhs);
+*/
+
+// 21.3.7.3 operator!=
+/*
+template<class charT, class traits, class Allocator>
+ bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator!=(const charT* lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
+ const charT* rhs);
+*/
+
+// 21.3.7.4 operator<
+/*
+template<class charT, class traits, class Allocator>
+ bool operator< (const basic_string<charT,traits,Allocator>& lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator< (const basic_string<charT,traits,Allocator>& lhs,
+ const charT* rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator< (const charT* lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+*/
+
+// 21.3.7.5 operator>
+/*
+template<class charT, class traits, class Allocator>
+ bool operator> (const basic_string<charT,traits,Allocator>& lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator> (const basic_string<charT,traits,Allocator>& lhs,
+ const charT* rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator> (const charT* lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+*/
+
+//21.3.7.6 operator<=
+/*
+template<class charT, class traits, class Allocator>
+ bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
+ const charT* rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator<=(const charT* lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+*/
+
+// 21.3.7.7 operator>=
+/*
+template<class charT, class traits, class Allocator>
+ bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
+ const charT* rhs);
+
+template<class charT, class traits, class Allocator>
+ bool operator>=(const charT* lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+*/
+
+#include <string>
+#include <testsuite_hooks.h>
+
+int test01(void)
+{
+ bool test = true;
+ std::wstring str_0(L"costa rica");
+ std::wstring str_1(L"costa marbella");
+ std::wstring str_2(L"cost");
+ std::wstring str_3(L"costa ricans");
+ std::wstring str_4;
+
+ str_4 = str_0;
+ //comparisons between string objects
+ VERIFY( !(str_0 == str_1) );
+ VERIFY( !(str_0 == str_2) );
+ VERIFY( !(str_0 == str_3) );
+ VERIFY( !(str_1 == str_0) );
+ VERIFY( !(str_2 == str_0) );
+ VERIFY( !(str_3 == str_0) );
+ VERIFY( str_4 == str_0 );
+ VERIFY( str_0 == str_4 );
+
+ VERIFY( str_0 != str_1 );
+ VERIFY( str_0 != str_2 );
+ VERIFY( str_0 != str_3 );
+ VERIFY( str_1 != str_0 );
+ VERIFY( str_2 != str_0 );
+ VERIFY( str_3 != str_0 );
+ VERIFY( !(str_0 != str_4) );
+ VERIFY( !(str_4 != str_0) );
+
+ VERIFY( str_0 > str_1 ); //true cuz r>m
+ VERIFY( str_0 > str_2 );
+ VERIFY( !(str_0 > str_3) );
+ VERIFY( !(str_1 > str_0) ); //false cuz m<r
+ VERIFY( !(str_2 > str_0) );
+ VERIFY( str_3 > str_0 );
+ VERIFY( !(str_0 > str_4) );
+ VERIFY( !(str_4 > str_0) );
+
+ VERIFY( !(str_0 < str_1) ); //false cuz r>m
+ VERIFY( !(str_0 < str_2) );
+ VERIFY( str_0 < str_3 );
+ VERIFY( str_1 < str_0 ); //true cuz m<r
+ VERIFY( str_2 < str_0 );
+ VERIFY( !(str_3 < str_0) );
+ VERIFY( !(str_0 < str_4) );
+ VERIFY( !(str_4 < str_0) );
+
+ VERIFY( str_0 >= str_1 ); //true cuz r>m
+ VERIFY( str_0 >= str_2 );
+ VERIFY( !(str_0 >= str_3) );
+ VERIFY( !(str_1 >= str_0) );//false cuz m<r
+ VERIFY( !(str_2 >= str_0) );
+ VERIFY( str_3 >= str_0 );
+ VERIFY( str_0 >= str_4 );
+ VERIFY( str_4 >= str_0 );
+
+ VERIFY( !(str_0 <= str_1) );//false cuz r>m
+ VERIFY( !(str_0 <= str_2) );
+ VERIFY( str_0 <= str_3 );
+ VERIFY( str_1 <= str_0 );//true cuz m<r
+ VERIFY( str_2 <= str_0 );
+ VERIFY( !(str_3 <= str_0) );
+ VERIFY( str_0 <= str_4 );
+ VERIFY( str_4 <= str_0 );
+
+ //comparisons between string object and string literal
+ VERIFY( !(str_0 == L"costa marbella") );
+ VERIFY( !(str_0 == L"cost") );
+ VERIFY( !(str_0 == L"costa ricans") );
+ VERIFY( !(L"costa marbella" == str_0) );
+ VERIFY( !(L"cost" == str_0) );
+ VERIFY( !(L"costa ricans" == str_0) );
+ VERIFY( L"costa rica" == str_0 );
+ VERIFY( str_0 == L"costa rica" );
+
+ VERIFY( str_0 != L"costa marbella" );
+ VERIFY( str_0 != L"cost" );
+ VERIFY( str_0 != L"costa ricans" );
+ VERIFY( L"costa marbella" != str_0 );
+ VERIFY( L"cost" != str_0 );
+ VERIFY( L"costa ricans" != str_0 );
+ VERIFY( !(L"costa rica" != str_0) );
+ VERIFY( !(str_0 != L"costa rica") );
+
+ VERIFY( str_0 > L"costa marbella" ); //true cuz r>m
+ VERIFY( str_0 > L"cost" );
+ VERIFY( !(str_0 > L"costa ricans") );
+ VERIFY( !(L"costa marbella" > str_0) );//false cuz m<r
+ VERIFY( !(L"cost" > str_0) );
+ VERIFY( L"costa ricans" > str_0 );
+ VERIFY( !(L"costa rica" > str_0) );
+ VERIFY( !(str_0 > L"costa rica") );
+
+ VERIFY( !(str_0 < L"costa marbella") );//false cuz r>m
+ VERIFY( !(str_0 < L"cost") );
+ VERIFY( str_0 < L"costa ricans" );
+ VERIFY( L"costa marbella" < str_0 );//true cuz m<r
+ VERIFY( L"cost" < str_0 );
+ VERIFY( !(L"costa ricans" < str_0) );
+ VERIFY( !(L"costa rica" < str_0) );
+ VERIFY( !(str_0 < L"costa rica") );
+
+ VERIFY( str_0 >= L"costa marbella" );//true cuz r>m
+ VERIFY( str_0 >= L"cost" );
+ VERIFY( !(str_0 >= L"costa ricans") );
+ VERIFY( !(L"costa marbella" >= str_0) );//false cuz m<r
+ VERIFY( !(L"cost" >= str_0) );
+ VERIFY( L"costa ricans" >= str_0 );
+ VERIFY( L"costa rica" >= str_0 );
+ VERIFY( str_0 >= L"costa rica" );
+
+ VERIFY( !(str_0 <= L"costa marbella") );//false cuz r>m
+ VERIFY( !(str_0 <= L"cost") );
+ VERIFY( str_0 <= L"costa ricans" );
+ VERIFY( L"costa marbella" <= str_0 );//true cuz m<r
+ VERIFY( L"cost" <= str_0 );
+ VERIFY( !(L"costa ricans" <= str_0) );
+ VERIFY( L"costa rica" <= str_0 );
+ VERIFY( str_0 <= L"costa rica" );
+
+ // 21.3.7.1 operator+
+/*
+template<class charT, class traits, class Allocator>
+ basic_string<charT,traits,Allocator>
+ operator+(const basic_string<charT,traits,Allocator>& lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ basic_string<charT,traits,Allocator>
+ operator+(const charT* lhs,
+ const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ basic_string<charT,traits,Allocator>
+ operator+(const basic_string<charT,traits,Allocator>& lhs,
+ const charT* rhs);
+
+template<class charT, class traits, class Allocator>
+ basic_string<charT,traits,Allocator>
+ operator+(charT lhs, const basic_string<charT,traits,Allocator>& rhs);
+
+template<class charT, class traits, class Allocator>
+ basic_string<charT,traits,Allocator>
+ operator+(const basic_string<charT,traits,Allocator>& lhs, charT rhs);
+*/
+
+ str_4 = str_0 + L"ns";
+ VERIFY( str_4 == str_3 );
+
+ const std::wstring str_5(L" marbella");
+ str_4 = L"costa" + str_5;
+ VERIFY( str_4 == str_1 );
+
+ std::wstring str_6(L"ns");
+ str_4 = str_0 + str_6;
+ VERIFY( str_4 == str_3 );
+
+ str_4 = str_0 + L'n';
+ str_4 = str_4 + L's';
+ VERIFY( str_4 == str_3 );
+
+ str_4 = L'a' + str_6;
+ str_4 = L'c' + str_4;
+ str_4 = L'i' + str_4;
+ str_4 = L'r' + str_4;
+ str_4 = L' ' + str_4;
+ str_4 = L'a' + str_4;
+ str_4 = L't' + str_4;
+ str_4 = L's' + str_4;
+ str_4 = L'o' + str_4;
+ str_4 = L'c' + str_4;
+ VERIFY( str_4 == str_3 );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+
+ return 0;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/1.cc
new file mode 100644
index 00000000000..7145d4c7840
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/1.cc
@@ -0,0 +1,87 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+bool test01(void)
+{
+ bool test = true;
+ typedef std::string::size_type csize_type;
+ typedef std::string::const_reference cref;
+ typedef std::string::reference ref;
+ csize_type npos = std::string::npos;
+ csize_type csz01, csz02;
+
+ const char str_lit01[] = "ventura, california";
+ const std::string str01(str_lit01);
+ std::string str02("del mar, california");
+ std::string str03(" and ");
+ std::string str05;
+
+ // string& replace(size_type pos, size_type n, const string& string)
+ // string& replace(size_type pos1, size_type n1, const string& string,
+ // size_type pos2, size_type n2)
+ // string& replace(size_type pos, size_type n1, const char* s, size_type n2)
+ // string& replace(size_type pos, size_type n1, const char* s)
+ // string& replace(size_type pos, size_type n1, size_type n2, char c)
+ // string& replace(iterator it1, iterator it2, const string& str)
+ // string& replace(iterator it1, iterator it2, const chat* s, size_type n)
+ // string& replace(iterator it1, iterator it2, const chat* s)
+ // string& replace(iterator it1, iterator it2, size_type n, char c)
+ // template<typename InputIter>
+ // string& replace(iterator it1, iterator it2, InputIter j1, InputIter j2)
+
+ // with mods, from tstring.cc, from jason merrill, et. al.
+ std::string X = "Hello";
+ std::string x = X;
+
+ char ch = x[0];
+ VERIFY( ch == 'H' );
+
+ std::string z = x.substr(2, 3);
+ VERIFY( z == "llo" );
+
+ x.replace(2, 2, "r");
+ VERIFY( x == "Hero" );
+
+ x = X;
+ x.replace(0, 1, "j");
+ VERIFY( x == "jello" );
+
+ int ar[] = { 'H', 'e', 'l', 'l', 'o' };
+ x.replace(std::find(x.begin(), x.end(), 'l'),
+ std::find(x.rbegin(), x.rend(), 'l').base(), ar,
+ ar + sizeof(ar) / sizeof(ar[0]));
+ VERIFY( x == "jeHelloo" );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/2.cc
new file mode 100644
index 00000000000..7731edd37a4
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/2.cc
@@ -0,0 +1,46 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void
+test02()
+{
+ bool test = true;
+ const char* strlit = "../the long pier/Hanalei Bay/Kauai/Hawaii";
+ std::string aux = strlit;
+ aux.replace(aux.begin()+5, aux.begin()+20,
+ aux.begin()+10, aux.begin()+15);
+ VERIFY(aux == "../thg piealei Bay/Kauai/Hawaii");
+
+ aux = strlit;
+ aux.replace(aux.begin() + 10, aux.begin() + 15,
+ aux.begin() + 5, aux.begin() + 20);
+ VERIFY(aux == "../the lone long pier/Hanr/Hanalei Bay/Kauai/Hawaii");
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/3.cc
new file mode 100644
index 00000000000..a04d13d4024
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/3.cc
@@ -0,0 +1,74 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// Some more miscellaneous tests
+void
+test03()
+{
+ bool test = true;
+ const char* title01 = "nine types of ambiguity";
+ const char* title02 = "ultra";
+ std::string str01 = title01;
+ std::string str02 = title02;
+
+ str01.replace(0, 4, str02);
+ VERIFY(str01 == "ultra types of ambiguity");
+
+ str01.replace(15, 9, str02, 2, 2);
+ VERIFY(str01 == "ultra types of tr");
+
+ str01 = title01;
+ str02.replace(0, 0, str01, 0, std::string::npos);
+ VERIFY(str02 == "nine types of ambiguityultra");
+
+ str02.replace(11, 2, title02, 5);
+ VERIFY(str02 == "nine types ultra ambiguityultra");
+
+ str02.replace(11, 5, title01, 2);
+ VERIFY(str02 == "nine types ni ambiguityultra");
+
+ str01.replace(str01.size(), 0, title02);
+ VERIFY(str01 == "nine types of ambiguityultra");
+
+ str01 = title01;
+ str02 = title02;
+ str01.replace(str01.begin(), str01.end(), str02);
+ VERIFY(str01 == "ultra");
+
+ str01.replace(str01.begin(), str01.begin(), title01, 4);
+ VERIFY(str01 == "nineultra");
+
+ str01.replace(str01.end(), str01.end(), title01 + 5, 5);
+ VERIFY(str01 == "nineultratypes");
+
+ str01.replace(str01.begin(), str01.end(), title02);
+ VERIFY(str01 == "ultra");
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/4.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/4.cc
new file mode 100644
index 00000000000..47cf335daa0
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/4.cc
@@ -0,0 +1,67 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// Some more tests for
+// template<typename InputIter>
+// string& replace(iterator it1, iterator it2, InputIter j1, InputIter j2)
+void
+test04()
+{
+ bool test = true;
+ std::string str01 = "geogaddi";
+ std::string str02;
+
+ typedef std::string::iterator iterator;
+ typedef std::string::const_iterator const_iterator;
+
+ iterator it1 = str01.begin();
+ iterator it2 = str01.end();
+ str02.replace(str02.begin(), str02.end(), it1, it2);
+ VERIFY(str02 == "geogaddi");
+
+ str02 = "boards";
+ const_iterator c_it1 = str01.begin();
+ const_iterator c_it2 = str01.end();
+ str02.replace(str02.begin(), str02.end(), c_it1, c_it2);
+ VERIFY(str02 == "geogaddi");
+
+ str02 = "boards";
+ const char* c_ptr1 = str01.c_str();
+ const char* c_ptr2 = str01.c_str() + 8;
+ str02.replace(str02.begin(), str02.end(), c_ptr1, c_ptr2);
+ VERIFY(str02 == "geogaddi");
+
+ str02 = "boards";
+ char* ptr1 = &*str01.begin();
+ char* ptr2 = &*str01.end();
+ str02.replace(str02.begin(), str02.end(), ptr1, ptr2);
+ VERIFY(str02 == "geogaddi");
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/5.cc
new file mode 100644
index 00000000000..8c112c545ed
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/char/5.cc
@@ -0,0 +1,43 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// We wrongly used __n1 instead of __foldn1 in the length_error
+// check at the beginning of replace(__pos, __n1, __s, __n2)
+void
+test05()
+{
+ bool test = true;
+ std::string str01 = "londinium";
+ std::string str02 = "cydonia";
+
+ str01.replace(0, 20, str02.c_str(), 3);
+ VERIFY(str01 == "cyd");
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/1.cc
new file mode 100644
index 00000000000..fd0967a86fe
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/1.cc
@@ -0,0 +1,87 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+bool test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::const_reference cref;
+ typedef std::wstring::reference ref;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const wchar_t str_lit01[] = L"ventura, california";
+ const std::wstring str01(str_lit01);
+ std::wstring str02(L"del mar, california");
+ std::wstring str03(L" and ");
+ std::wstring str05;
+
+ // wstring& replace(size_type pos, size_type n, const wstring& string)
+ // wstring& replace(size_type pos1, size_type n1, const wstring& string,
+ // size_type pos2, size_type n2)
+ // wstring& replace(size_type pos, size_type n1, const wchar_t* s, size_type n2)
+ // wstring& replace(size_type pos, size_type n1, const wchar_t* s)
+ // wstring& replace(size_type pos, size_type n1, size_type n2, wchar_t c)
+ // wstring& replace(iterator it1, iterator it2, const wstring& str)
+ // wstring& replace(iterator it1, iterator it2, const wchar_t* s, size_type n)
+ // wstring& replace(iterator it1, iterator it2, const wchar_t* s)
+ // wstring& replace(iterator it1, iterator it2, size_type n, char c)
+ // template<typename InputIter>
+ // wstring& replace(iterator it1, iterator it2, InputIter j1, InputIter j2)
+
+ // with mods, from tstring.cc, from jason merrill, et. al.
+ std::wstring X = L"Hello";
+ std::wstring x = X;
+
+ wchar_t ch = x[0];
+ VERIFY( ch == L'H' );
+
+ std::wstring z = x.substr(2, 3);
+ VERIFY( z == L"llo" );
+
+ x.replace(2, 2, L"r");
+ VERIFY( x == L"Hero" );
+
+ x = X;
+ x.replace(0, 1, L"j");
+ VERIFY( x == L"jello" );
+
+ wchar_t ar[] = { L'H', L'e', L'l', L'l', L'o' };
+ x.replace(std::find(x.begin(), x.end(), L'l'),
+ std::find(x.rbegin(), x.rend(), L'l').base(), ar,
+ ar + sizeof(ar) / sizeof(ar[0]));
+ VERIFY( x == L"jeHelloo" );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/2.cc
new file mode 100644
index 00000000000..da9678a338f
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/2.cc
@@ -0,0 +1,47 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+void
+test02()
+{
+ bool test = true;
+ const wchar_t* strlit = L"../the long pier/Hanalei Bay/Kauai/Hawaii";
+ std::wstring aux = strlit;
+ aux.replace(aux.begin()+5, aux.begin()+20,
+ aux.begin()+10, aux.begin()+15);
+ VERIFY(aux == L"../thg piealei Bay/Kauai/Hawaii");
+
+ aux = strlit;
+ aux.replace(aux.begin() + 10, aux.begin() + 15,
+ aux.begin() + 5, aux.begin() + 20);
+ VERIFY(aux == L"../the lone long pier/Hanr/Hanalei Bay/Kauai/Hawaii");
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/3.cc
new file mode 100644
index 00000000000..2ff6ef28294
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/3.cc
@@ -0,0 +1,74 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// Some more miscellaneous tests
+void
+test03()
+{
+ bool test = true;
+ const wchar_t* title01 = L"nine types of ambiguity";
+ const wchar_t* title02 = L"ultra";
+ std::wstring str01 = title01;
+ std::wstring str02 = title02;
+
+ str01.replace(0, 4, str02);
+ VERIFY(str01 == L"ultra types of ambiguity");
+
+ str01.replace(15, 9, str02, 2, 2);
+ VERIFY(str01 == L"ultra types of tr");
+
+ str01 = title01;
+ str02.replace(0, 0, str01, 0, std::wstring::npos);
+ VERIFY(str02 == L"nine types of ambiguityultra");
+
+ str02.replace(11, 2, title02, 5);
+ VERIFY(str02 == L"nine types ultra ambiguityultra");
+
+ str02.replace(11, 5, title01, 2);
+ VERIFY(str02 == L"nine types ni ambiguityultra");
+
+ str01.replace(str01.size(), 0, title02);
+ VERIFY(str01 == L"nine types of ambiguityultra");
+
+ str01 = title01;
+ str02 = title02;
+ str01.replace(str01.begin(), str01.end(), str02);
+ VERIFY(str01 == L"ultra");
+
+ str01.replace(str01.begin(), str01.begin(), title01, 4);
+ VERIFY(str01 == L"nineultra");
+
+ str01.replace(str01.end(), str01.end(), title01 + 5, 5);
+ VERIFY(str01 == L"nineultratypes");
+
+ str01.replace(str01.begin(), str01.end(), title02);
+ VERIFY(str01 == L"ultra");
+}
+
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/4.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/4.cc
new file mode 100644
index 00000000000..bc827d03282
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/4.cc
@@ -0,0 +1,67 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// Some more tests for
+// template<typename InputIter>
+// wstring& replace(iterator it1, iterator it2, InputIter j1, InputIter j2)
+void
+test04()
+{
+ bool test = true;
+ std::wstring str01 = L"geogaddi";
+ std::wstring str02;
+
+ typedef std::wstring::iterator iterator;
+ typedef std::wstring::const_iterator const_iterator;
+
+ iterator it1 = str01.begin();
+ iterator it2 = str01.end();
+ str02.replace(str02.begin(), str02.end(), it1, it2);
+ VERIFY(str02 == L"geogaddi");
+
+ str02 = L"boards";
+ const_iterator c_it1 = str01.begin();
+ const_iterator c_it2 = str01.end();
+ str02.replace(str02.begin(), str02.end(), c_it1, c_it2);
+ VERIFY(str02 == L"geogaddi");
+
+ str02 = L"boards";
+ const wchar_t* c_ptr1 = str01.c_str();
+ const wchar_t* c_ptr2 = str01.c_str() + 8;
+ str02.replace(str02.begin(), str02.end(), c_ptr1, c_ptr2);
+ VERIFY(str02 == L"geogaddi");
+
+ str02 = L"boards";
+ wchar_t* ptr1 = &*str01.begin();
+ wchar_t* ptr2 = &*str01.end();
+ str02.replace(str02.begin(), str02.end(), ptr1, ptr2);
+ VERIFY(str02 == L"geogaddi");
+}
+
+int main()
+{
+ test04();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/5.cc
new file mode 100644
index 00000000000..f54cfb9a2e7
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/replace/wchar_t/5.cc
@@ -0,0 +1,43 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1994, 1999, 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.
+
+// 21.3.5.6 basic_string::replace
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// We wrongly used __n1 instead of __foldn1 in the length_error
+// check at the beginning of replace(__pos, __n1, __s, __n2)
+void
+test05()
+{
+ bool test = true;
+ std::wstring str01 = L"londinium";
+ std::wstring str02 = L"cydonia";
+
+ str01.replace(0, 20, str02.c_str(), 3);
+ VERIFY(str01 == L"cyd");
+}
+
+int main()
+{
+ test05();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/rfind.cc b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/1.cc
index af720f3820d..5b9a4181b91 100644
--- a/libstdc++-v3/testsuite/21_strings/rfind.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/1.cc
@@ -1,6 +1,6 @@
// 2000-06-22 -=dbv=- (shamelessy copied from bkoz' find.cc)
-// Copyright (C) 2000 Free Software Foundation, Inc.
+// Copyright (C) 2000, 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
@@ -19,7 +19,6 @@
// USA.
#include <string>
-#include <stdexcept>
#include <testsuite_hooks.h>
// 21.3.6.2 basic_string rfind
@@ -91,35 +90,8 @@ bool test01(void)
return test;
}
-// 21.3.6.4 basic_string::find_last_of
-bool test02()
-{
- bool test = true;
-
- // test find_last_of
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-// 21.3.6.6 basic_string::find_last_not_of
-bool test03()
-{
- bool test = true;
-
- // test find_last_not_of
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
int main()
{
test01();
- test02();
- test03();
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/2.cc
new file mode 100644
index 00000000000..9b905df9065
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/2.cc
@@ -0,0 +1,41 @@
+// 2000-06-22 -=dbv=- (shamelessy copied from bkoz' find.cc)
+
+// Copyright (C) 2000, 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.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// 21.3.6.4 basic_string::find_last_of
+bool test02()
+{
+ bool test = true;
+
+ // test find_last_of
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/3.cc
new file mode 100644
index 00000000000..d8b6c8136ab
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/char/3.cc
@@ -0,0 +1,40 @@
+// 2000-06-22 -=dbv=- (shamelessy copied from bkoz' find.cc)
+
+// Copyright (C) 2000, 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.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// 21.3.6.6 basic_string::find_last_not_of
+bool test03()
+{
+ bool test = true;
+
+ // test find_last_not_of
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/1.cc
new file mode 100644
index 00000000000..9681bf4c8e4
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/1.cc
@@ -0,0 +1,97 @@
+// 2000-06-22 -=dbv=- (shamelessy copied from bkoz' find.cc)
+
+// Copyright (C) 2000, 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.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// 21.3.6.2 basic_string rfind
+bool test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::const_reference cref;
+ typedef std::wstring::reference ref;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const wchar_t str_lit01[] = L"mave";
+ const std::wstring str01(L"mavericks, santa cruz");
+ std::wstring str02(str_lit01);
+ std::wstring str03(L"s, s");
+ std::wstring str04;
+
+ // size_type rfind(const wstring&, size_type pos = 0) const;
+ csz01 = str01.rfind(str01);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.rfind(str01, 4);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.rfind(str02,3);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.rfind(str02);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.rfind(str03);
+ VERIFY( csz01 == 8 );
+ csz01 = str01.rfind(str03, 3);
+ VERIFY( csz01 == npos );
+ csz01 = str01.rfind(str03, 12);
+ VERIFY( csz01 == 8 );
+
+ // An empty string consists of no characters
+ // therefore it should be found at every point in a string,
+ // except beyond the end
+ csz01 = str01.rfind(str04, 0);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.rfind(str04, 5);
+ VERIFY( csz01 == 5 );
+ csz01 = str01.rfind(str04, str01.size());
+ VERIFY( csz01 == str01.size() );
+ csz01 = str01.rfind(str04, str01.size()+1);
+ VERIFY( csz01 == str01.size() );
+
+ // size_type rfind(const wchar_t* s, size_type pos, size_type n) const;
+ csz01 = str01.rfind(str_lit01, 0, 3);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.rfind(str_lit01, 3, 0);
+ VERIFY( csz01 == 3 );
+
+ // size_type rfind(const wchar_t* s, size_type pos = 0) const;
+ csz01 = str01.rfind(str_lit01);
+ VERIFY( csz01 == 0 );
+ csz01 = str01.rfind(str_lit01, 3);
+ VERIFY( csz01 == 0 );
+
+ // size_type rfind(wchar_t c, size_type pos = 0) const;
+ csz01 = str01.rfind(L'z');
+ csz02 = str01.size() - 1;
+ VERIFY( csz01 == csz02 );
+ csz01 = str01.rfind(L'/');
+ VERIFY( csz01 == npos );
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/2.cc
new file mode 100644
index 00000000000..9b905df9065
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/2.cc
@@ -0,0 +1,41 @@
+// 2000-06-22 -=dbv=- (shamelessy copied from bkoz' find.cc)
+
+// Copyright (C) 2000, 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.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// 21.3.6.4 basic_string::find_last_of
+bool test02()
+{
+ bool test = true;
+
+ // test find_last_of
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/3.cc
new file mode 100644
index 00000000000..d8b6c8136ab
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/rfind/wchar_t/3.cc
@@ -0,0 +1,40 @@
+// 2000-06-22 -=dbv=- (shamelessy copied from bkoz' find.cc)
+
+// Copyright (C) 2000, 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.
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// 21.3.6.6 basic_string::find_last_not_of
+bool test03()
+{
+ bool test = true;
+
+ // test find_last_not_of
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+int main()
+{
+ test03();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/substr.cc b/libstdc++-v3/testsuite/21_strings/basic_string/substr/char/1.cc
index 0ec6ee35453..be2a379c581 100644
--- a/libstdc++-v3/testsuite/21_strings/substr.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/substr/char/1.cc
@@ -1,6 +1,6 @@
// 1999-06-10 bkoz
-// Copyright (C) 1999 Free Software Foundation, Inc.
+// Copyright (C) 1999, 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
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/substr/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/substr/wchar_t/1.cc
new file mode 100644
index 00000000000..843ebb6861a
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/substr/wchar_t/1.cc
@@ -0,0 +1,80 @@
+// 1999-06-10 bkoz
+
+// Copyright (C) 1999, 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.
+
+// 21.3.6.7 basic_string::substr
+
+#include <string>
+#include <stdexcept>
+#include <testsuite_hooks.h>
+
+bool test01(void)
+{
+ bool test = true;
+ typedef std::wstring::size_type csize_type;
+ typedef std::wstring::const_reference cref;
+ typedef std::wstring::reference ref;
+ csize_type npos = std::wstring::npos;
+ csize_type csz01, csz02;
+
+ const wchar_t str_lit01[] = L"rockaway, pacifica";
+ const std::wstring str01(str_lit01);
+ std::wstring str02;
+
+ // basic_string<charT, _Traits, _Alloc>
+ // substr(size_type pos = 0, size_type n = npos) const;
+ csz01 = str01.size();
+ str02 = str01.substr(0, 1);
+ VERIFY( str02 == L"r" );
+ str02 = str01.substr(10);
+ VERIFY( str02 == L"pacifica" );
+
+ try {
+ str02 = str01.substr(csz01 + 1);
+ VERIFY( false );
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( true );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+ try {
+ str02 = str01.substr(csz01);
+ VERIFY( str02.size() == 0 );
+ }
+ catch(std::out_of_range& fail) {
+ VERIFY( false );
+ }
+ catch(...) {
+ VERIFY( false );
+ }
+
+#ifdef DEBUG_ASSERT
+ assert(test);
+#endif
+ return test;
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings.cc b/libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc
index 63041779a83..7dfe6c24cf2 100644
--- a/libstdc++-v3/testsuite/21_strings/c_strings.cc
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/char/1.cc
@@ -1,6 +1,6 @@
// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 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
@@ -22,7 +22,6 @@
#include <string>
#include <cstring>
-#include <cwchar>
void test01()
{
@@ -64,28 +63,8 @@ void test01()
v = std::memchr(v, 'a', 3);
}
-void test02()
-{
- using namespace std;
-
- const char* ccarray1 = "san francisco roof garden inspectors";
- const char* ccarray2 = "san francisco sunny-day park inspectors";
- char carray[50];
- strcpy(carray, ccarray1);
- void* v = carray;
- const void* cv = ccarray1;
-
- memchr(cv, '/', 3);
- strchr(ccarray1, '/');
- strpbrk(ccarray1, ccarray2);
- strrchr(ccarray1, 'c');
- strstr(carray, carray);
-}
-
int main()
{
test01();
- test02();
-
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc b/libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc
new file mode 100644
index 00000000000..7ec0561b887
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/char/2.cc
@@ -0,0 +1,48 @@
+// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001, 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.
+
+// 21.4: null-terminiated sequence utilities
+
+#include <string>
+#include <cstring>
+
+void test02()
+{
+ using namespace std;
+
+ const char* ccarray1 = "san francisco roof garden inspectors";
+ const char* ccarray2 = "san francisco sunny-day park inspectors";
+ char carray[50];
+ strcpy(carray, ccarray1);
+ void* v = carray;
+ const void* cv = ccarray1;
+
+ memchr(cv, '/', 3);
+ strchr(ccarray1, '/');
+ strpbrk(ccarray1, ccarray2);
+ strrchr(ccarray1, 'c');
+ strstr(carray, carray);
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc
new file mode 100644
index 00000000000..3ad6aed1e0a
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/1.cc
@@ -0,0 +1,69 @@
+// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001 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.
+
+// 21.4: null-terminiated sequence utilities
+
+#include <string>
+#include <cstring>
+#include <cwchar>
+
+void test01()
+{
+ bool test = true;
+ wchar_t c = L'a';
+ const wchar_t cc = L'b';
+ wchar_t* c1 = &c;
+ const wchar_t* cc1 = &cc;
+ const wchar_t* ccarray1 = L"san francisco roof garden inspectors";
+ const wchar_t* ccarray2 = L"san francisco sunny-day park inspectors";
+ wchar_t carray[50];
+ std::wcscpy(carray, ccarray1);
+
+ // const wchar_t* wcschr(const wchar_t* s, wchar_t c);
+ // wchar_t* wcschr(wchar_t* s, wchar_t c);
+ cc1 = std::wcschr(ccarray1, L'c');
+ c1 = std::wcschr(carray, L'c');
+
+ // const char* wcspbrk(const wchar_t* s1, const wchar_t* s2);
+ // char* wcspbrk(wchar_t* s1, const wchar_t* s2);
+ cc1 = std::wcspbrk(ccarray1, ccarray2);
+ c1 = std::wcspbrk(carray, ccarray2);
+
+ // const wchar_t* strrchr(const wchar_t* s, wchar_t c);
+ // wchar_t* strrchr(wchar_t* s, wchar_t c);
+ cc1 = std::wcsrchr(ccarray1, L'c');
+ c1 = std::wcsrchr(carray, L'c');
+
+ // const wchar_t* strstr(const wchar_t* s1, const wchar_t* s2);
+ // wchar_t* strstr(wchar_t* s1, const wchar_t* s2);
+ cc1 = std::wcsstr(ccarray1, ccarray2);
+ c1 = std::wcsstr(carray, carray);
+
+ // const wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
+ // wchar_t* wmemchr( wchar_t* s, wchar_t c, size_t n);
+ cc1 = std::wmemchr(ccarray1, L'a', 3);
+ c1 = std::wmemchr(carray, L'a', 3);
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
new file mode 100644
index 00000000000..3a8f77cd335
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc
@@ -0,0 +1,47 @@
+// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
+
+// Copyright (C) 2001 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.
+
+// 21.4: null-terminiated sequence utilities
+
+#include <string>
+#include <cstring>
+#include <cwchar>
+
+void test02()
+{
+ using namespace std;
+
+ const wchar_t* ccarray1 = L"san francisco roof garden inspectors";
+ const wchar_t* ccarray2 = L"san francisco sunny-day park inspectors";
+ wchar_t carray[50];
+ wcscpy(carray, ccarray1);
+
+ wmemchr(ccarray1, L'/', 3);
+ wcschr(ccarray1, L'/');
+ wcspbrk(ccarray1, ccarray2);
+ wcsrchr(ccarray1, L'c');
+ wcsstr(carray, carray);
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc
index d2406ed3599..29322b24457 100644
--- a/libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc
+++ b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc
@@ -1,6 +1,6 @@
// 1999-06-03 bkoz
-// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2000, 2001, 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
@@ -23,92 +23,7 @@
#include <string>
#include <testsuite_hooks.h>
-int test01(void)
-{
- bool test = true;
- const std::string str_01("zuma beach");
- const std::string str_02("montara and ocean beach");
-
- // 21.1.1 character traits requirements
-
- // Key for decoding what function signatures really mean:
- // X == char_traits<_CharT>
- // [c,d] == _CharT
- // [p,q] == const _CharT*
- // s == _CharT*
- // [n,i,j] == size_t
- // f == X::int_type
- // pos == X::pos_type
- // state == X::state_type
-
- // void X::assign(char c, char d)
- // assigns c = d;
- char c1 = 'z';
- char c2 = 'u';
- VERIFY( c1 != c2 );
- std::char_traits<char>::assign(c1,c2);
- VERIFY( c1 == 'u' );
-
- // char* X::move(char* s, const char* p, size_t n)
- // for each i in [0,n) performs X::assign(s[i], p[i]). Copies
- // correctly even where p is in [s, s + n), and yields s.
- char array1[] = {'z', 'u', 'm', 'a', ' ', 'b', 'e', 'a', 'c', 'h', 0};
- const char str_lit1[] = "montara and ocean beach";
- int len = sizeof(str_lit1) + sizeof(array1) - 1; // two terminating chars
- char array2[len];
-
- VERIFY( str_lit1[0] == 'm' );
- c1 = array2[0];
- c2 = str_lit1[0];
- char c3 = array2[1];
- char c4 = str_lit1[1];
- std::char_traits<char>::move(array2, str_lit1, 0);
- VERIFY( array2[0] == c1 );
- VERIFY( str_lit1[0] == c2 );
- std::char_traits<char>::move(array2, str_lit1, 1);
- VERIFY( array2[0] == c2 );
- VERIFY( str_lit1[0] == c2 );
- VERIFY( array2[1] == c3 );
- VERIFY( str_lit1[1] == c4 );
- std::char_traits<char>::move(array2, str_lit1, 2);
- VERIFY( array2[0] == c2 );
- VERIFY( str_lit1[0] == c2 );
- VERIFY( array2[1] == c4 );
- VERIFY( str_lit1[1] == c4 );
-
- char* pc1 = array1 + 1;
- c1 = pc1[0];
- c2 = array1[0];
- VERIFY( c1 != c2 );
- char* pc2 = std::char_traits<char>::move(array1, pc1, 0);
- c3 = pc1[0];
- c4 = array1[0];
- VERIFY( c1 == c3 );
- VERIFY( c2 == c4 );
- VERIFY( pc2 == array1 );
-
- c1 = pc1[0];
- c2 = array1[0];
- char* pc3 = pc1;
- pc2 = std::char_traits<char>::move(array1, pc1, 10);
- c3 = pc1[0];
- c4 = array1[0];
- VERIFY( c1 != c3 ); // underlying char array changed.
- VERIFY( c4 != c3 );
- VERIFY( pc2 == array1 );
- VERIFY( pc3 == pc1 ); // but pointers o-tay
- c1 = *(str_01.data());
- c2 = array1[0];
- VERIFY( c1 != c2 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-#if _GLIBCPP_USE_WCHAR_T
-int test02(void)
+void test01(void)
{
bool test = true;
const std::wstring str_01(L"zuma beach");
@@ -185,20 +100,10 @@ int test02(void)
c1 = *(str_01.data());
c2 = array1[0];
VERIFY( c1 != c2 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
}
-#endif //_GLIBCPP_USE_WCHAR_T
int main()
{
test01();
-#if _GLIBCPP_USE_WCHAR_T
- test02();
-#endif
return 0;
}
diff --git a/libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/1.cc
new file mode 100644
index 00000000000..a93d2f50f2e
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/char_traits/requirements/wchar_t/1.cc
@@ -0,0 +1,109 @@
+// 1999-06-03 bkoz
+
+// Copyright (C) 1999, 2000, 2001, 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.
+
+// 21.1.1 Characher traits requirements
+
+#include <string>
+#include <testsuite_hooks.h>
+
+void test02(void)
+{
+ bool test = true;
+ const std::wstring str_01(L"zuma beach");
+ const std::wstring str_02(L"montara and ocean beach");
+
+ // 21.1.1 character traits requirements
+
+ // Key for decoding what function signatures really mean:
+ // X == char_traits<_CharT>
+ // [c,d] == _CharT
+ // [p,q] == const _CharT*
+ // s == _CharT*
+ // [n,i,j] == size_t
+ // f == X::int_type
+ // pos == X::pos_type
+ // state == X::state_type
+
+ // void X::assign(wchar_t c, wchar_t d)
+ // assigns c = d;
+ wchar_t c1 = L'z';
+ wchar_t c2 = L'u';
+ VERIFY( c1 != c2 );
+ std::char_traits<wchar_t>::assign(c1,c2);
+ VERIFY( c1 == L'u' );
+
+ // char* X::move(char* s, const char* p, size_t n)
+ // for each i in [0,n) performs X::assign(s[i], p[i]). Copies
+ // correctly even where p is in [s, s + n), and yields s.
+ wchar_t array1[] = {L'z', L'u', L'm', L'a', L' ', L'b', L'e', L'a', L'c', L'h', 0};
+ const wchar_t str_lit1[] = L"montara and ocean beach";
+ int len = sizeof(str_lit1) + sizeof(array1) - 1; // two terminating chars
+ wchar_t array2[len];
+
+ VERIFY( str_lit1[0] == 'm' );
+ c1 = array2[0];
+ c2 = str_lit1[0];
+ wchar_t c3 = array2[1];
+ wchar_t c4 = str_lit1[1];
+ std::char_traits<wchar_t>::move(array2, str_lit1, 0);
+ VERIFY( array2[0] == c1 );
+ VERIFY( str_lit1[0] == c2 );
+ std::char_traits<wchar_t>::move(array2, str_lit1, 1);
+ VERIFY( array2[0] == c2 );
+ VERIFY( str_lit1[0] == c2 );
+ VERIFY( array2[1] == c3 );
+ VERIFY( str_lit1[1] == c4 );
+ std::char_traits<wchar_t>::move(array2, str_lit1, 2);
+ VERIFY( array2[0] == c2 );
+ VERIFY( str_lit1[0] == c2 );
+ VERIFY( array2[1] == c4 );
+ VERIFY( str_lit1[1] == c4 );
+
+ wchar_t* pc1 = array1 + 1;
+ c1 = pc1[0];
+ c2 = array1[0];
+ VERIFY( c1 != c2 );
+ wchar_t* pc2 = std::char_traits<wchar_t>::move(array1, pc1, 0);
+ c3 = pc1[0];
+ c4 = array1[0];
+ VERIFY( c1 == c3 );
+ VERIFY( c2 == c4 );
+ VERIFY( pc2 == array1 );
+
+ c1 = pc1[0];
+ c2 = array1[0];
+ wchar_t* pc3 = pc1;
+ pc2 = std::char_traits<wchar_t>::move(array1, pc1, 10);
+ c3 = pc1[0];
+ c4 = array1[0];
+ VERIFY( c1 != c3 ); // underlying wchar_t array changed.
+ VERIFY( c4 != c3 );
+ VERIFY( pc2 == array1 );
+ VERIFY( pc3 == pc1 ); // but pointers o-tay
+ c1 = *(str_01.data());
+ c2 = array1[0];
+ VERIFY( c1 != c2 );
+}
+
+int main()
+{
+ test02();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc b/libstdc++-v3/testsuite/21_strings/char_traits/typedefs/char/1.cc
index 699a479fa83..4f2d061fb09 100644
--- a/libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc
+++ b/libstdc++-v3/testsuite/21_strings/char_traits/typedefs/char/1.cc
@@ -1,7 +1,7 @@
// 2001-02-11 gdr
// Origin: Craig Rodrigues <rodrigc@mediaone.net>
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 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
diff --git a/libstdc++-v3/testsuite/21_strings/replace.cc b/libstdc++-v3/testsuite/21_strings/replace.cc
deleted file mode 100644
index 6dc9ec6b9bf..00000000000
--- a/libstdc++-v3/testsuite/21_strings/replace.cc
+++ /dev/null
@@ -1,202 +0,0 @@
-// 1999-06-10 bkoz
-
-// Copyright (C) 1994, 1999, 2001, 2002 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.
-
-// 21.3.5.6 basic_string::replace
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::const_reference cref;
- typedef std::string::reference ref;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const char str_lit01[] = "ventura, california";
- const std::string str01(str_lit01);
- std::string str02("del mar, california");
- std::string str03(" and ");
- std::string str05;
-
- // string& replace(size_type pos, size_type n, const string& string)
- // string& replace(size_type pos1, size_type n1, const string& string,
- // size_type pos2, size_type n2)
- // string& replace(size_type pos, size_type n1, const char* s, size_type n2)
- // string& replace(size_type pos, size_type n1, const char* s)
- // string& replace(size_type pos, size_type n1, size_type n2, char c)
- // string& replace(iterator it1, iterator it2, const string& str)
- // string& replace(iterator it1, iterator it2, const chat* s, size_type n)
- // string& replace(iterator it1, iterator it2, const chat* s)
- // string& replace(iterator it1, iterator it2, size_type n, char c)
- // template<typename InputIter>
- // string& replace(iterator it1, iterator it2, InputIter j1, InputIter j2)
-
- // with mods, from tstring.cc, from jason merrill, et. al.
- std::string X = "Hello";
- std::string x = X;
-
- char ch = x[0];
- VERIFY( ch == 'H' );
-
- std::string z = x.substr(2, 3);
- VERIFY( z == "llo" );
-
- x.replace(2, 2, "r");
- VERIFY( x == "Hero" );
-
- x = X;
- x.replace(0, 1, "j");
- VERIFY( x == "jello" );
-
- int ar[] = { 'H', 'e', 'l', 'l', 'o' };
- x.replace(std::find(x.begin(), x.end(), 'l'),
- std::find(x.rbegin(), x.rend(), 'l').base(), ar,
- ar + sizeof(ar) / sizeof(ar[0]));
- VERIFY( x == "jeHelloo" );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-void
-test02()
-{
- bool test = true;
- const char* strlit = "../the long pier/Hanalei Bay/Kauai/Hawaii";
- std::string aux = strlit;
- aux.replace(aux.begin()+5, aux.begin()+20,
- aux.begin()+10, aux.begin()+15);
- VERIFY(aux == "../thg piealei Bay/Kauai/Hawaii");
-
- aux = strlit;
- aux.replace(aux.begin() + 10, aux.begin() + 15,
- aux.begin() + 5, aux.begin() + 20);
- VERIFY(aux == "../the lone long pier/Hanr/Hanalei Bay/Kauai/Hawaii");
-}
-
-// Some more miscellaneous tests
-void
-test03()
-{
- bool test = true;
- const char* title01 = "nine types of ambiguity";
- const char* title02 = "ultra";
- std::string str01 = title01;
- std::string str02 = title02;
-
- str01.replace(0, 4, str02);
- VERIFY(str01 == "ultra types of ambiguity");
-
- str01.replace(15, 9, str02, 2, 2);
- VERIFY(str01 == "ultra types of tr");
-
- str01 = title01;
- str02.replace(0, 0, str01, 0, std::string::npos);
- VERIFY(str02 == "nine types of ambiguityultra");
-
- str02.replace(11, 2, title02, 5);
- VERIFY(str02 == "nine types ultra ambiguityultra");
-
- str02.replace(11, 5, title01, 2);
- VERIFY(str02 == "nine types ni ambiguityultra");
-
- str01.replace(str01.size(), 0, title02);
- VERIFY(str01 == "nine types of ambiguityultra");
-
- str01 = title01;
- str02 = title02;
- str01.replace(str01.begin(), str01.end(), str02);
- VERIFY(str01 == "ultra");
-
- str01.replace(str01.begin(), str01.begin(), title01, 4);
- VERIFY(str01 == "nineultra");
-
- str01.replace(str01.end(), str01.end(), title01 + 5, 5);
- VERIFY(str01 == "nineultratypes");
-
- str01.replace(str01.begin(), str01.end(), title02);
- VERIFY(str01 == "ultra");
-}
-
-// Some more tests for
-// template<typename InputIter>
-// string& replace(iterator it1, iterator it2, InputIter j1, InputIter j2)
-void
-test04()
-{
- bool test = true;
- std::string str01 = "geogaddi";
- std::string str02;
-
- typedef std::string::iterator iterator;
- typedef std::string::const_iterator const_iterator;
-
- iterator it1 = str01.begin();
- iterator it2 = str01.end();
- str02.replace(str02.begin(), str02.end(), it1, it2);
- VERIFY(str02 == "geogaddi");
-
- str02 = "boards";
- const_iterator c_it1 = str01.begin();
- const_iterator c_it2 = str01.end();
- str02.replace(str02.begin(), str02.end(), c_it1, c_it2);
- VERIFY(str02 == "geogaddi");
-
- str02 = "boards";
- const char* c_ptr1 = str01.c_str();
- const char* c_ptr2 = str01.c_str() + 8;
- str02.replace(str02.begin(), str02.end(), c_ptr1, c_ptr2);
- VERIFY(str02 == "geogaddi");
-
- str02 = "boards";
- char* ptr1 = &*str01.begin();
- char* ptr2 = &*str01.end();
- str02.replace(str02.begin(), str02.end(), ptr1, ptr2);
- VERIFY(str02 == "geogaddi");
-}
-
-// We wrongly used __n1 instead of __foldn1 in the length_error
-// check at the beginning of replace(__pos, __n1, __s, __n2)
-void
-test05()
-{
- bool test = true;
- std::string str01 = "londinium";
- std::string str02 = "cydonia";
-
- str01.replace(0, 20, str02.c_str(), 3);
- VERIFY(str01 == "cyd");
-}
-
-int main()
-{
- test01();
- test02();
- test03();
- test04();
- test05();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/testsuite_hooks.cc b/libstdc++-v3/testsuite/testsuite_hooks.cc
index 1970ea09b75..d51a3d34435 100644
--- a/libstdc++-v3/testsuite/testsuite_hooks.cc
+++ b/libstdc++-v3/testsuite/testsuite_hooks.cc
@@ -173,7 +173,7 @@ namespace __gnu_cxx_test
VERIFY( preLC_ALL == postLC_ALL );
}
else
- throw environment_variable(string("LC_ALL for") + string(name));
+ throw environment_variable(string("LC_ALL for ") + string(name));
}
void
OpenPOWER on IntegriCloud