]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/std/strings/basic.string/string.modifiers/string_assign/string_view.pass.cpp
Vendor import of libc++ trunk r290819:
[FreeBSD/FreeBSD.git] / test / std / strings / basic.string / string.modifiers / string_assign / string_view.pass.cpp
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
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
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
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 }