| Index: base/bind_unittest.cc
|
| diff --git a/base/bind_unittest.cc b/base/bind_unittest.cc
|
| index 0595ed3f714b6aa5face6ea1e16c7dee46d9e7af..daf8c1288840fa86e83eba603bd2f6219c350e13 100644
|
| --- a/base/bind_unittest.cc
|
| +++ b/base/bind_unittest.cc
|
| @@ -928,7 +928,7 @@ TEST_F(BindTest, ArgumentCopies) {
|
| copies = 0;
|
| assigns = 0;
|
| Bind(&VoidPolymorphic<CopyCounter>::Run).Run(counter);
|
| - EXPECT_EQ(1, copies);
|
| + EXPECT_EQ(2, copies);
|
| EXPECT_EQ(0, assigns);
|
|
|
| copies = 0;
|
| @@ -967,7 +967,20 @@ TEST_F(BindTest, ArgumentMoves) {
|
| // TODO(tzik): Support binding move-only type into a non-reference parameter
|
| // of a variant of Callback.
|
|
|
| - // TODO(tzik): Support move-only type forwarding on Callback::Run.
|
| + move_constructs = 0;
|
| + move_assigns = 0;
|
| + Bind(&VoidPolymorphic<MoveCounter>::Run)
|
| + .Run(MoveCounter(&move_constructs, &move_assigns));
|
| + EXPECT_EQ(1, move_constructs);
|
| + EXPECT_EQ(0, move_assigns);
|
| +
|
| + move_constructs = 0;
|
| + move_assigns = 0;
|
| + Bind(&VoidPolymorphic<MoveCounter>::Run)
|
| + .Run(MoveCounter(DerivedCopyMoveCounter(
|
| + nullptr, nullptr, &move_constructs, &move_assigns)));
|
| + EXPECT_EQ(2, move_constructs);
|
| + EXPECT_EQ(0, move_assigns);
|
| }
|
|
|
| // Argument constructor usage for non-reference movable-copyable
|
| @@ -1006,22 +1019,20 @@ TEST_F(BindTest, ArgumentCopiesAndMoves) {
|
| Bind(&VoidPolymorphic<CopyMoveCounter>::Run).Run(counter);
|
| EXPECT_EQ(1, copies);
|
| EXPECT_EQ(0, assigns);
|
| - EXPECT_EQ(0, move_constructs);
|
| + EXPECT_EQ(1, move_constructs);
|
| EXPECT_EQ(0, move_assigns);
|
|
|
| - // TODO(tzik): This case should be done in no copy and one move.
|
| copies = 0;
|
| assigns = 0;
|
| move_constructs = 0;
|
| move_assigns = 0;
|
| Bind(&VoidPolymorphic<CopyMoveCounter>::Run)
|
| .Run(CopyMoveCounter(&copies, &assigns, &move_constructs, &move_assigns));
|
| - EXPECT_EQ(1, copies);
|
| + EXPECT_EQ(0, copies);
|
| EXPECT_EQ(0, assigns);
|
| - EXPECT_EQ(0, move_constructs);
|
| + EXPECT_EQ(1, move_constructs);
|
| EXPECT_EQ(0, move_assigns);
|
|
|
| - // TODO(tzik): This case should be done in one copy and one move.
|
| DerivedCopyMoveCounter derived_counter(&copies, &assigns, &move_constructs,
|
| &move_assigns);
|
| copies = 0;
|
| @@ -1030,12 +1041,11 @@ TEST_F(BindTest, ArgumentCopiesAndMoves) {
|
| move_assigns = 0;
|
| Bind(&VoidPolymorphic<CopyMoveCounter>::Run)
|
| .Run(CopyMoveCounter(derived_counter));
|
| - EXPECT_EQ(2, copies);
|
| + EXPECT_EQ(1, copies);
|
| EXPECT_EQ(0, assigns);
|
| - EXPECT_EQ(0, move_constructs);
|
| + EXPECT_EQ(1, move_constructs);
|
| EXPECT_EQ(0, move_assigns);
|
|
|
| - // TODO(tzik): This case should be done in no copy and two move.
|
| copies = 0;
|
| assigns = 0;
|
| move_constructs = 0;
|
| @@ -1043,9 +1053,9 @@ TEST_F(BindTest, ArgumentCopiesAndMoves) {
|
| Bind(&VoidPolymorphic<CopyMoveCounter>::Run)
|
| .Run(CopyMoveCounter(DerivedCopyMoveCounter(
|
| &copies, &assigns, &move_constructs, &move_assigns)));
|
| - EXPECT_EQ(1, copies);
|
| + EXPECT_EQ(0, copies);
|
| EXPECT_EQ(0, assigns);
|
| - EXPECT_EQ(1, move_constructs);
|
| + EXPECT_EQ(2, move_constructs);
|
| EXPECT_EQ(0, move_assigns);
|
| }
|
|
|
|
|