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 // template<class charT, class traits, class Allocator>
13 // basic_string<charT,traits,Allocator>
14 // operator+(const basic_string<charT,traits,Allocator>& lhs,
15 // const basic_string<charT,traits,Allocator>& rhs);
16
17 // template<class charT, class traits, class Allocator>
18 // basic_string<charT,traits,Allocator>&&
19 // operator+(const basic_string<charT,traits,Allocator>&& lhs,
20 // const basic_string<charT,traits,Allocator>& rhs);
21
22 // template<class charT, class traits, class Allocator>
23 // basic_string<charT,traits,Allocator>&&
24 // operator+(const basic_string<charT,traits,Allocator>& lhs,
25 // const basic_string<charT,traits,Allocator>&& rhs);
26
27 // template<class charT, class traits, class Allocator>
28 // basic_string<charT,traits,Allocator>&&
29 // operator+(const basic_string<charT,traits,Allocator>&& lhs,
30 // const basic_string<charT,traits,Allocator>&& rhs);
31
32 #include <string>
33 #include <utility>
34 #include <cassert>
35
36 #include "min_allocator.h"
37
38 template <class S>
39 void
test0(const S & lhs,const S & rhs,const S & x)40 test0(const S& lhs, const S& rhs, const S& x)
41 {
42 assert(lhs + rhs == x);
43 }
44
45 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
46
47 template <class S>
48 void
test1(S && lhs,const S & rhs,const S & x)49 test1(S&& lhs, const S& rhs, const S& x)
50 {
51 assert(move(lhs) + rhs == x);
52 }
53
54 template <class S>
55 void
test2(const S & lhs,S && rhs,const S & x)56 test2(const S& lhs, S&& rhs, const S& x)
57 {
58 assert(lhs + move(rhs) == x);
59 }
60
61 template <class S>
62 void
test3(S && lhs,S && rhs,const S & x)63 test3(S&& lhs, S&& rhs, const S& x)
64 {
65 assert(move(lhs) + move(rhs) == x);
66 }
67
68 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
69
main()70 int main()
71 {
72 {
73 typedef std::string S;
74 test0(S(""), S(""), S(""));
75 test0(S(""), S("12345"), S("12345"));
76 test0(S(""), S("1234567890"), S("1234567890"));
77 test0(S(""), S("12345678901234567890"), S("12345678901234567890"));
78 test0(S("abcde"), S(""), S("abcde"));
79 test0(S("abcde"), S("12345"), S("abcde12345"));
80 test0(S("abcde"), S("1234567890"), S("abcde1234567890"));
81 test0(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
82 test0(S("abcdefghij"), S(""), S("abcdefghij"));
83 test0(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
84 test0(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
85 test0(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
86 test0(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
87 test0(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
88 test0(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
89 test0(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
90
91 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
92
93 test1(S(""), S(""), S(""));
94 test1(S(""), S("12345"), S("12345"));
95 test1(S(""), S("1234567890"), S("1234567890"));
96 test1(S(""), S("12345678901234567890"), S("12345678901234567890"));
97 test1(S("abcde"), S(""), S("abcde"));
98 test1(S("abcde"), S("12345"), S("abcde12345"));
99 test1(S("abcde"), S("1234567890"), S("abcde1234567890"));
100 test1(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
101 test1(S("abcdefghij"), S(""), S("abcdefghij"));
102 test1(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
103 test1(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
104 test1(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
105 test1(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
106 test1(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
107 test1(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
108 test1(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
109
110 test2(S(""), S(""), S(""));
111 test2(S(""), S("12345"), S("12345"));
112 test2(S(""), S("1234567890"), S("1234567890"));
113 test2(S(""), S("12345678901234567890"), S("12345678901234567890"));
114 test2(S("abcde"), S(""), S("abcde"));
115 test2(S("abcde"), S("12345"), S("abcde12345"));
116 test2(S("abcde"), S("1234567890"), S("abcde1234567890"));
117 test2(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
118 test2(S("abcdefghij"), S(""), S("abcdefghij"));
119 test2(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
120 test2(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
121 test2(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
122 test2(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
123 test2(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
124 test2(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
125 test2(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
126
127 test3(S(""), S(""), S(""));
128 test3(S(""), S("12345"), S("12345"));
129 test3(S(""), S("1234567890"), S("1234567890"));
130 test3(S(""), S("12345678901234567890"), S("12345678901234567890"));
131 test3(S("abcde"), S(""), S("abcde"));
132 test3(S("abcde"), S("12345"), S("abcde12345"));
133 test3(S("abcde"), S("1234567890"), S("abcde1234567890"));
134 test3(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
135 test3(S("abcdefghij"), S(""), S("abcdefghij"));
136 test3(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
137 test3(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
138 test3(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
139 test3(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
140 test3(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
141 test3(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
142 test3(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
143
144 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
145 }
146 #if __cplusplus >= 201103L
147 {
148 typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
149 test0(S(""), S(""), S(""));
150 test0(S(""), S("12345"), S("12345"));
151 test0(S(""), S("1234567890"), S("1234567890"));
152 test0(S(""), S("12345678901234567890"), S("12345678901234567890"));
153 test0(S("abcde"), S(""), S("abcde"));
154 test0(S("abcde"), S("12345"), S("abcde12345"));
155 test0(S("abcde"), S("1234567890"), S("abcde1234567890"));
156 test0(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
157 test0(S("abcdefghij"), S(""), S("abcdefghij"));
158 test0(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
159 test0(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
160 test0(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
161 test0(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
162 test0(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
163 test0(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
164 test0(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
165
166 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
167
168 test1(S(""), S(""), S(""));
169 test1(S(""), S("12345"), S("12345"));
170 test1(S(""), S("1234567890"), S("1234567890"));
171 test1(S(""), S("12345678901234567890"), S("12345678901234567890"));
172 test1(S("abcde"), S(""), S("abcde"));
173 test1(S("abcde"), S("12345"), S("abcde12345"));
174 test1(S("abcde"), S("1234567890"), S("abcde1234567890"));
175 test1(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
176 test1(S("abcdefghij"), S(""), S("abcdefghij"));
177 test1(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
178 test1(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
179 test1(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
180 test1(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
181 test1(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
182 test1(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
183 test1(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
184
185 test2(S(""), S(""), S(""));
186 test2(S(""), S("12345"), S("12345"));
187 test2(S(""), S("1234567890"), S("1234567890"));
188 test2(S(""), S("12345678901234567890"), S("12345678901234567890"));
189 test2(S("abcde"), S(""), S("abcde"));
190 test2(S("abcde"), S("12345"), S("abcde12345"));
191 test2(S("abcde"), S("1234567890"), S("abcde1234567890"));
192 test2(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
193 test2(S("abcdefghij"), S(""), S("abcdefghij"));
194 test2(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
195 test2(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
196 test2(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
197 test2(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
198 test2(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
199 test2(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
200 test2(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
201
202 test3(S(""), S(""), S(""));
203 test3(S(""), S("12345"), S("12345"));
204 test3(S(""), S("1234567890"), S("1234567890"));
205 test3(S(""), S("12345678901234567890"), S("12345678901234567890"));
206 test3(S("abcde"), S(""), S("abcde"));
207 test3(S("abcde"), S("12345"), S("abcde12345"));
208 test3(S("abcde"), S("1234567890"), S("abcde1234567890"));
209 test3(S("abcde"), S("12345678901234567890"), S("abcde12345678901234567890"));
210 test3(S("abcdefghij"), S(""), S("abcdefghij"));
211 test3(S("abcdefghij"), S("12345"), S("abcdefghij12345"));
212 test3(S("abcdefghij"), S("1234567890"), S("abcdefghij1234567890"));
213 test3(S("abcdefghij"), S("12345678901234567890"), S("abcdefghij12345678901234567890"));
214 test3(S("abcdefghijklmnopqrst"), S(""), S("abcdefghijklmnopqrst"));
215 test3(S("abcdefghijklmnopqrst"), S("12345"), S("abcdefghijklmnopqrst12345"));
216 test3(S("abcdefghijklmnopqrst"), S("1234567890"), S("abcdefghijklmnopqrst1234567890"));
217 test3(S("abcdefghijklmnopqrst"), S("12345678901234567890"), S("abcdefghijklmnopqrst12345678901234567890"));
218
219 #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
220 }
221 #endif
222 }
223