1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <string> 11 12 // basic_string<charT,traits,Allocator>& 13 // erase(size_type pos = 0, size_type n = npos); 14 15 #include <string> 16 #include <stdexcept> 17 #include <cassert> 18 19 #include "min_allocator.h" 20 21 template <class S> 22 void 23 test(S s, typename S::size_type pos, typename S::size_type n, S expected) 24 { 25 typename S::size_type old_size = s.size(); 26 S s0 = s; 27 try 28 { 29 s.erase(pos, n); 30 assert(s.__invariants()); 31 assert(pos <= old_size); 32 assert(s == expected); 33 } 34 catch (std::out_of_range&) 35 { 36 assert(pos > old_size); 37 assert(s == s0); 38 } 39 } 40 41 template <class S> 42 void 43 test(S s, typename S::size_type pos, S expected) 44 { 45 typename S::size_type old_size = s.size(); 46 S s0 = s; 47 try 48 { 49 s.erase(pos); 50 assert(s.__invariants()); 51 assert(pos <= old_size); 52 assert(s == expected); 53 } 54 catch (std::out_of_range&) 55 { 56 assert(pos > old_size); 57 assert(s == s0); 58 } 59 } 60 61 template <class S> 62 void 63 test(S s, S expected) 64 { 65 s.erase(); 66 assert(s.__invariants()); 67 assert(s == expected); 68 } 69 70 int main() 71 { 72 { 73 typedef std::string S; 74 test(S(""), 0, 0, S("")); 75 test(S(""), 0, 1, S("")); 76 test(S(""), 1, 0, S("can't happen")); 77 test(S("abcde"), 0, 0, S("abcde")); 78 test(S("abcde"), 0, 1, S("bcde")); 79 test(S("abcde"), 0, 2, S("cde")); 80 test(S("abcde"), 0, 4, S("e")); 81 test(S("abcde"), 0, 5, S("")); 82 test(S("abcde"), 0, 6, S("")); 83 test(S("abcde"), 1, 0, S("abcde")); 84 test(S("abcde"), 1, 1, S("acde")); 85 test(S("abcde"), 1, 2, S("ade")); 86 test(S("abcde"), 1, 3, S("ae")); 87 test(S("abcde"), 1, 4, S("a")); 88 test(S("abcde"), 1, 5, S("a")); 89 test(S("abcde"), 2, 0, S("abcde")); 90 test(S("abcde"), 2, 1, S("abde")); 91 test(S("abcde"), 2, 2, S("abe")); 92 test(S("abcde"), 2, 3, S("ab")); 93 test(S("abcde"), 2, 4, S("ab")); 94 test(S("abcde"), 4, 0, S("abcde")); 95 test(S("abcde"), 4, 1, S("abcd")); 96 test(S("abcde"), 4, 2, S("abcd")); 97 test(S("abcde"), 5, 0, S("abcde")); 98 test(S("abcde"), 5, 1, S("abcde")); 99 test(S("abcde"), 6, 0, S("can't happen")); 100 test(S("abcdefghij"), 0, 0, S("abcdefghij")); 101 test(S("abcdefghij"), 0, 1, S("bcdefghij")); 102 test(S("abcdefghij"), 0, 5, S("fghij")); 103 test(S("abcdefghij"), 0, 9, S("j")); 104 test(S("abcdefghij"), 0, 10, S("")); 105 test(S("abcdefghij"), 0, 11, S("")); 106 test(S("abcdefghij"), 1, 0, S("abcdefghij")); 107 test(S("abcdefghij"), 1, 1, S("acdefghij")); 108 test(S("abcdefghij"), 1, 4, S("afghij")); 109 test(S("abcdefghij"), 1, 8, S("aj")); 110 test(S("abcdefghij"), 1, 9, S("a")); 111 test(S("abcdefghij"), 1, 10, S("a")); 112 test(S("abcdefghij"), 5, 0, S("abcdefghij")); 113 test(S("abcdefghij"), 5, 1, S("abcdeghij")); 114 test(S("abcdefghij"), 5, 2, S("abcdehij")); 115 test(S("abcdefghij"), 5, 4, S("abcdej")); 116 test(S("abcdefghij"), 5, 5, S("abcde")); 117 test(S("abcdefghij"), 5, 6, S("abcde")); 118 test(S("abcdefghij"), 9, 0, S("abcdefghij")); 119 test(S("abcdefghij"), 9, 1, S("abcdefghi")); 120 test(S("abcdefghij"), 9, 2, S("abcdefghi")); 121 test(S("abcdefghij"), 10, 0, S("abcdefghij")); 122 test(S("abcdefghij"), 10, 1, S("abcdefghij")); 123 test(S("abcdefghij"), 11, 0, S("can't happen")); 124 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst")); 125 test(S("abcdefghijklmnopqrst"), 0, 1, S("bcdefghijklmnopqrst")); 126 test(S("abcdefghijklmnopqrst"), 0, 10, S("klmnopqrst")); 127 test(S("abcdefghijklmnopqrst"), 0, 19, S("t")); 128 test(S("abcdefghijklmnopqrst"), 0, 20, S("")); 129 test(S("abcdefghijklmnopqrst"), 0, 21, S("")); 130 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst")); 131 test(S("abcdefghijklmnopqrst"), 1, 1, S("acdefghijklmnopqrst")); 132 test(S("abcdefghijklmnopqrst"), 1, 9, S("aklmnopqrst")); 133 test(S("abcdefghijklmnopqrst"), 1, 18, S("at")); 134 test(S("abcdefghijklmnopqrst"), 1, 19, S("a")); 135 test(S("abcdefghijklmnopqrst"), 1, 20, S("a")); 136 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst")); 137 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijlmnopqrst")); 138 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijpqrst")); 139 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijt")); 140 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij")); 141 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij")); 142 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst")); 143 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrs")); 144 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrs")); 145 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst")); 146 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst")); 147 test(S("abcdefghijklmnopqrst"), 21, 0, S("can't happen")); 148 149 test(S(""), 0, S("")); 150 test(S(""), 1, S("can't happen")); 151 test(S("abcde"), 0, S("")); 152 test(S("abcde"), 1, S("a")); 153 test(S("abcde"), 2, S("ab")); 154 test(S("abcde"), 4, S("abcd")); 155 test(S("abcde"), 5, S("abcde")); 156 test(S("abcde"), 6, S("can't happen")); 157 test(S("abcdefghij"), 0, S("")); 158 test(S("abcdefghij"), 1, S("a")); 159 test(S("abcdefghij"), 5, S("abcde")); 160 test(S("abcdefghij"), 9, S("abcdefghi")); 161 test(S("abcdefghij"), 10, S("abcdefghij")); 162 test(S("abcdefghij"), 11, S("can't happen")); 163 test(S("abcdefghijklmnopqrst"), 0, S("")); 164 test(S("abcdefghijklmnopqrst"), 1, S("a")); 165 test(S("abcdefghijklmnopqrst"), 10, S("abcdefghij")); 166 test(S("abcdefghijklmnopqrst"), 19, S("abcdefghijklmnopqrs")); 167 test(S("abcdefghijklmnopqrst"), 20, S("abcdefghijklmnopqrst")); 168 test(S("abcdefghijklmnopqrst"), 21, S("can't happen")); 169 170 test(S(""), S("")); 171 test(S("abcde"), S("")); 172 test(S("abcdefghij"), S("")); 173 test(S("abcdefghijklmnopqrst"), S("")); 174 } 175 #if __cplusplus >= 201103L 176 { 177 typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; 178 test(S(""), 0, 0, S("")); 179 test(S(""), 0, 1, S("")); 180 test(S(""), 1, 0, S("can't happen")); 181 test(S("abcde"), 0, 0, S("abcde")); 182 test(S("abcde"), 0, 1, S("bcde")); 183 test(S("abcde"), 0, 2, S("cde")); 184 test(S("abcde"), 0, 4, S("e")); 185 test(S("abcde"), 0, 5, S("")); 186 test(S("abcde"), 0, 6, S("")); 187 test(S("abcde"), 1, 0, S("abcde")); 188 test(S("abcde"), 1, 1, S("acde")); 189 test(S("abcde"), 1, 2, S("ade")); 190 test(S("abcde"), 1, 3, S("ae")); 191 test(S("abcde"), 1, 4, S("a")); 192 test(S("abcde"), 1, 5, S("a")); 193 test(S("abcde"), 2, 0, S("abcde")); 194 test(S("abcde"), 2, 1, S("abde")); 195 test(S("abcde"), 2, 2, S("abe")); 196 test(S("abcde"), 2, 3, S("ab")); 197 test(S("abcde"), 2, 4, S("ab")); 198 test(S("abcde"), 4, 0, S("abcde")); 199 test(S("abcde"), 4, 1, S("abcd")); 200 test(S("abcde"), 4, 2, S("abcd")); 201 test(S("abcde"), 5, 0, S("abcde")); 202 test(S("abcde"), 5, 1, S("abcde")); 203 test(S("abcde"), 6, 0, S("can't happen")); 204 test(S("abcdefghij"), 0, 0, S("abcdefghij")); 205 test(S("abcdefghij"), 0, 1, S("bcdefghij")); 206 test(S("abcdefghij"), 0, 5, S("fghij")); 207 test(S("abcdefghij"), 0, 9, S("j")); 208 test(S("abcdefghij"), 0, 10, S("")); 209 test(S("abcdefghij"), 0, 11, S("")); 210 test(S("abcdefghij"), 1, 0, S("abcdefghij")); 211 test(S("abcdefghij"), 1, 1, S("acdefghij")); 212 test(S("abcdefghij"), 1, 4, S("afghij")); 213 test(S("abcdefghij"), 1, 8, S("aj")); 214 test(S("abcdefghij"), 1, 9, S("a")); 215 test(S("abcdefghij"), 1, 10, S("a")); 216 test(S("abcdefghij"), 5, 0, S("abcdefghij")); 217 test(S("abcdefghij"), 5, 1, S("abcdeghij")); 218 test(S("abcdefghij"), 5, 2, S("abcdehij")); 219 test(S("abcdefghij"), 5, 4, S("abcdej")); 220 test(S("abcdefghij"), 5, 5, S("abcde")); 221 test(S("abcdefghij"), 5, 6, S("abcde")); 222 test(S("abcdefghij"), 9, 0, S("abcdefghij")); 223 test(S("abcdefghij"), 9, 1, S("abcdefghi")); 224 test(S("abcdefghij"), 9, 2, S("abcdefghi")); 225 test(S("abcdefghij"), 10, 0, S("abcdefghij")); 226 test(S("abcdefghij"), 10, 1, S("abcdefghij")); 227 test(S("abcdefghij"), 11, 0, S("can't happen")); 228 test(S("abcdefghijklmnopqrst"), 0, 0, S("abcdefghijklmnopqrst")); 229 test(S("abcdefghijklmnopqrst"), 0, 1, S("bcdefghijklmnopqrst")); 230 test(S("abcdefghijklmnopqrst"), 0, 10, S("klmnopqrst")); 231 test(S("abcdefghijklmnopqrst"), 0, 19, S("t")); 232 test(S("abcdefghijklmnopqrst"), 0, 20, S("")); 233 test(S("abcdefghijklmnopqrst"), 0, 21, S("")); 234 test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst")); 235 test(S("abcdefghijklmnopqrst"), 1, 1, S("acdefghijklmnopqrst")); 236 test(S("abcdefghijklmnopqrst"), 1, 9, S("aklmnopqrst")); 237 test(S("abcdefghijklmnopqrst"), 1, 18, S("at")); 238 test(S("abcdefghijklmnopqrst"), 1, 19, S("a")); 239 test(S("abcdefghijklmnopqrst"), 1, 20, S("a")); 240 test(S("abcdefghijklmnopqrst"), 10, 0, S("abcdefghijklmnopqrst")); 241 test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghijlmnopqrst")); 242 test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijpqrst")); 243 test(S("abcdefghijklmnopqrst"), 10, 9, S("abcdefghijt")); 244 test(S("abcdefghijklmnopqrst"), 10, 10, S("abcdefghij")); 245 test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij")); 246 test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst")); 247 test(S("abcdefghijklmnopqrst"), 19, 1, S("abcdefghijklmnopqrs")); 248 test(S("abcdefghijklmnopqrst"), 19, 2, S("abcdefghijklmnopqrs")); 249 test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghijklmnopqrst")); 250 test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst")); 251 test(S("abcdefghijklmnopqrst"), 21, 0, S("can't happen")); 252 253 test(S(""), 0, S("")); 254 test(S(""), 1, S("can't happen")); 255 test(S("abcde"), 0, S("")); 256 test(S("abcde"), 1, S("a")); 257 test(S("abcde"), 2, S("ab")); 258 test(S("abcde"), 4, S("abcd")); 259 test(S("abcde"), 5, S("abcde")); 260 test(S("abcde"), 6, S("can't happen")); 261 test(S("abcdefghij"), 0, S("")); 262 test(S("abcdefghij"), 1, S("a")); 263 test(S("abcdefghij"), 5, S("abcde")); 264 test(S("abcdefghij"), 9, S("abcdefghi")); 265 test(S("abcdefghij"), 10, S("abcdefghij")); 266 test(S("abcdefghij"), 11, S("can't happen")); 267 test(S("abcdefghijklmnopqrst"), 0, S("")); 268 test(S("abcdefghijklmnopqrst"), 1, S("a")); 269 test(S("abcdefghijklmnopqrst"), 10, S("abcdefghij")); 270 test(S("abcdefghijklmnopqrst"), 19, S("abcdefghijklmnopqrs")); 271 test(S("abcdefghijklmnopqrst"), 20, S("abcdefghijklmnopqrst")); 272 test(S("abcdefghijklmnopqrst"), 21, S("can't happen")); 273 274 test(S(""), S("")); 275 test(S("abcde"), S("")); 276 test(S("abcdefghij"), S("")); 277 test(S("abcdefghijklmnopqrst"), S("")); 278 } 279 #endif 280 } 281