summaryrefslogtreecommitdiff
path: root/src/mongo/util/future_test_future_void.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/future_test_future_void.cpp')
-rw-r--r--src/mongo/util/future_test_future_void.cpp508
1 files changed, 233 insertions, 275 deletions
diff --git a/src/mongo/util/future_test_future_void.cpp b/src/mongo/util/future_test_future_void.cpp
index c9e9f5dfa51..a8e0c9f3515 100644
--- a/src/mongo/util/future_test_future_void.cpp
+++ b/src/mongo/util/future_test_future_void.cpp
@@ -40,88 +40,85 @@
namespace mongo {
namespace {
+template <DoExecutorFuture doExecutorFuture = kDoExecutorFuture, typename F>
+void runTests(F&& f) {
+ FUTURE_SUCCESS_TEST<doExecutorFuture>([] {}, std::forward<F>(f));
+}
+
+template <DoExecutorFuture doExecutorFuture = kDoExecutorFuture, typename F>
+void runFailureTests(F&& f) {
+ FUTURE_FAIL_TEST<void, doExecutorFuture>(std::forward<F>(f));
+}
+
TEST(Future_Void, Success_getLvalue) {
- FUTURE_SUCCESS_TEST([] {}, [](/*Future<void>*/ auto&& fut) { fut.get(); });
+ runTests([](auto&& fut) { fut.get(); });
}
TEST(Future_Void, Success_getConstLvalue) {
- FUTURE_SUCCESS_TEST([] {}, [](const /*Future<void>*/ auto& fut) { fut.get(); });
+ runTests([](const auto& fut) { fut.get(); });
}
TEST(Future_Void, Success_getRvalue) {
- FUTURE_SUCCESS_TEST([] {}, [](/*Future<void>*/ auto&& fut) { std::move(fut).get(); });
+ runTests([](auto&& fut) { std::move(fut).get(); });
}
TEST(Future_Void, Success_getNothrowLvalue) {
- FUTURE_SUCCESS_TEST(
- [] {}, [](/*Future<void>*/ auto&& fut) { ASSERT_EQ(fut.getNoThrow(), Status::OK()); });
+ runTests([](auto&& fut) { ASSERT_EQ(fut.getNoThrow(), Status::OK()); });
}
TEST(Future_Void, Success_getNothrowConstLvalue) {
- FUTURE_SUCCESS_TEST(
- [] {}, [](const /*Future<void>*/ auto& fut) { ASSERT_EQ(fut.getNoThrow(), Status::OK()); });
+ runTests([](const auto& fut) { ASSERT_EQ(fut.getNoThrow(), Status::OK()); });
}
TEST(Future_Void, Success_getNothrowRvalue) {
- FUTURE_SUCCESS_TEST(
- [] {},
- [](/*Future<void>*/ auto&& fut) { ASSERT_EQ(std::move(fut).getNoThrow(), Status::OK()); });
+ runTests([](auto&& fut) { ASSERT_EQ(std::move(fut).getNoThrow(), Status::OK()); });
}
TEST(Future_Void, Success_semi_get) {
- FUTURE_SUCCESS_TEST([] {}, [](/*Future<void>*/ auto&& fut) { std::move(fut).semi().get(); });
+ runTests([](auto&& fut) { std::move(fut).semi().get(); });
}
TEST(Future_Void, Success_getAsync) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- auto pf = makePromiseFuture<void>();
- std::move(fut).getAsync(
- [outside = std::move(pf.promise)](Status status) mutable {
- ASSERT_OK(status);
- outside.emplaceValue();
- });
- ASSERT_EQ(std::move(pf.future).getNoThrow(), Status::OK());
- });
+ runTests([](auto&& fut) {
+ auto pf = makePromiseFuture<void>();
+ std::move(fut).getAsync([outside = std::move(pf.promise)](Status status) mutable {
+ ASSERT_OK(status);
+ outside.emplaceValue();
+ });
+ ASSERT_EQ(std::move(pf.future).getNoThrow(), Status::OK());
+ });
}
TEST(Future_Void, Fail_getLvalue) {
- FUTURE_FAIL_TEST<void>(
- [](/*Future<void>*/ auto&& fut) { ASSERT_THROWS_failStatus(fut.get()); });
+ runFailureTests([](auto&& fut) { ASSERT_THROWS_failStatus(fut.get()); });
}
TEST(Future_Void, Fail_getConstLvalue) {
- FUTURE_FAIL_TEST<void>(
- [](const /*Future<void>*/ auto& fut) { ASSERT_THROWS_failStatus(fut.get()); });
+ runFailureTests([](const auto& fut) { ASSERT_THROWS_failStatus(fut.get()); });
}
TEST(Future_Void, Fail_getRvalue) {
- FUTURE_FAIL_TEST<void>(
- [](/*Future<void>*/ auto&& fut) { ASSERT_THROWS_failStatus(std::move(fut).get()); });
+ runFailureTests([](auto&& fut) { ASSERT_THROWS_failStatus(std::move(fut).get()); });
}
TEST(Future_Void, Fail_getNothrowLvalue) {
- FUTURE_FAIL_TEST<void>(
- [](/*Future<void>*/ auto&& fut) { ASSERT_EQ(fut.getNoThrow(), failStatus()); });
+ runFailureTests([](auto&& fut) { ASSERT_EQ(fut.getNoThrow(), failStatus()); });
}
TEST(Future_Void, Fail_getNothrowConstLvalue) {
- FUTURE_FAIL_TEST<void>(
- [](const /*Future<void>*/ auto& fut) { ASSERT_EQ(fut.getNoThrow(), failStatus()); });
+ runFailureTests([](const auto& fut) { ASSERT_EQ(fut.getNoThrow(), failStatus()); });
}
TEST(Future_Void, Fail_getNothrowRvalue) {
- FUTURE_FAIL_TEST<void>(
- [](/*Future<void>*/ auto&& fut) { ASSERT_EQ(std::move(fut).getNoThrow(), failStatus()); });
+ runFailureTests([](auto&& fut) { ASSERT_EQ(std::move(fut).getNoThrow(), failStatus()); });
}
TEST(Future_Void, Fail_semi_get) {
- FUTURE_FAIL_TEST<void>(
- [](/*Future<void>*/ auto&& fut) { ASSERT_THROWS_failStatus(std::move(fut).semi().get()); });
+ runFailureTests([](auto&& fut) { ASSERT_THROWS_failStatus(std::move(fut).semi().get()); });
}
TEST(Future_Void, Fail_getAsync) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
auto pf = makePromiseFuture<void>();
std::move(fut).getAsync([outside = std::move(pf.promise)](Status status) mutable {
ASSERT(!status.isOK());
@@ -132,20 +129,19 @@ TEST(Future_Void, Fail_getAsync) {
}
TEST(Future_Void, Success_isReady) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- const auto id = stdx::this_thread::get_id();
- while (!fut.isReady()) {
- }
- std::move(fut).getAsync([&](Status status) {
- ASSERT_EQ(stdx::this_thread::get_id(), id);
- ASSERT_OK(status);
- });
- });
+ runTests([](auto&& fut) {
+ const auto id = stdx::this_thread::get_id();
+ while (!fut.isReady()) {
+ }
+ std::move(fut).getAsync([&](Status status) {
+ ASSERT_EQ(stdx::this_thread::get_id(), id);
+ ASSERT_OK(status);
+ });
+ });
}
TEST(Future_Void, Fail_isReady) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
const auto id = stdx::this_thread::get_id();
while (!fut.isReady()) {
}
@@ -168,91 +164,71 @@ TEST(Future_Void, isReady_TSAN_OK) {
}
TEST(Future_Void, Success_thenSimple) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut).then([]() { return 3; }).get(), 3);
- });
+ runTests([](auto&& fut) { ASSERT_EQ(std::move(fut).then([]() { return 3; }).get(), 3); });
}
TEST(Future_Void, Success_thenVoid) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut).then([] {}).then([] { return 3; }).get(), 3);
- });
+ runTests(
+ [](auto&& fut) { ASSERT_EQ(std::move(fut).then([] {}).then([] { return 3; }).get(), 3); });
}
TEST(Future_Void, Success_thenStatus) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut).then([] {}).then([] { return 3; }).get(), 3);
- });
+ runTests(
+ [](auto&& fut) { ASSERT_EQ(std::move(fut).then([] {}).then([] { return 3; }).get(), 3); });
}
TEST(Future_Void, Success_thenError_Status) {
- FUTURE_SUCCESS_TEST(
- [] {},
- [](/*Future<void>*/ auto&& fut) {
- auto fut2 =
- std::move(fut).then([]() { return Status(ErrorCodes::BadValue, "oh no!"); });
- static_assert(future_details::isFutureLike<decltype(fut2)>);
- static_assert(std::is_same_v<typename decltype(fut2)::value_type, void>);
- ASSERT_EQ(fut2.getNoThrow(), ErrorCodes::BadValue);
- });
+ runTests([](auto&& fut) {
+ auto fut2 = std::move(fut).then([]() { return Status(ErrorCodes::BadValue, "oh no!"); });
+ static_assert(future_details::isFutureLike<decltype(fut2)>);
+ static_assert(std::is_same_v<typename decltype(fut2)::value_type, void>);
+ ASSERT_EQ(fut2.getNoThrow(), ErrorCodes::BadValue);
+ });
}
TEST(Future_Void, Success_thenError_StatusWith) {
- FUTURE_SUCCESS_TEST(
- [] {},
- [](/*Future<void>*/ auto&& fut) {
- auto fut2 = std::move(fut).then(
- []() { return StatusWith<double>(ErrorCodes::BadValue, "oh no!"); });
- static_assert(future_details::isFutureLike<decltype(fut2)>);
- static_assert(std::is_same_v<typename decltype(fut2)::value_type, double>);
- ASSERT_EQ(fut2.getNoThrow(), ErrorCodes::BadValue);
- });
+ runTests([](auto&& fut) {
+ auto fut2 = std::move(fut).then(
+ []() { return StatusWith<double>(ErrorCodes::BadValue, "oh no!"); });
+ static_assert(future_details::isFutureLike<decltype(fut2)>);
+ static_assert(std::is_same_v<typename decltype(fut2)::value_type, double>);
+ ASSERT_EQ(fut2.getNoThrow(), ErrorCodes::BadValue);
+ });
}
TEST(Future_Void, Success_thenFutureImmediate) {
- FUTURE_SUCCESS_TEST(
- [] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut).then([]() { return Future<int>::makeReady(3); }).get(), 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut).then([]() { return Future<int>::makeReady(3); }).get(), 3);
+ });
}
TEST(Future_Void, Success_thenFutureReady) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .then([]() {
- auto pf = makePromiseFuture<int>();
- pf.promise.emplaceValue(3);
- return std::move(pf.future);
- })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .then([]() {
+ auto pf = makePromiseFuture<int>();
+ pf.promise.emplaceValue(3);
+ return std::move(pf.future);
+ })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Success_thenFutureAsync) {
- FUTURE_SUCCESS_TEST(
- [] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut).then([]() { return async([] { return 3; }); }).get(), 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut).then([]() { return async([] { return 3; }); }).get(), 3);
+ });
}
TEST(Future_Void, Success_thenSemiFutureAsync) {
- FUTURE_SUCCESS_TEST(
- [] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut).then([]() { return async([] { return 3; }).semi(); }).get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut).then([]() { return async([] { return 3; }).semi(); }).get(), 3);
+ });
}
TEST(Future_Void, Fail_thenSimple) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
.then([]() {
FAIL("then() callback was called");
@@ -264,7 +240,7 @@ TEST(Future_Void, Fail_thenSimple) {
}
TEST(Future_Void, Fail_thenFutureAsync) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
.then([]() {
FAIL("then() callback was called");
@@ -276,35 +252,33 @@ TEST(Future_Void, Fail_thenFutureAsync) {
}
TEST(Future_Void, Success_onErrorSimple) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(
- std::move(fut)
- .onError([](Status) { FAIL("onError() callback was called"); })
- .then([] { return 3; })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(
+ std::move(fut)
+ .onError([](Status) FTU_LAMBDA_R(void) { FAIL("onError() callback was called"); })
+ .then([] { return 3; })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Success_onErrorFutureAsync) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .onError([](Status) {
- FAIL("onError() callback was called");
- return Future<void>();
- })
- .then([] { return 3; })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .onError([](Status) FTU_LAMBDA_R(Future<void>) {
+ FAIL("onError() callback was called");
+ return Future<void>();
+ })
+ .then([] { return 3; })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Fail_onErrorSimple) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
- .onError([](Status s) { ASSERT_EQ(s, failStatus()); })
+ .onError([](Status s) FTU_LAMBDA_R(void) { ASSERT_EQ(s, failStatus()); })
.then([] { return 3; })
.getNoThrow(),
3);
@@ -312,7 +286,7 @@ TEST(Future_Void, Fail_onErrorSimple) {
}
TEST(Future_Void, Fail_onErrorError_throw) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
auto fut2 = std::move(fut).onError([](Status s) {
ASSERT_EQ(s, failStatus());
uasserted(ErrorCodes::BadValue, "oh no!");
@@ -322,8 +296,8 @@ TEST(Future_Void, Fail_onErrorError_throw) {
}
TEST(Future_Void, Fail_onErrorError_Status) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
- auto fut2 = std::move(fut).onError([](Status s) {
+ runFailureTests([](auto&& fut) {
+ auto fut2 = std::move(fut).onError([](Status s) FTU_LAMBDA_R(Status) {
ASSERT_EQ(s, failStatus());
return Status(ErrorCodes::BadValue, "oh no!");
});
@@ -332,9 +306,9 @@ TEST(Future_Void, Fail_onErrorError_Status) {
}
TEST(Future_Void, Fail_onErrorFutureImmediate) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
- .onError([](Status s) {
+ .onError([](Status s) FTU_LAMBDA_R(Future<void>) {
ASSERT_EQ(s, failStatus());
return Future<void>::makeReady();
})
@@ -345,9 +319,9 @@ TEST(Future_Void, Fail_onErrorFutureImmediate) {
}
TEST(Future_Void, Fail_onErrorFutureReady) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
- .onError([](Status s) {
+ .onError([](Status s) FTU_LAMBDA_R(Future<void>) {
ASSERT_EQ(s, failStatus());
auto pf = makePromiseFuture<void>();
pf.promise.emplaceValue();
@@ -360,9 +334,9 @@ TEST(Future_Void, Fail_onErrorFutureReady) {
}
TEST(Future_Void, Fail_onErrorFutureAsync) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
- .onError([&](Status s) {
+ .onError([&](Status s) FTU_LAMBDA_R(Future<void>) {
ASSERT_EQ(s, failStatus());
return async([] {});
})
@@ -373,24 +347,23 @@ TEST(Future_Void, Fail_onErrorFutureAsync) {
}
TEST(Future_Void, Success_onErrorCode) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .template onError<ErrorCodes::InternalError>([](Status) {
- FAIL("onError<code>() callback was called");
- })
- .then([] { return 3; })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .template onError<ErrorCodes::InternalError>([](Status) FTU_LAMBDA_R(void) {
+ FAIL("onError<code>() callback was called");
+ })
+ .then([] { return 3; })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Fail_onErrorCodeMatch) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
bool called = false;
auto res =
std::move(fut)
- .onError([](Status s) {
+ .onError([](Status s) FTU_LAMBDA_R(Status) {
ASSERT_EQ(s, failStatus());
return Status(ErrorCodes::InternalError, "");
})
@@ -403,10 +376,10 @@ TEST(Future_Void, Fail_onErrorCodeMatch) {
}
TEST(Future_Void, Fail_onErrorCodeMatchFuture) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
bool called = false;
auto res = std::move(fut)
- .onError([](Status s) {
+ .onError([](Status s) FTU_LAMBDA_R(Status) {
ASSERT_EQ(s, failStatus());
return Status(ErrorCodes::InternalError, "");
})
@@ -422,11 +395,11 @@ TEST(Future_Void, Fail_onErrorCodeMatchFuture) {
}
TEST(Future_Void, Fail_onErrorCodeMismatch) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
.template onError<ErrorCodes::InternalError>(
- [](Status s) { FAIL("Why was this called?") << s; })
- .onError([](Status s) { ASSERT_EQ(s, failStatus()); })
+ [](Status s) FTU_LAMBDA_R(void) { FAIL("Why was this called?") << s; })
+ .onError([](Status s) FTU_LAMBDA_R(void) { ASSERT_EQ(s, failStatus()); })
.then([] { return 3; })
.getNoThrow(),
3);
@@ -434,51 +407,45 @@ TEST(Future_Void, Fail_onErrorCodeMismatch) {
}
TEST(Future_Void, Success_tap) {
- FUTURE_SUCCESS_TEST<kNoExecutorFuture_needsTap>(
- [] {},
- [](/*Future<void>*/ auto&& fut) {
- bool tapCalled = false;
- ASSERT_EQ(
- std::move(fut).tap([&tapCalled] { tapCalled = true; }).then([] { return 3; }).get(),
- 3);
- ASSERT(tapCalled);
- });
+ runTests<kNoExecutorFuture_needsTap>([](auto&& fut) {
+ bool tapCalled = false;
+ ASSERT_EQ(
+ std::move(fut).tap([&tapCalled] { tapCalled = true; }).then([] { return 3; }).get(), 3);
+ ASSERT(tapCalled);
+ });
}
TEST(Future_Void, Success_tapError) {
- FUTURE_SUCCESS_TEST<kNoExecutorFuture_needsTap>(
- [] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .tapError([](Status s) { FAIL("tapError() callback was called"); })
- .then([] { return 3; })
- .get(),
- 3);
- });
+ runTests<kNoExecutorFuture_needsTap>([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .tapError([](Status s)
+ FTU_LAMBDA_R(void) { FAIL("tapError() callback was called"); })
+ .then([] { return 3; })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Success_tapAll_StatusWith) {
- FUTURE_SUCCESS_TEST<kNoExecutorFuture_needsTap>([] {},
- [](/*Future<void>*/ auto&& fut) {
- bool tapCalled = false;
- ASSERT_EQ(
- std::move(fut)
- .tapAll([&tapCalled](Status s) {
- ASSERT_OK(s);
- tapCalled = true;
- })
- .then([] { return 3; })
- .get(),
- 3);
- ASSERT(tapCalled);
- });
+ runTests<kNoExecutorFuture_needsTap>([](auto&& fut) {
+ bool tapCalled = false;
+ ASSERT_EQ(std::move(fut)
+ .tapAll([&tapCalled](Status s) {
+ ASSERT_OK(s);
+ tapCalled = true;
+ })
+ .then([] { return 3; })
+ .get(),
+ 3);
+ ASSERT(tapCalled);
+ });
}
TEST(Future_Void, Fail_tap) {
- FUTURE_FAIL_TEST<void, kNoExecutorFuture_needsTap>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests<kNoExecutorFuture_needsTap>([](auto&& fut) {
ASSERT_EQ(std::move(fut)
.tap([] { FAIL("tap() callback was called"); })
- .onError([](Status s) { ASSERT_EQ(s, failStatus()); })
+ .onError([](Status s) FTU_LAMBDA_R(void) { ASSERT_EQ(s, failStatus()); })
.then([] { return 3; })
.get(),
3);
@@ -486,14 +453,14 @@ TEST(Future_Void, Fail_tap) {
}
TEST(Future_Void, Fail_tapError) {
- FUTURE_FAIL_TEST<void, kNoExecutorFuture_needsTap>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests<kNoExecutorFuture_needsTap>([](auto&& fut) {
bool tapCalled = false;
ASSERT_EQ(std::move(fut)
.tapError([&tapCalled](Status s) {
ASSERT_EQ(s, failStatus());
tapCalled = true;
})
- .onError([](Status s) { ASSERT_EQ(s, failStatus()); })
+ .onError([](Status s) FTU_LAMBDA_R(void) { ASSERT_EQ(s, failStatus()); })
.then([] { return 3; })
.get(),
3);
@@ -502,14 +469,14 @@ TEST(Future_Void, Fail_tapError) {
}
TEST(Future_Void, Fail_tapAll_StatusWith) {
- FUTURE_FAIL_TEST<void, kNoExecutorFuture_needsTap>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests<kNoExecutorFuture_needsTap>([](auto&& fut) {
bool tapCalled = false;
ASSERT_EQ(std::move(fut)
.tapAll([&tapCalled](Status sw) {
ASSERT_EQ(sw, failStatus());
tapCalled = true;
})
- .onError([](Status s) { ASSERT_EQ(s, failStatus()); })
+ .onError([](Status s) FTU_LAMBDA_R(void) { ASSERT_EQ(s, failStatus()); })
.then([] { return 3; })
.get(),
3);
@@ -518,102 +485,93 @@ TEST(Future_Void, Fail_tapAll_StatusWith) {
}
TEST(Future_Void, Success_onCompletionSimple) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .onCompletion([](Status status) {
- ASSERT_OK(status);
- return 3;
- })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .onCompletion([](Status status) FTU_LAMBDA_R(int) {
+ ASSERT_OK(status);
+ return 3;
+ })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Success_onCompletionVoid) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .onCompletion([](Status status) { ASSERT_OK(status); })
- .then([]() { return 3; })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .onCompletion([](Status status) FTU_LAMBDA_R(void) { ASSERT_OK(status); })
+ .then([]() { return 3; })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Success_onCompletionError_Status) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- auto fut2 = std::move(fut).onCompletion([](Status status) {
- ASSERT_OK(status);
- return Status(ErrorCodes::BadValue, "oh no!");
- });
- static_assert(future_details::isFutureLike<decltype(fut2)>);
- static_assert(
- std::is_same_v<typename decltype(fut2)::value_type, void>);
- ASSERT_EQ(fut2.getNoThrow(), ErrorCodes::BadValue);
- });
+ runTests([](auto&& fut) {
+ auto fut2 = std::move(fut).onCompletion([](Status status) FTU_LAMBDA_R(Status) {
+ ASSERT_OK(status);
+ return Status(ErrorCodes::BadValue, "oh no!");
+ });
+ static_assert(future_details::isFutureLike<decltype(fut2)>);
+ static_assert(std::is_same_v<typename decltype(fut2)::value_type, void>);
+ ASSERT_EQ(fut2.getNoThrow(), ErrorCodes::BadValue);
+ });
}
TEST(Future_Void, Success_onCompletionError_StatusWith) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- auto fut2 = std::move(fut).onCompletion([](Status status) {
- ASSERT_OK(status);
- return StatusWith<double>(ErrorCodes::BadValue, "oh no!");
- });
- static_assert(future_details::isFutureLike<decltype(fut2)>);
- static_assert(
- std::is_same_v<typename decltype(fut2)::value_type, double>);
- ASSERT_EQ(fut2.getNoThrow(), ErrorCodes::BadValue);
- });
+ runTests([](auto&& fut) {
+ auto fut2 = std::move(fut).onCompletion([](Status status) FTU_LAMBDA_R(StatusWith<double>) {
+ ASSERT_OK(status);
+ return StatusWith<double>(ErrorCodes::BadValue, "oh no!");
+ });
+ static_assert(future_details::isFutureLike<decltype(fut2)>);
+ static_assert(std::is_same_v<typename decltype(fut2)::value_type, double>);
+ ASSERT_EQ(fut2.getNoThrow(), ErrorCodes::BadValue);
+ });
}
TEST(Future_Void, Success_onCompletionFutureImmediate) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .onCompletion([](Status status) {
- ASSERT_OK(status);
- return Future<int>::makeReady(3);
- })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .onCompletion([](Status status) FTU_LAMBDA_R(Future<int>) {
+ ASSERT_OK(status);
+ return Future<int>::makeReady(3);
+ })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Success_onCompletionFutureReady) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .onCompletion([](Status status) {
- ASSERT_OK(status);
- auto pf = makePromiseFuture<int>();
- pf.promise.emplaceValue(3);
- return std::move(pf.future);
- })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .onCompletion([](Status status) FTU_LAMBDA_R(Future<int>) {
+ ASSERT_OK(status);
+ auto pf = makePromiseFuture<int>();
+ pf.promise.emplaceValue(3);
+ return std::move(pf.future);
+ })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Success_onCompletionFutureAsync) {
- FUTURE_SUCCESS_TEST([] {},
- [](/*Future<void>*/ auto&& fut) {
- ASSERT_EQ(std::move(fut)
- .onCompletion([](Status status) {
- ASSERT_OK(status);
- return async([] { return 3; });
- })
- .get(),
- 3);
- });
+ runTests([](auto&& fut) {
+ ASSERT_EQ(std::move(fut)
+ .onCompletion([](Status status) {
+ ASSERT_OK(status);
+ return async([] { return 3; });
+ })
+ .get(),
+ 3);
+ });
}
TEST(Future_Void, Fail_onCompletionSimple) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
- .onCompletion([](Status s) { ASSERT_EQ(s, failStatus()); })
+ .onCompletion([](Status s) FTU_LAMBDA_R(void) { ASSERT_EQ(s, failStatus()); })
.then([] { return 3; })
.getNoThrow(),
3);
@@ -621,7 +579,7 @@ TEST(Future_Void, Fail_onCompletionSimple) {
}
TEST(Future_Void, Fail_onCompletionError_throw) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
auto fut2 = std::move(fut).onCompletion([](Status s) {
ASSERT_EQ(s, failStatus());
uasserted(ErrorCodes::BadValue, "oh no!");
@@ -631,8 +589,8 @@ TEST(Future_Void, Fail_onCompletionError_throw) {
}
TEST(Future_Void, Fail_onCompletionError_Status) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
- auto fut2 = std::move(fut).onCompletion([](Status s) {
+ runFailureTests([](auto&& fut) {
+ auto fut2 = std::move(fut).onCompletion([](Status s) FTU_LAMBDA_R(Status) {
ASSERT_EQ(s, failStatus());
return Status(ErrorCodes::BadValue, "oh no!");
});
@@ -641,9 +599,9 @@ TEST(Future_Void, Fail_onCompletionError_Status) {
}
TEST(Future_Void, Fail_onCompletionFutureImmediate) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
- .onCompletion([](Status s) {
+ .onCompletion([](Status s) FTU_LAMBDA_R(Future<void>) {
ASSERT_EQ(s, failStatus());
return Future<void>::makeReady();
})
@@ -654,9 +612,9 @@ TEST(Future_Void, Fail_onCompletionFutureImmediate) {
}
TEST(Future_Void, Fail_onCompletionFutureReady) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
- .onCompletion([](Status s) {
+ .onCompletion([](Status s) FTU_LAMBDA_R(Future<void>) {
ASSERT_EQ(s, failStatus());
auto pf = makePromiseFuture<void>();
pf.promise.emplaceValue();
@@ -669,9 +627,9 @@ TEST(Future_Void, Fail_onCompletionFutureReady) {
}
TEST(Future_Void, Fail_onCompletionFutureAsync) {
- FUTURE_FAIL_TEST<void>([](/*Future<void>*/ auto&& fut) {
+ runFailureTests([](auto&& fut) {
ASSERT_EQ(std::move(fut)
- .onCompletion([&](Status s) {
+ .onCompletion([&](Status s) FTU_LAMBDA_R(Future<void>) {
ASSERT_EQ(s, failStatus());
return async([] {});
})