OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 } | 118 } |
119 | 119 |
120 } // namespace | 120 } // namespace |
121 | 121 |
122 TEST(OptionalTest, TestConstructDefault) { | 122 TEST(OptionalTest, TestConstructDefault) { |
123 auto log = Logger::Setup(); | 123 auto log = Logger::Setup(); |
124 { | 124 { |
125 Optional<Logger> x; | 125 Optional<Logger> x; |
126 EXPECT_FALSE(x); | 126 EXPECT_FALSE(x); |
127 } | 127 } |
128 EXPECT_EQ(V("0:0. default constructor", "0:0. destructor"), *log); | 128 EXPECT_EQ(V(), *log); |
129 } | 129 } |
130 | 130 |
131 TEST(OptionalTest, TestConstructCopyEmpty) { | 131 TEST(OptionalTest, TestConstructCopyEmpty) { |
132 auto log = Logger::Setup(); | 132 auto log = Logger::Setup(); |
133 { | 133 { |
134 Optional<Logger> x; | 134 Optional<Logger> x; |
135 EXPECT_FALSE(x); | 135 EXPECT_FALSE(x); |
136 auto y = x; | 136 auto y = x; |
137 EXPECT_FALSE(y); | 137 EXPECT_FALSE(y); |
138 } | 138 } |
139 EXPECT_EQ(V("0:0. default constructor", "1:0. copy constructor (from 0:0)", | 139 EXPECT_EQ(V(), *log); |
140 "1:0. destructor", "0:0. destructor"), | |
141 *log); | |
142 } | 140 } |
143 | 141 |
144 TEST(OptionalTest, TestConstructCopyFull) { | 142 TEST(OptionalTest, TestConstructCopyFull) { |
145 auto log = Logger::Setup(); | 143 auto log = Logger::Setup(); |
146 { | 144 { |
147 Logger a; | 145 Logger a; |
148 Optional<Logger> x(a); | 146 Optional<Logger> x(a); |
149 EXPECT_TRUE(x); | 147 EXPECT_TRUE(x); |
150 log->push_back("---"); | 148 log->push_back("---"); |
151 auto y = x; | 149 auto y = x; |
152 EXPECT_TRUE(y); | 150 EXPECT_TRUE(y); |
153 log->push_back("---"); | 151 log->push_back("---"); |
154 } | 152 } |
155 EXPECT_EQ(V("0:0. default constructor", "1:0. copy constructor (from 0:0)", | 153 EXPECT_EQ(V("0:0. default constructor", "1:0. copy constructor (from 0:0)", |
156 "---", "2:0. copy constructor (from 1:0)", "---", | 154 "---", "2:0. copy constructor (from 1:0)", "---", |
157 "2:0. destructor", "1:0. destructor", "0:0. destructor"), | 155 "2:0. destructor", "1:0. destructor", "0:0. destructor"), |
158 *log); | 156 *log); |
159 } | 157 } |
160 | 158 |
161 TEST(OptionalTest, TestConstructMoveEmpty) { | 159 TEST(OptionalTest, TestConstructMoveEmpty) { |
162 auto log = Logger::Setup(); | 160 auto log = Logger::Setup(); |
163 { | 161 { |
164 Optional<Logger> x; | 162 Optional<Logger> x; |
165 EXPECT_FALSE(x); | 163 EXPECT_FALSE(x); |
166 auto y = std::move(x); | 164 auto y = std::move(x); |
167 EXPECT_FALSE(y); | 165 EXPECT_FALSE(y); |
168 } | 166 } |
169 EXPECT_EQ(V("0:0. default constructor", "1:0. move constructor (from 0:0)", | 167 EXPECT_EQ(V(), *log); |
170 "1:0. destructor", "0:0. destructor"), | |
171 *log); | |
172 } | 168 } |
173 | 169 |
174 TEST(OptionalTest, TestConstructMoveFull) { | 170 TEST(OptionalTest, TestConstructMoveFull) { |
175 auto log = Logger::Setup(); | 171 auto log = Logger::Setup(); |
176 { | 172 { |
177 Optional<Logger> x(Logger(17)); | 173 Optional<Logger> x(Logger(17)); |
178 EXPECT_TRUE(x); | 174 EXPECT_TRUE(x); |
179 log->push_back("---"); | 175 log->push_back("---"); |
180 auto y = std::move(x); | 176 auto y = std::move(x); |
181 EXPECT_TRUE(x); | 177 EXPECT_TRUE(x); |
182 EXPECT_TRUE(y); | 178 EXPECT_TRUE(y); |
183 log->push_back("---"); | 179 log->push_back("---"); |
184 } | 180 } |
185 EXPECT_EQ( | 181 EXPECT_EQ( |
186 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", | 182 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", |
187 "0:17. destructor", "---", "2:17. move constructor (from 1:17)", "---", | 183 "0:17. destructor", "---", "2:17. move constructor (from 1:17)", "---", |
188 "2:17. destructor", "1:17. destructor"), | 184 "2:17. destructor", "1:17. destructor"), |
189 *log); | 185 *log); |
190 } | 186 } |
191 | 187 |
192 TEST(OptionalTest, TestCopyAssignToEmptyFromEmpty) { | 188 TEST(OptionalTest, TestCopyAssignToEmptyFromEmpty) { |
193 auto log = Logger::Setup(); | 189 auto log = Logger::Setup(); |
194 { | 190 { |
195 Optional<Logger> x, y; | 191 Optional<Logger> x, y; |
196 x = y; | 192 x = y; |
197 } | 193 } |
198 EXPECT_EQ( | 194 EXPECT_EQ(V(), *log); |
199 V("0:0. default constructor", "1:1. default constructor", | |
200 "0:1. operator= copy (from 1:1)", "1:1. destructor", "0:1. destructor"), | |
201 *log); | |
202 } | 195 } |
203 | 196 |
204 TEST(OptionalTest, TestCopyAssignToFullFromEmpty) { | 197 TEST(OptionalTest, TestCopyAssignToFullFromEmpty) { |
205 auto log = Logger::Setup(); | 198 auto log = Logger::Setup(); |
206 { | 199 { |
207 Optional<Logger> x(Logger(17)); | 200 Optional<Logger> x(Logger(17)); |
208 Optional<Logger> y; | 201 Optional<Logger> y; |
209 log->push_back("---"); | 202 log->push_back("---"); |
210 x = y; | 203 x = y; |
211 log->push_back("---"); | 204 log->push_back("---"); |
212 } | 205 } |
213 EXPECT_EQ( | 206 EXPECT_EQ( |
214 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", | 207 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", |
215 "0:17. destructor", "2:2. default constructor", "---", | 208 "0:17. destructor", "---", "1:17. destructor", "---"), |
216 "1:2. operator= copy (from 2:2)", "---", "2:2. destructor", | |
217 "1:2. destructor"), | |
218 *log); | 209 *log); |
219 } | 210 } |
220 | 211 |
221 TEST(OptionalTest, TestCopyAssignToEmptyFromFull) { | 212 TEST(OptionalTest, TestCopyAssignToEmptyFromFull) { |
222 auto log = Logger::Setup(); | 213 auto log = Logger::Setup(); |
223 { | 214 { |
224 Optional<Logger> x; | 215 Optional<Logger> x; |
225 Optional<Logger> y(Logger(17)); | 216 Optional<Logger> y(Logger(17)); |
226 log->push_back("---"); | 217 log->push_back("---"); |
227 x = y; | 218 x = y; |
228 log->push_back("---"); | 219 log->push_back("---"); |
229 } | 220 } |
230 EXPECT_EQ(V("0:0. default constructor", "1:17. explicit constructor", | 221 EXPECT_EQ( |
231 "2:17. move constructor (from 1:17)", "1:17. destructor", "---", | 222 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", |
232 "0:17. operator= copy (from 2:17)", "---", "2:17. destructor", | 223 "0:17. destructor", "---", "2:17. copy constructor (from 1:17)", "---", |
233 "0:17. destructor"), | 224 "1:17. destructor", "2:17. destructor"), |
234 *log); | 225 *log); |
235 } | 226 } |
236 | 227 |
237 TEST(OptionalTest, TestCopyAssignToFullFromFull) { | 228 TEST(OptionalTest, TestCopyAssignToFullFromFull) { |
238 auto log = Logger::Setup(); | 229 auto log = Logger::Setup(); |
239 { | 230 { |
240 Optional<Logger> x(Logger(17)); | 231 Optional<Logger> x(Logger(17)); |
241 Optional<Logger> y(Logger(42)); | 232 Optional<Logger> y(Logger(42)); |
242 log->push_back("---"); | 233 log->push_back("---"); |
243 x = y; | 234 x = y; |
244 log->push_back("---"); | 235 log->push_back("---"); |
245 } | 236 } |
246 EXPECT_EQ( | 237 EXPECT_EQ( |
247 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", | 238 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", |
248 "0:17. destructor", "2:42. explicit constructor", | 239 "0:17. destructor", "2:42. explicit constructor", |
249 "3:42. move constructor (from 2:42)", "2:42. destructor", "---", | 240 "3:42. move constructor (from 2:42)", "2:42. destructor", "---", |
250 "1:42. operator= copy (from 3:42)", "---", "3:42. destructor", | 241 "1:42. operator= copy (from 3:42)", "---", "3:42. destructor", |
251 "1:42. destructor"), | 242 "1:42. destructor"), |
252 *log); | 243 *log); |
253 } | 244 } |
254 | 245 |
255 TEST(OptionalTest, TestCopyAssignToEmptyFromT) { | 246 TEST(OptionalTest, TestCopyAssignToEmptyFromT) { |
256 auto log = Logger::Setup(); | 247 auto log = Logger::Setup(); |
257 { | 248 { |
258 Optional<Logger> x; | 249 Optional<Logger> x; |
259 Logger y(17); | 250 Logger y(17); |
260 log->push_back("---"); | 251 log->push_back("---"); |
261 x = Optional<Logger>(y); | 252 x = Optional<Logger>(y); |
262 log->push_back("---"); | 253 log->push_back("---"); |
263 } | 254 } |
264 EXPECT_EQ(V("0:0. default constructor", "1:17. explicit constructor", "---", | 255 EXPECT_EQ(V("0:17. explicit constructor", "---", |
265 "2:17. copy constructor (from 1:17)", | 256 "1:17. copy constructor (from 0:17)", |
266 "0:17. operator= move (from 2:17)", "2:17. destructor", "---", | 257 "2:17. move constructor (from 1:17)", "1:17. destructor", "---", |
267 "1:17. destructor", "0:17. destructor"), | 258 "0:17. destructor", "2:17. destructor"), |
268 *log); | 259 *log); |
269 } | 260 } |
270 | 261 |
271 TEST(OptionalTest, TestCopyAssignToFullFromT) { | 262 TEST(OptionalTest, TestCopyAssignToFullFromT) { |
272 auto log = Logger::Setup(); | 263 auto log = Logger::Setup(); |
273 { | 264 { |
274 Optional<Logger> x(Logger(17)); | 265 Optional<Logger> x(Logger(17)); |
275 Logger y(42); | 266 Logger y(42); |
276 log->push_back("---"); | 267 log->push_back("---"); |
277 x = Optional<Logger>(y); | 268 x = Optional<Logger>(y); |
278 log->push_back("---"); | 269 log->push_back("---"); |
279 } | 270 } |
280 EXPECT_EQ( | 271 EXPECT_EQ( |
281 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", | 272 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", |
282 "0:17. destructor", "2:42. explicit constructor", "---", | 273 "0:17. destructor", "2:42. explicit constructor", "---", |
283 "3:42. copy constructor (from 2:42)", | 274 "3:42. copy constructor (from 2:42)", |
284 "1:42. operator= move (from 3:42)", "3:42. destructor", "---", | 275 "1:42. operator= move (from 3:42)", "3:42. destructor", "---", |
285 "2:42. destructor", "1:42. destructor"), | 276 "2:42. destructor", "1:42. destructor"), |
286 *log); | 277 *log); |
287 } | 278 } |
288 | 279 |
289 TEST(OptionalTest, TestMoveAssignToEmptyFromEmpty) { | 280 TEST(OptionalTest, TestMoveAssignToEmptyFromEmpty) { |
290 auto log = Logger::Setup(); | 281 auto log = Logger::Setup(); |
291 { | 282 { |
292 Optional<Logger> x, y; | 283 Optional<Logger> x, y; |
293 x = std::move(y); | 284 x = std::move(y); |
294 } | 285 } |
295 EXPECT_EQ( | 286 EXPECT_EQ(V(), *log); |
296 V("0:0. default constructor", "1:1. default constructor", | |
297 "0:1. operator= move (from 1:1)", "1:1. destructor", "0:1. destructor"), | |
298 *log); | |
299 } | 287 } |
300 | 288 |
301 TEST(OptionalTest, TestMoveAssignToFullFromEmpty) { | 289 TEST(OptionalTest, TestMoveAssignToFullFromEmpty) { |
302 auto log = Logger::Setup(); | 290 auto log = Logger::Setup(); |
303 { | 291 { |
304 Optional<Logger> x(Logger(17)); | 292 Optional<Logger> x(Logger(17)); |
305 Optional<Logger> y; | 293 Optional<Logger> y; |
306 log->push_back("---"); | 294 log->push_back("---"); |
307 x = std::move(y); | 295 x = std::move(y); |
308 log->push_back("---"); | 296 log->push_back("---"); |
309 } | 297 } |
310 EXPECT_EQ( | 298 EXPECT_EQ( |
311 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", | 299 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", |
312 "0:17. destructor", "2:2. default constructor", "---", | 300 "0:17. destructor", "---", "1:17. destructor", "---"), |
313 "1:2. operator= move (from 2:2)", "---", "2:2. destructor", | |
314 "1:2. destructor"), | |
315 *log); | 301 *log); |
316 } | 302 } |
317 | 303 |
318 TEST(OptionalTest, TestMoveAssignToEmptyFromFull) { | 304 TEST(OptionalTest, TestMoveAssignToEmptyFromFull) { |
319 auto log = Logger::Setup(); | 305 auto log = Logger::Setup(); |
320 { | 306 { |
321 Optional<Logger> x; | 307 Optional<Logger> x; |
322 Optional<Logger> y(Logger(17)); | 308 Optional<Logger> y(Logger(17)); |
323 log->push_back("---"); | 309 log->push_back("---"); |
324 x = std::move(y); | 310 x = std::move(y); |
325 log->push_back("---"); | 311 log->push_back("---"); |
326 } | 312 } |
327 EXPECT_EQ(V("0:0. default constructor", "1:17. explicit constructor", | 313 EXPECT_EQ( |
328 "2:17. move constructor (from 1:17)", "1:17. destructor", "---", | 314 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", |
329 "0:17. operator= move (from 2:17)", "---", "2:17. destructor", | 315 "0:17. destructor", "---", "2:17. move constructor (from 1:17)", "---", |
330 "0:17. destructor"), | 316 "1:17. destructor", "2:17. destructor"), |
331 *log); | 317 *log); |
332 } | 318 } |
333 | 319 |
334 TEST(OptionalTest, TestMoveAssignToFullFromFull) { | 320 TEST(OptionalTest, TestMoveAssignToFullFromFull) { |
335 auto log = Logger::Setup(); | 321 auto log = Logger::Setup(); |
336 { | 322 { |
337 Optional<Logger> x(Logger(17)); | 323 Optional<Logger> x(Logger(17)); |
338 Optional<Logger> y(Logger(42)); | 324 Optional<Logger> y(Logger(42)); |
339 log->push_back("---"); | 325 log->push_back("---"); |
340 x = std::move(y); | 326 x = std::move(y); |
341 log->push_back("---"); | 327 log->push_back("---"); |
342 } | 328 } |
343 EXPECT_EQ( | 329 EXPECT_EQ( |
344 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", | 330 V("0:17. explicit constructor", "1:17. move constructor (from 0:17)", |
345 "0:17. destructor", "2:42. explicit constructor", | 331 "0:17. destructor", "2:42. explicit constructor", |
346 "3:42. move constructor (from 2:42)", "2:42. destructor", "---", | 332 "3:42. move constructor (from 2:42)", "2:42. destructor", "---", |
347 "1:42. operator= move (from 3:42)", "---", "3:42. destructor", | 333 "1:42. operator= move (from 3:42)", "---", "3:42. destructor", |
348 "1:42. destructor"), | 334 "1:42. destructor"), |
349 *log); | 335 *log); |
350 } | 336 } |
351 | 337 |
352 TEST(OptionalTest, TestMoveAssignToEmptyFromT) { | 338 TEST(OptionalTest, TestMoveAssignToEmptyFromT) { |
353 auto log = Logger::Setup(); | 339 auto log = Logger::Setup(); |
354 { | 340 { |
355 Optional<Logger> x; | 341 Optional<Logger> x; |
356 Logger y(17); | 342 Logger y(17); |
357 log->push_back("---"); | 343 log->push_back("---"); |
358 x = Optional<Logger>(std::move(y)); | 344 x = Optional<Logger>(std::move(y)); |
359 log->push_back("---"); | 345 log->push_back("---"); |
360 } | 346 } |
361 EXPECT_EQ(V("0:0. default constructor", "1:17. explicit constructor", "---", | 347 EXPECT_EQ(V("0:17. explicit constructor", "---", |
362 "2:17. move constructor (from 1:17)", | 348 "1:17. move constructor (from 0:17)", |
363 "0:17. operator= move (from 2:17)", "2:17. destructor", "---", | 349 "2:17. move constructor (from 1:17)", "1:17. destructor", "---", |
364 "1:17. destructor", "0:17. destructor"), | 350 "0:17. destructor", "2:17. destructor"), |
365 *log); | 351 *log); |
366 } | 352 } |
367 | 353 |
368 TEST(OptionalTest, TestMoveAssignToFullFromT) { | 354 TEST(OptionalTest, TestMoveAssignToFullFromT) { |
369 auto log = Logger::Setup(); | 355 auto log = Logger::Setup(); |
370 { | 356 { |
371 Optional<Logger> x(Logger(17)); | 357 Optional<Logger> x(Logger(17)); |
372 Logger y(42); | 358 Logger y(42); |
373 log->push_back("---"); | 359 log->push_back("---"); |
374 x = Optional<Logger>(std::move(y)); | 360 x = Optional<Logger>(std::move(y)); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 log->push_back("-2-"); | 405 log->push_back("-2-"); |
420 EXPECT_EQ(b, y.value_or(Logger(42))); | 406 EXPECT_EQ(b, y.value_or(Logger(42))); |
421 log->push_back("-3-"); | 407 log->push_back("-3-"); |
422 EXPECT_EQ(a, Optional<Logger>(Logger(17)).value_or(b)); | 408 EXPECT_EQ(a, Optional<Logger>(Logger(17)).value_or(b)); |
423 log->push_back("-4-"); | 409 log->push_back("-4-"); |
424 EXPECT_EQ(b, Optional<Logger>().value_or(b)); | 410 EXPECT_EQ(b, Optional<Logger>().value_or(b)); |
425 log->push_back("-5-"); | 411 log->push_back("-5-"); |
426 } | 412 } |
427 EXPECT_EQ( | 413 EXPECT_EQ( |
428 V("0:17. explicit constructor", "1:42. explicit constructor", | 414 V("0:17. explicit constructor", "1:42. explicit constructor", |
429 "2:17. copy constructor (from 0:17)", "3:3. default constructor", "-1-", | 415 "2:17. copy constructor (from 0:17)", "-1-", |
430 "4:42. explicit constructor", "operator== 0:17, 2:17", | 416 "3:42. explicit constructor", "operator== 0:17, 2:17", |
431 "4:42. destructor", "-2-", "5:42. explicit constructor", | 417 "3:42. destructor", "-2-", "4:42. explicit constructor", |
432 "operator== 1:42, 5:42", "5:42. destructor", "-3-", | 418 "operator== 1:42, 4:42", "4:42. destructor", "-3-", |
433 "6:17. explicit constructor", "7:17. move constructor (from 6:17)", | 419 "5:17. explicit constructor", "6:17. move constructor (from 5:17)", |
434 "operator== 0:17, 7:17", "7:17. destructor", "6:17. destructor", "-4-", | 420 "operator== 0:17, 6:17", "6:17. destructor", "5:17. destructor", "-4-", |
435 "8:8. default constructor", "operator== 1:42, 1:42", "8:8. destructor", | 421 "operator== 1:42, 1:42", "-5-", "2:17. destructor", "1:42. destructor", |
436 "-5-", "3:3. destructor", "2:17. destructor", "1:42. destructor", | |
437 "0:17. destructor"), | 422 "0:17. destructor"), |
438 *log); | 423 *log); |
439 } | 424 } |
440 | 425 |
441 TEST(OptionalTest, TestEquality) { | 426 TEST(OptionalTest, TestEquality) { |
442 auto log = Logger::Setup(); | 427 auto log = Logger::Setup(); |
443 { | 428 { |
444 Logger a(17), b(42); | 429 Logger a(17), b(42); |
445 Optional<Logger> ma1(a), ma2(a), mb(b), me1, me2; | 430 Optional<Logger> ma1(a), ma2(a), mb(b), me1, me2; |
446 log->push_back("---"); | 431 log->push_back("---"); |
447 EXPECT_EQ(ma1, ma1); | 432 EXPECT_EQ(ma1, ma1); |
448 EXPECT_EQ(ma1, ma2); | 433 EXPECT_EQ(ma1, ma2); |
449 EXPECT_NE(ma1, mb); | 434 EXPECT_NE(ma1, mb); |
450 EXPECT_NE(ma1, me1); | 435 EXPECT_NE(ma1, me1); |
451 EXPECT_EQ(me1, me1); | 436 EXPECT_EQ(me1, me1); |
452 EXPECT_EQ(me1, me2); | 437 EXPECT_EQ(me1, me2); |
453 log->push_back("---"); | 438 log->push_back("---"); |
454 } | 439 } |
455 EXPECT_EQ(V("0:17. explicit constructor", "1:42. explicit constructor", | 440 EXPECT_EQ( |
456 "2:17. copy constructor (from 0:17)", | 441 V("0:17. explicit constructor", "1:42. explicit constructor", |
457 "3:17. copy constructor (from 0:17)", | 442 "2:17. copy constructor (from 0:17)", |
458 "4:42. copy constructor (from 1:42)", "5:5. default constructor", | 443 "3:17. copy constructor (from 0:17)", |
459 "6:6. default constructor", "---", "operator== 2:17, 2:17", | 444 "4:42. copy constructor (from 1:42)", "---", "operator== 2:17, 2:17", |
460 "operator== 2:17, 3:17", "operator!= 2:17, 4:42", "---", | 445 "operator== 2:17, 3:17", "operator!= 2:17, 4:42", "---", |
461 "6:6. destructor", "5:5. destructor", "4:42. destructor", | 446 "4:42. destructor", "3:17. destructor", "2:17. destructor", |
462 "3:17. destructor", "2:17. destructor", "1:42. destructor", | 447 "1:42. destructor", "0:17. destructor"), |
463 "0:17. destructor"), | 448 *log); |
464 *log); | |
465 } | 449 } |
466 | 450 |
467 TEST(OptionalTest, TestSwap) { | 451 TEST(OptionalTest, TestSwap) { |
468 auto log = Logger::Setup(); | 452 auto log = Logger::Setup(); |
469 { | 453 { |
470 Logger a(17), b(42); | 454 Logger a(17), b(42); |
471 Optional<Logger> x1(a), x2(b), y1(a), y2, z1, z2; | 455 Optional<Logger> x1(a), x2(b), y1(a), y2, z1, z2; |
472 log->push_back("---"); | 456 log->push_back("---"); |
473 swap(x1, x2); // Swap full <-> full. | 457 swap(x1, x2); // Swap full <-> full. |
474 swap(y1, y2); // Swap full <-> empty. | 458 swap(y1, y2); // Swap full <-> empty. |
475 swap(z1, z2); // Swap empty <-> empty. | 459 swap(z1, z2); // Swap empty <-> empty. |
476 log->push_back("---"); | 460 log->push_back("---"); |
477 } | 461 } |
478 EXPECT_EQ(V("0:17. explicit constructor", "1:42. explicit constructor", | 462 EXPECT_EQ(V("0:17. explicit constructor", "1:42. explicit constructor", |
479 "2:17. copy constructor (from 0:17)", | 463 "2:17. copy constructor (from 0:17)", |
480 "3:42. copy constructor (from 1:42)", | 464 "3:42. copy constructor (from 1:42)", |
481 "4:17. copy constructor (from 0:17)", "5:5. default constructor", | 465 "4:17. copy constructor (from 0:17)", "---", "swap 2:42, 3:17", |
482 "6:6. default constructor", "7:7. default constructor", "---", | 466 "5:17. move constructor (from 4:17)", "4:17. destructor", "---", |
483 "swap 2:42, 3:17", "swap 4:5, 5:17", "swap 6:7, 7:6", "---", | 467 "5:17. destructor", "3:17. destructor", "2:42. destructor", |
484 "7:6. destructor", "6:7. destructor", "5:17. destructor", | |
485 "4:5. destructor", "3:17. destructor", "2:42. destructor", | |
486 "1:42. destructor", "0:17. destructor"), | 468 "1:42. destructor", "0:17. destructor"), |
487 *log); | 469 *log); |
488 } | 470 } |
489 | 471 |
490 } // namespace rtc | 472 } // namespace rtc |
OLD | NEW |