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 // assign(basic_string_view<charT,traits> sv);
14
15 #include <string>
16 #include <string_view>
17 #include <cassert>
18
19 #include "test_macros.h"
20 #include "min_allocator.h"
21 #include "test_allocator.h"
22
23 template <class S, class SV>
24 void
test(S s,SV sv,S expected)25 test(S s, SV sv, S expected)
26 {
27 s.assign(sv);
28 LIBCPP_ASSERT(s.__invariants());
29 assert(s == expected);
30 }
31
32 template <class S, class SV>
33 void
testAlloc(S s,SV sv,const typename S::allocator_type & a)34 testAlloc(S s, SV sv, const typename S::allocator_type& a)
35 {
36 s.assign(sv);
37 LIBCPP_ASSERT(s.__invariants());
38 assert(s == sv);
39 assert(s.get_allocator() == a);
40 }
41
main()42 int main()
43 {
44 {
45 typedef std::string S;
46 typedef std::string_view SV;
47 test(S(), SV(), S());
48 test(S(), SV("12345"), S("12345"));
49 test(S(), SV("1234567890"), S("1234567890"));
50 test(S(), SV("12345678901234567890"), S("12345678901234567890"));
51
52 test(S("12345"), SV(), S());
53 test(S("12345"), SV("12345"), S("12345"));
54 test(S("12345"), SV("1234567890"), S("1234567890"));
55 test(S("12345"), SV("12345678901234567890"), S("12345678901234567890"));
56
57 test(S("1234567890"), SV(), S());
58 test(S("1234567890"), SV("12345"), S("12345"));
59 test(S("1234567890"), SV("1234567890"), S("1234567890"));
60 test(S("1234567890"), SV("12345678901234567890"), S("12345678901234567890"));
61
62 test(S("12345678901234567890"), SV(), S());
63 test(S("12345678901234567890"), SV("12345"), S("12345"));
64 test(S("12345678901234567890"), SV("1234567890"), S("1234567890"));
65 test(S("12345678901234567890"), SV("12345678901234567890"),
66 S("12345678901234567890"));
67
68 testAlloc(S(), SV(), std::allocator<char>());
69 testAlloc(S(), SV("12345"), std::allocator<char>());
70 testAlloc(S(), SV("1234567890"), std::allocator<char>());
71 testAlloc(S(), SV("12345678901234567890"), std::allocator<char>());
72 }
73
74 #if TEST_STD_VER >= 11
75 {
76 typedef std::basic_string <char, std::char_traits<char>, min_allocator<char>> S;
77 typedef std::basic_string_view<char, std::char_traits<char> > SV;
78 test(S(), SV(), S());
79 test(S(), SV("12345"), S("12345"));
80 test(S(), SV("1234567890"), S("1234567890"));
81 test(S(), SV("12345678901234567890"), S("12345678901234567890"));
82
83 test(S("12345"), SV(), S());
84 test(S("12345"), SV("12345"), S("12345"));
85 test(S("12345"), SV("1234567890"), S("1234567890"));
86 test(S("12345"), SV("12345678901234567890"), S("12345678901234567890"));
87
88 test(S("1234567890"), SV(), S());
89 test(S("1234567890"), SV("12345"), S("12345"));
90 test(S("1234567890"), SV("1234567890"), S("1234567890"));
91 test(S("1234567890"), SV("12345678901234567890"), S("12345678901234567890"));
92
93 test(S("12345678901234567890"), SV(), S());
94 test(S("12345678901234567890"), SV("12345"), S("12345"));
95 test(S("12345678901234567890"), SV("1234567890"), S("1234567890"));
96 test(S("12345678901234567890"), SV("12345678901234567890"),
97 S("12345678901234567890"));
98
99 testAlloc(S(), SV(), min_allocator<char>());
100 testAlloc(S(), SV("12345"), min_allocator<char>());
101 testAlloc(S(), SV("1234567890"), min_allocator<char>());
102 testAlloc(S(), SV("12345678901234567890"), min_allocator<char>());
103 }
104 #endif
105 }
106