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