| 616 | |
| 617 | template <typename T> |
| 618 | void TestApplyLvalueCopyImpl() { |
| 619 | size_t numCopies = 0; |
| 620 | TCopyCounter copyCounter(&numCopies); |
| 621 | |
| 622 | auto promise = MakePromise<T>(); |
| 623 | |
| 624 | auto func = [copyCounter = std::move(copyCounter)] (const auto&) {}; |
| 625 | const auto future = promise.GetFuture().Apply(func); |
| 626 | |
| 627 | if constexpr (std::is_same_v<T, void>) { |
| 628 | promise.SetValue(); |
| 629 | } else { |
| 630 | promise.SetValue(T()); |
| 631 | } |
| 632 | |
| 633 | future.GetValueSync(); |
| 634 | |
| 635 | UNIT_ASSERT_VALUES_EQUAL(numCopies, 1); |
| 636 | } |
| 637 | |
| 638 | Y_UNIT_TEST(ApplyLvalueCopy) { |
| 639 | TestApplyLvalueCopyImpl<void>(); |