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// template<class InputIterator> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// basic_string& assign(InputIterator first, InputIterator last); 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <string> 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "../../input_iterator.h" 19061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class S, class It> 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttest(S s, It first, It last, S expected) 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant s.assign(first, last); 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(s.__invariants()); 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(s == expected); 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 329dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant { 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::string S; 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), s, s, S()); 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), s, s+1, S("A")); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), s, s+10, S("ABCDEFGHIJ")); 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), s, s, S()); 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), s, s+1, S("A")); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), s, s+10, S("ABCDEFGHIJ")); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("1234567890"), s, s, S()); 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("1234567890"), s, s+1, S("A")); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("1234567890"), s, s+10, S("ABCDEFGHIJ")); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("1234567890"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), s, s, S()); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), s, s+1, S("A")); 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), s, s+10, S("ABCDEFGHIJ")); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), s, s+52, 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s), S()); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+1), S("A")); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+10), 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJ")); 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+52), 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s), 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S()); 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+1), 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("A")); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+10), 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJ")); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+52), 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s), 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S()); 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1), 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("A")); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10), 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJ")); 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52), 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s), 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S()); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1), 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("A")); 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10), 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJ")); 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52), 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 899dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant } 909dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant#if __cplusplus >= 201103L 919dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant { 929dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; 939dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 949dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), s, s, S()); 959dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), s, s+1, S("A")); 969dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), s, s+10, S("ABCDEFGHIJ")); 979dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 989dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 999dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), s, s, S()); 1009dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), s, s+1, S("A")); 1019dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), s, s+10, S("ABCDEFGHIJ")); 1029dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 1039dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 1049dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("1234567890"), s, s, S()); 1059dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("1234567890"), s, s+1, S("A")); 1069dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("1234567890"), s, s+10, S("ABCDEFGHIJ")); 1079dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("1234567890"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 1089dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 1099dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), s, s, S()); 1109dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), s, s+1, S("A")); 1119dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), s, s+10, S("ABCDEFGHIJ")); 1129dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), s, s+52, 1139dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 1149dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 1159dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s), S()); 1169dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+1), S("A")); 1179dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+10), 1189dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJ")); 1199dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+52), 1209dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 1219dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 1229dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s), 1239dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S()); 1249dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+1), 1259dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("A")); 1269dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+10), 1279dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJ")); 1289dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+52), 1299dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 1309dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 1319dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s), 1329dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S()); 1339dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1), 1349dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("A")); 1359dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10), 1369dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJ")); 1379dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52), 1389dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 1399dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant 1409dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s), 1419dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S()); 1429dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1), 1439dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("A")); 1449dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10), 1459dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJ")); 1469dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52), 1479dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); 1489dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant } 1499dcdcdee2582575dd4a2e5857b9f32735763f9c7Howard Hinnant#endif 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 151