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

Side by Side Diff: third_party/WebKit/Source/wtf/FunctionalTest.cpp

Issue 2092093002: Make WTF::Function be a base::Callback wrapper (5/5) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@03_wrap
Patch Set: rebase Created 4 years, 5 months 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 524
525 int takeCountCopyAsValue(CountCopy counter) 525 int takeCountCopyAsValue(CountCopy counter)
526 { 526 {
527 return counter.copies(); 527 return counter.copies();
528 } 528 }
529 529
530 TEST(FunctionalTest, CountCopiesOfBoundArguments) 530 TEST(FunctionalTest, CountCopiesOfBoundArguments)
531 { 531 {
532 CountCopy lvalue; 532 CountCopy lvalue;
533 std::unique_ptr<Function<int()>> bound = bind(takeCountCopyAsConstReference, lvalue); 533 std::unique_ptr<Function<int()>> bound = bind(takeCountCopyAsConstReference, lvalue);
534 EXPECT_EQ(1, (*bound)()); // unwrapping. 534 EXPECT_EQ(2, (*bound)()); // wrapping and unwrapping.
535 535
536 bound = bind(takeCountCopyAsConstReference, CountCopy()); // Rvalue. 536 bound = bind(takeCountCopyAsConstReference, CountCopy()); // Rvalue.
537 EXPECT_EQ(1, (*bound)()); 537 EXPECT_EQ(2, (*bound)());
538 538
539 bound = bind(takeCountCopyAsValue, lvalue); 539 bound = bind(takeCountCopyAsValue, lvalue);
540 EXPECT_EQ(2, (*bound)()); // unwrapping and copying in the final function ar gument. 540 EXPECT_EQ(3, (*bound)()); // wrapping, unwrapping and copying in the final f unction argument.
541 541
542 bound = bind(takeCountCopyAsValue, CountCopy()); 542 bound = bind(takeCountCopyAsValue, CountCopy());
543 EXPECT_EQ(2, (*bound)()); 543 EXPECT_EQ(3, (*bound)());
544 } 544 }
545 545
546 TEST(FunctionalTest, MoveUnboundArgumentsByRvalueReference) 546 TEST(FunctionalTest, MoveUnboundArgumentsByRvalueReference)
547 { 547 {
548 std::unique_ptr<Function<int(MoveOnly&&)>> boundSingle = bind(singleMoveOnly ByRvalueReference); 548 std::unique_ptr<Function<int(MoveOnly&&)>> boundSingle = bind(singleMoveOnly ByRvalueReference);
549 EXPECT_EQ(1, (*boundSingle)(MoveOnly(1))); 549 EXPECT_EQ(1, (*boundSingle)(MoveOnly(1)));
550 EXPECT_EQ(42, (*boundSingle)(MoveOnly(42))); 550 EXPECT_EQ(42, (*boundSingle)(MoveOnly(42)));
551 551
552 std::unique_ptr<Function<int(MoveOnly&&, MoveOnly&&, MoveOnly&&)>> boundTrip le = bind(tripleMoveOnlysByRvalueReferences); 552 std::unique_ptr<Function<int(MoveOnly&&, MoveOnly&&, MoveOnly&&)>> boundTrip le = bind(tripleMoveOnlysByRvalueReferences);
553 EXPECT_EQ(6, (*boundTriple)(MoveOnly(1), MoveOnly(2), MoveOnly(3))); 553 EXPECT_EQ(6, (*boundTriple)(MoveOnly(1), MoveOnly(2), MoveOnly(3)));
554 EXPECT_EQ(666, (*boundTriple)(MoveOnly(111), MoveOnly(222), MoveOnly(333))); 554 EXPECT_EQ(666, (*boundTriple)(MoveOnly(111), MoveOnly(222), MoveOnly(333)));
555 555
556 std::unique_ptr<Function<int(MoveOnly)>> boundSingleByValue = bind(singleMov eOnlyByValue); 556 std::unique_ptr<Function<int(MoveOnly)>> boundSingleByValue = bind(singleMov eOnlyByValue);
557 EXPECT_EQ(1, (*boundSingleByValue)(MoveOnly(1))); 557 EXPECT_EQ(1, (*boundSingleByValue)(MoveOnly(1)));
558 558
559 std::unique_ptr<Function<int(MoveOnly, MoveOnly, MoveOnly)>> boundTripleByVa lue = bind(tripleMoveOnlysByValues); 559 std::unique_ptr<Function<int(MoveOnly, MoveOnly, MoveOnly)>> boundTripleByVa lue = bind(tripleMoveOnlysByValues);
560 EXPECT_EQ(6, (*boundTripleByValue)(MoveOnly(1), MoveOnly(2), MoveOnly(3))); 560 EXPECT_EQ(6, (*boundTripleByValue)(MoveOnly(1), MoveOnly(2), MoveOnly(3)));
561 } 561 }
562 562
563 TEST(FunctionalTest, CountCopiesOfUnboundArguments) 563 TEST(FunctionalTest, CountCopiesOfUnboundArguments)
564 { 564 {
565 CountCopy lvalue; 565 CountCopy lvalue;
566 std::unique_ptr<Function<int(const CountCopy&)>> bound1 = bind(takeCountCopy AsConstReference); 566 std::unique_ptr<Function<int(const CountCopy&)>> bound1 = bind(takeCountCopy AsConstReference);
567 EXPECT_EQ(0, (*bound1)(lvalue)); // No copies! 567 EXPECT_EQ(0, (*bound1)(lvalue)); // No copies!
568 EXPECT_EQ(0, (*bound1)(CountCopy())); 568 EXPECT_EQ(0, (*bound1)(CountCopy()));
569 569
570 std::unique_ptr<Function<int(CountCopy)>> bound2 = bind(takeCountCopyAsValue ); 570 std::unique_ptr<Function<int(CountCopy)>> bound2 = bind(takeCountCopyAsValue );
571 EXPECT_EQ(2, (*bound2)(lvalue)); // At PartBoundFunctionImpl::operator() and at the destination function. 571 EXPECT_EQ(3, (*bound2)(lvalue)); // At Function::operator(), at Callback::Ru n() and at the destination function.
572 EXPECT_LE((*bound2)(CountCopy()), 2); // Compiler is allowed to optimize one copy away if the argument is rvalue. 572 EXPECT_LE((*bound2)(CountCopy()), 2); // Compiler is allowed to optimize one copy away if the argument is rvalue.
573 } 573 }
574 574
575 TEST(FunctionalTest, WeakPtr) 575 TEST(FunctionalTest, WeakPtr)
576 { 576 {
577 HasWeakPtrSupport obj; 577 HasWeakPtrSupport obj;
578 int counter = 0; 578 int counter = 0;
579 std::unique_ptr<WTF::SameThreadClosure> bound = WTF::bind(&HasWeakPtrSupport ::increment, obj.createWeakPtr(), WTF::unretained(&counter)); 579 std::unique_ptr<WTF::SameThreadClosure> bound = WTF::bind(&HasWeakPtrSupport ::increment, obj.createWeakPtr(), WTF::unretained(&counter));
580 580
581 (*bound)(); 581 (*bound)();
582 EXPECT_EQ(1, counter); 582 EXPECT_EQ(1, counter);
583 583
584 obj.revokeAll(); 584 obj.revokeAll();
585 (*bound)(); 585 (*bound)();
586 EXPECT_EQ(1, counter); 586 EXPECT_EQ(1, counter);
587 } 587 }
588 588
589 } // anonymous namespace 589 } // anonymous namespace
590 590
591 } // namespace WTF 591 } // namespace WTF
OLDNEW
« third_party/WebKit/Source/wtf/Functional.h ('K') | « third_party/WebKit/Source/wtf/Functional.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698