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//   append(const charT* s, size_type n);
14
15#include <string>
16#include <stdexcept>
17#include <cassert>
18
19#include "../../min_allocator.h"
20
21template <class S>
22void
23test(S s, const typename S::value_type* str, typename S::size_type n, S expected)
24{
25    s.append(str, n);
26    assert(s.__invariants());
27    assert(s == expected);
28}
29
30int main()
31{
32    {
33    typedef std::string S;
34    test(S(), "", 0, S());
35    test(S(), "12345", 3, S("123"));
36    test(S(), "12345", 4, S("1234"));
37    test(S(), "12345678901234567890", 0, S());
38    test(S(), "12345678901234567890", 1, S("1"));
39    test(S(), "12345678901234567890", 3, S("123"));
40    test(S(), "12345678901234567890", 20, S("12345678901234567890"));
41
42    test(S("12345"), "", 0, S("12345"));
43    test(S("12345"), "12345", 5, S("1234512345"));
44    test(S("12345"), "1234567890", 10, S("123451234567890"));
45
46    test(S("12345678901234567890"), "", 0, S("12345678901234567890"));
47    test(S("12345678901234567890"), "12345", 5, S("1234567890123456789012345"));
48    test(S("12345678901234567890"), "12345678901234567890", 20,
49         S("1234567890123456789012345678901234567890"));
50    }
51#if __cplusplus >= 201103L
52    {
53    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
54    test(S(), "", 0, S());
55    test(S(), "12345", 3, S("123"));
56    test(S(), "12345", 4, S("1234"));
57    test(S(), "12345678901234567890", 0, S());
58    test(S(), "12345678901234567890", 1, S("1"));
59    test(S(), "12345678901234567890", 3, S("123"));
60    test(S(), "12345678901234567890", 20, S("12345678901234567890"));
61
62    test(S("12345"), "", 0, S("12345"));
63    test(S("12345"), "12345", 5, S("1234512345"));
64    test(S("12345"), "1234567890", 10, S("123451234567890"));
65
66    test(S("12345678901234567890"), "", 0, S("12345678901234567890"));
67    test(S("12345678901234567890"), "12345", 5, S("1234567890123456789012345"));
68    test(S("12345678901234567890"), "12345678901234567890", 20,
69         S("1234567890123456789012345678901234567890"));
70    }
71#endif
72}
73