• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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