1// 1999-07-08 bkoz 2 3// Copyright (C) 1999-2015 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 3, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING3. If not see 18// <http://www.gnu.org/licenses/>. 19 20// 21.3.5.2 basic_string::append 21 22#include <string> 23#include <stdexcept> 24#include <testsuite_hooks.h> 25 26bool test01(void) 27{ 28 bool test __attribute__((unused)) = true; 29 typedef std::wstring::size_type csize_type; 30 typedef std::wstring::const_reference cref; 31 typedef std::wstring::reference ref; 32 csize_type csz01; 33 34 const wchar_t str_lit01[] = L"point bolivar, texas"; 35 const std::wstring str01(str_lit01); 36 const std::wstring str02(L"corpus, "); 37 const std::wstring str03; 38 std::wstring str05; 39 40 41 // wstring& append(const wstring&) 42 str05 = str02; 43 str05.append(str05); 44 VERIFY( str05 == L"corpus, corpus, " ); 45 str05.append(str01); 46 VERIFY( str05 == L"corpus, corpus, point bolivar, texas" ); 47 str05.append(str03); 48 VERIFY( str05 == L"corpus, corpus, point bolivar, texas" ); 49 std::wstring str06; 50 str06.append(str05); 51 VERIFY( str06 == str05 ); 52 53 54 // wstring& append(const wstring&, size_type pos, size_type n) 55 str05.erase(); 56 str06.erase(); 57 csz01 = str03.size(); 58 try { 59 str06.append(str03, csz01 + 1, 0); 60 VERIFY( false ); 61 } 62 catch(std::out_of_range& fail) { 63 VERIFY( true ); 64 } 65 catch(...) { 66 VERIFY( false ); 67 } 68 69 csz01 = str01.size(); 70 try { 71 str06.append(str01, csz01 + 1, 0); 72 VERIFY( false ); 73 } 74 catch(std::out_of_range& fail) { 75 VERIFY( true ); 76 } 77 catch(...) { 78 VERIFY( false ); 79 } 80 81 str05 = str02; 82 str05.append(str01, 0, std::wstring::npos); 83 VERIFY( str05 == L"corpus, point bolivar, texas" ); 84 VERIFY( str05 != str02 ); 85 86 str06 = str02; 87 str06.append(str01, 15, std::wstring::npos); 88 VERIFY( str06 == L"corpus, texas" ); 89 VERIFY( str02 != str06 ); 90 91 92 // wstring& append(const wchar_t* s) 93 str05.erase(); 94 str06.erase(); 95 str05.append(L""); 96 VERIFY( str05 == str03 ); 97 98 str05.append(str_lit01); 99 VERIFY( str05 == str01 ); 100 101 str06 = str02; 102 str06.append(L"corpus, "); 103 VERIFY( str06 == L"corpus, corpus, " ); 104 105 106 // wstring& append(const wchar_t* s, size_type n) 107 str05.erase(); 108 str06.erase(); 109 str05.append(L"", 0); 110 VERIFY( str05.size() == 0 ); 111 VERIFY( str05 == str03 ); 112 113 str05.append(str_lit01, sizeof(str_lit01) / sizeof(wchar_t) - 1); 114 VERIFY( str05 == str01 ); 115 116 str06 = str02; 117 str06.append(L"corpus, ", 6); 118 VERIFY( str06 == L"corpus, corpus" ); 119 120 str06 = str02; 121 str06.append(L"corpus, ", 12); 122 VERIFY( str06 != L"corpus, corpus, " ); 123 124 125 // wstring& append(size_type n, char c) 126 str05.erase(); 127 str06.erase(); 128 str05.append(0, L'a'); 129 VERIFY( str05 == str03 ); 130 str06.append(8, L'.'); 131 VERIFY( str06 == L"........" ); 132 133 134 // template<typename InputIter> 135 // wstring& append(InputIter first, InputIter last) 136 str05.erase(); 137 str06.erase(); 138 str05.append(str03.begin(), str03.end()); 139 VERIFY( str05 == str03 ); 140 141 str06 = str02; 142 str06.append(str01.begin(), str01.begin() + str01.find(L'r')); 143 VERIFY( str06 == L"corpus, point boliva" ); 144 VERIFY( str06 != str01 ); 145 VERIFY( str06 != str02 ); 146 147 str05 = str01; 148 str05.append(str05.begin(), str05.begin() + str05.find(L'r')); 149 VERIFY( str05 == L"point bolivar, texaspoint boliva" ); 150 VERIFY( str05 != str01 ); 151 return test; 152} 153 154int main() 155{ 156 test01(); 157 return 0; 158} 159