1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <string> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 126e0a1f458e41c08112a130f50636ced03907e29eHoward Hinnant// basic_string<charT,traits,Allocator>& 13a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow// append(const basic_string<charT,traits>& str, size_type pos, size_type n = npos); 14a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow// the "= npos" was added for C++14 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <string> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <stdexcept> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 20375e2f669cb882eb9a9700ab7fd1de8d2b57665fEric Fiselier#include "test_macros.h" 21061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 229dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class S> 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest(S s, S str, typename S::size_type pos, typename S::size_type n, S expected) 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 27c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez if (pos <= str.size()) 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant s.append(str, pos, n); 30375e2f669cb882eb9a9700ab7fd1de8d2b57665fEric Fiselier LIBCPP_ASSERT(s.__invariants()); 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(s == expected); 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 33c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 34c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez else 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 36c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez try 37c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez { 38c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez s.append(str, pos, n); 39c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez assert(false); 40c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez } 41c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez catch (std::out_of_range&) 42c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez { 43c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez assert(pos > str.size()); 44c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez } 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 46c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez#endif 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 49a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clowtemplate <class S> 50a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clowvoid 51a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clowtest_npos(S s, S str, typename S::size_type pos, S expected) 52a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow{ 53c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez if (pos <= str.size()) 54a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow { 55a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow s.append(str, pos); 56375e2f669cb882eb9a9700ab7fd1de8d2b57665fEric Fiselier LIBCPP_ASSERT(s.__invariants()); 57a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow assert(s == expected); 58a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow } 59c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 60c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez else 61a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow { 62c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez try 63c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez { 64c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez s.append(str, pos); 65c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez assert(false); 66c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez } 67c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez catch (std::out_of_range&) 68c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez { 69c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez assert(pos > str.size()); 70c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez } 71a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow } 72c09116009cebdebbe60b713a918069fcda4d9886Roger Ferrer Ibanez#endif 73a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow} 74a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 779dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant { 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::string S; 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S(), 0, 0, S()); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S(), 1, 0, S()); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345"), 0, 3, S("123")); 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345"), 1, 4, S("2345")); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345"), 3, 15, S("45")); 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345"), 5, 15, S("")); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345"), 6, 15, S("not happening")); 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345678901234567890"), 0, 0, S()); 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345678901234567890"), 1, 1, S("2")); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345678901234567890"), 2, 3, S("345")); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345678901234567890"), 12, 13, S("34567890")); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), S("12345678901234567890"), 21, 13, S("not happening")); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), S(), 0, 0, S("12345")); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), S("12345"), 2, 2, S("1234534")); 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), S("1234567890"), 0, 100, S("123451234567890")); 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), S(), 0, 0, S("12345678901234567890")); 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), S("12345"), 1, 3, S("12345678901234567890234")); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), S("12345678901234567890"), 5, 10, 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("123456789012345678906789012345")); 1009dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant } 101df9db31c27fb810154df1380d67ee131e7a42454Marshall Clow#if TEST_STD_VER >= 11 1029dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant { 1039dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; 1049dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S(), 0, 0, S()); 1059dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S(), 1, 0, S()); 1069dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345"), 0, 3, S("123")); 1079dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345"), 1, 4, S("2345")); 1089dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345"), 3, 15, S("45")); 1099dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345"), 5, 15, S("")); 1109dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345"), 6, 15, S("not happening")); 1119dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345678901234567890"), 0, 0, S()); 1129dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345678901234567890"), 1, 1, S("2")); 1139dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345678901234567890"), 2, 3, S("345")); 1149dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345678901234567890"), 12, 13, S("34567890")); 1159dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), S("12345678901234567890"), 21, 13, S("not happening")); 1169dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 1179dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), S(), 0, 0, S("12345")); 1189dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), S("12345"), 2, 2, S("1234534")); 1199dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), S("1234567890"), 0, 100, S("123451234567890")); 1209dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 1219dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), S(), 0, 0, S("12345678901234567890")); 1229dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), S("12345"), 1, 3, S("12345678901234567890234")); 1239dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), S("12345678901234567890"), 5, 10, 1249dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("123456789012345678906789012345")); 1259dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant } 1269dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant#endif 127a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow { 128a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow typedef std::string S; 129a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow test_npos(S(), S(), 0, S()); 130a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow test_npos(S(), S(), 1, S()); 131a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow test_npos(S(), S("12345"), 0, S("12345")); 132a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow test_npos(S(), S("12345"), 1, S("2345")); 133a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow test_npos(S(), S("12345"), 3, S("45")); 134a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow test_npos(S(), S("12345"), 5, S("")); 135a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow test_npos(S(), S("12345"), 6, S("not happening")); 136a93b5e27a8cea26a63c8272574900c9a376fe9aeMarshall Clow } 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 138