Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(223)

Side by Side Diff: base/memory/ref_counted_unittest.cc

Issue 1479473002: base: Use std::move() instead of Pass() for real movable types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: basepass: missing-include Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/memory/ref_counted.h ('k') | base/memory/scoped_ptr.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/ref_counted.h" 5 #include "base/memory/ref_counted.h"
6 6
7 #include "base/test/opaque_ref_counted.h" 7 #include "base/test/opaque_ref_counted.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace { 10 namespace {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 173
174 EXPECT_NE(p1, p2); 174 EXPECT_NE(p1, p2);
175 EXPECT_NE(p2, p1); 175 EXPECT_NE(p2, p1);
176 176
177 p2 = p1; 177 p2 = p1;
178 178
179 EXPECT_EQ(p1, p2); 179 EXPECT_EQ(p1, p2);
180 EXPECT_EQ(p2, p1); 180 EXPECT_EQ(p2, p1);
181 } 181 }
182 182
183 TEST(RefCountedUnitTest, SelfMoveAssignment) {
184 ScopedRefPtrCountBase::reset_count();
185
186 {
187 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase();
188 scoped_refptr<ScopedRefPtrCountBase> p(raw);
189 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
190 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
191
192 p = p.Pass();
193 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
194 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
195 EXPECT_EQ(raw, p.get());
196
197 // p goes out of scope.
198 }
199 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
200 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
201 }
202
203 TEST(RefCountedUnitTest, MoveAssignment1) { 183 TEST(RefCountedUnitTest, MoveAssignment1) {
204 ScopedRefPtrCountBase::reset_count(); 184 ScopedRefPtrCountBase::reset_count();
205 185
206 { 186 {
207 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase(); 187 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase();
208 scoped_refptr<ScopedRefPtrCountBase> p1(raw); 188 scoped_refptr<ScopedRefPtrCountBase> p1(raw);
209 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 189 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
210 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 190 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
211 191
212 { 192 {
213 scoped_refptr<ScopedRefPtrCountBase> p2; 193 scoped_refptr<ScopedRefPtrCountBase> p2;
214 194
215 p2 = p1.Pass(); 195 p2 = std::move(p1);
216 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 196 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
217 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 197 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
218 EXPECT_EQ(nullptr, p1.get()); 198 EXPECT_EQ(nullptr, p1.get());
219 EXPECT_EQ(raw, p2.get()); 199 EXPECT_EQ(raw, p2.get());
220 200
221 // p2 goes out of scope. 201 // p2 goes out of scope.
222 } 202 }
223 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 203 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
224 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 204 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
225 205
(...skipping 10 matching lines...) Expand all
236 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase(); 216 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase();
237 scoped_refptr<ScopedRefPtrCountBase> p1; 217 scoped_refptr<ScopedRefPtrCountBase> p1;
238 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 218 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
239 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 219 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
240 220
241 { 221 {
242 scoped_refptr<ScopedRefPtrCountBase> p2(raw); 222 scoped_refptr<ScopedRefPtrCountBase> p2(raw);
243 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 223 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
244 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 224 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
245 225
246 p1 = p2.Pass(); 226 p1 = std::move(p2);
247 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 227 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
248 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 228 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
249 EXPECT_EQ(raw, p1.get()); 229 EXPECT_EQ(raw, p1.get());
250 EXPECT_EQ(nullptr, p2.get()); 230 EXPECT_EQ(nullptr, p2.get());
251 231
252 // p2 goes out of scope. 232 // p2 goes out of scope.
253 } 233 }
254 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 234 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
255 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 235 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
256 236
(...skipping 10 matching lines...) Expand all
267 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase(); 247 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase();
268 scoped_refptr<ScopedRefPtrCountBase> p1(raw); 248 scoped_refptr<ScopedRefPtrCountBase> p1(raw);
269 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 249 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
270 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 250 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
271 251
272 { 252 {
273 scoped_refptr<ScopedRefPtrCountBase> p2(p1); 253 scoped_refptr<ScopedRefPtrCountBase> p2(p1);
274 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 254 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
275 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 255 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
276 256
277 p1 = p2.Pass(); 257 p1 = std::move(p2);
278 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 258 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
279 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 259 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
280 EXPECT_EQ(raw, p1.get()); 260 EXPECT_EQ(raw, p1.get());
281 EXPECT_EQ(nullptr, p2.get()); 261 EXPECT_EQ(nullptr, p2.get());
282 262
283 // p2 goes out of scope. 263 // p2 goes out of scope.
284 } 264 }
285 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 265 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
286 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 266 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
287 267
(...skipping 10 matching lines...) Expand all
298 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase(); 278 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase();
299 scoped_refptr<ScopedRefPtrCountBase> p1(raw); 279 scoped_refptr<ScopedRefPtrCountBase> p1(raw);
300 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 280 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
301 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 281 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
302 282
303 { 283 {
304 scoped_refptr<ScopedRefPtrCountBase> p2(p1); 284 scoped_refptr<ScopedRefPtrCountBase> p2(p1);
305 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 285 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
306 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 286 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
307 287
308 p2 = p1.Pass(); 288 p2 = std::move(p1);
309 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 289 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
310 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 290 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
311 EXPECT_EQ(nullptr, p1.get()); 291 EXPECT_EQ(nullptr, p1.get());
312 EXPECT_EQ(raw, p2.get()); 292 EXPECT_EQ(raw, p2.get());
313 293
314 // p2 goes out of scope. 294 // p2 goes out of scope.
315 } 295 }
316 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 296 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
317 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 297 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
318 298
(...skipping 11 matching lines...) Expand all
330 scoped_refptr<ScopedRefPtrCountBase> p1(raw1); 310 scoped_refptr<ScopedRefPtrCountBase> p1(raw1);
331 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 311 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
332 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 312 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
333 313
334 { 314 {
335 ScopedRefPtrCountBase *raw2 = new ScopedRefPtrCountBase(); 315 ScopedRefPtrCountBase *raw2 = new ScopedRefPtrCountBase();
336 scoped_refptr<ScopedRefPtrCountBase> p2(raw2); 316 scoped_refptr<ScopedRefPtrCountBase> p2(raw2);
337 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count()); 317 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count());
338 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 318 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
339 319
340 p1 = p2.Pass(); 320 p1 = std::move(p2);
341 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count()); 321 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count());
342 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 322 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
343 EXPECT_EQ(raw2, p1.get()); 323 EXPECT_EQ(raw2, p1.get());
344 EXPECT_EQ(nullptr, p2.get()); 324 EXPECT_EQ(nullptr, p2.get());
345 325
346 // p2 goes out of scope. 326 // p2 goes out of scope.
347 } 327 }
348 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count()); 328 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count());
349 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 329 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
350 330
(...skipping 16 matching lines...) Expand all
367 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count()); 347 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count());
368 348
369 { 349 {
370 ScopedRefPtrCountDerived *raw2 = new ScopedRefPtrCountDerived(); 350 ScopedRefPtrCountDerived *raw2 = new ScopedRefPtrCountDerived();
371 scoped_refptr<ScopedRefPtrCountDerived> p2(raw2); 351 scoped_refptr<ScopedRefPtrCountDerived> p2(raw2);
372 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count()); 352 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count());
373 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 353 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
374 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count()); 354 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count());
375 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count()); 355 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count());
376 356
377 p1 = p2.Pass(); 357 p1 = std::move(p2);
378 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count()); 358 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count());
379 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 359 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
380 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count()); 360 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count());
381 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count()); 361 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count());
382 EXPECT_EQ(raw2, p1.get()); 362 EXPECT_EQ(raw2, p1.get());
383 EXPECT_EQ(nullptr, p2.get()); 363 EXPECT_EQ(nullptr, p2.get());
384 364
385 // p2 goes out of scope. 365 // p2 goes out of scope.
386 } 366 }
387 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count()); 367 EXPECT_EQ(2, ScopedRefPtrCountBase::constructor_count());
(...skipping 12 matching lines...) Expand all
400 TEST(RefCountedUnitTest, MoveConstructor) { 380 TEST(RefCountedUnitTest, MoveConstructor) {
401 ScopedRefPtrCountBase::reset_count(); 381 ScopedRefPtrCountBase::reset_count();
402 382
403 { 383 {
404 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase(); 384 ScopedRefPtrCountBase *raw = new ScopedRefPtrCountBase();
405 scoped_refptr<ScopedRefPtrCountBase> p1(raw); 385 scoped_refptr<ScopedRefPtrCountBase> p1(raw);
406 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 386 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
407 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 387 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
408 388
409 { 389 {
410 scoped_refptr<ScopedRefPtrCountBase> p2(p1.Pass()); 390 scoped_refptr<ScopedRefPtrCountBase> p2(std::move(p1));
411 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 391 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
412 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 392 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
413 EXPECT_EQ(nullptr, p1.get()); 393 EXPECT_EQ(nullptr, p1.get());
414 EXPECT_EQ(raw, p2.get()); 394 EXPECT_EQ(raw, p2.get());
415 395
416 // p2 goes out of scope. 396 // p2 goes out of scope.
417 } 397 }
418 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 398 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
419 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 399 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
420 400
421 // p1 goes out of scope. 401 // p1 goes out of scope.
422 } 402 }
423 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 403 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
424 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 404 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
425 } 405 }
426 406
427 TEST(RefCountedUnitTest, MoveConstructorDerived) { 407 TEST(RefCountedUnitTest, MoveConstructorDerived) {
428 ScopedRefPtrCountBase::reset_count(); 408 ScopedRefPtrCountBase::reset_count();
429 ScopedRefPtrCountDerived::reset_count(); 409 ScopedRefPtrCountDerived::reset_count();
430 410
431 { 411 {
432 ScopedRefPtrCountDerived *raw1 = new ScopedRefPtrCountDerived(); 412 ScopedRefPtrCountDerived *raw1 = new ScopedRefPtrCountDerived();
433 scoped_refptr<ScopedRefPtrCountDerived> p1(raw1); 413 scoped_refptr<ScopedRefPtrCountDerived> p1(raw1);
434 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 414 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
435 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 415 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
436 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count()); 416 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count());
437 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count()); 417 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count());
438 418
439 { 419 {
440 scoped_refptr<ScopedRefPtrCountBase> p2(p1.Pass()); 420 scoped_refptr<ScopedRefPtrCountBase> p2(std::move(p1));
441 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 421 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
442 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count()); 422 EXPECT_EQ(0, ScopedRefPtrCountBase::destructor_count());
443 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count()); 423 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count());
444 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count()); 424 EXPECT_EQ(0, ScopedRefPtrCountDerived::destructor_count());
445 EXPECT_EQ(nullptr, p1.get()); 425 EXPECT_EQ(nullptr, p1.get());
446 EXPECT_EQ(raw1, p2.get()); 426 EXPECT_EQ(raw1, p2.get());
447 427
448 // p2 goes out of scope. 428 // p2 goes out of scope.
449 } 429 }
450 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 430 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
451 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 431 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
452 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count()); 432 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count());
453 EXPECT_EQ(1, ScopedRefPtrCountDerived::destructor_count()); 433 EXPECT_EQ(1, ScopedRefPtrCountDerived::destructor_count());
454 434
455 // p1 goes out of scope. 435 // p1 goes out of scope.
456 } 436 }
457 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count()); 437 EXPECT_EQ(1, ScopedRefPtrCountBase::constructor_count());
458 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count()); 438 EXPECT_EQ(1, ScopedRefPtrCountBase::destructor_count());
459 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count()); 439 EXPECT_EQ(1, ScopedRefPtrCountDerived::constructor_count());
460 EXPECT_EQ(1, ScopedRefPtrCountDerived::destructor_count()); 440 EXPECT_EQ(1, ScopedRefPtrCountDerived::destructor_count());
461 } 441 }
462 442
OLDNEW
« no previous file with comments | « base/memory/ref_counted.h ('k') | base/memory/scoped_ptr.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698