diff options
author | Mathias Stearn <mathias@10gen.com> | 2018-11-14 17:28:15 -0500 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2018-11-30 19:21:46 -0500 |
commit | 3cc2238a6e132b1fc67f70a3a137ebf2f4db3849 (patch) | |
tree | b0a839eb988fec6e1e2dcce9cba4a91576c02f30 /src/mongo/util/future_test_future_int.cpp | |
parent | 69e3a7e1b92b72b5332339a9834a239c635f1350 (diff) | |
download | mongo-3cc2238a6e132b1fc67f70a3a137ebf2f4db3849.tar.gz |
SERVER-35682 Add SharedPromise and SharedSemiFuture types
Diffstat (limited to 'src/mongo/util/future_test_future_int.cpp')
-rw-r--r-- | src/mongo/util/future_test_future_int.cpp | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/mongo/util/future_test_future_int.cpp b/src/mongo/util/future_test_future_int.cpp index 92955d367fb..899310cf69c 100644 --- a/src/mongo/util/future_test_future_int.cpp +++ b/src/mongo/util/future_test_future_int.cpp @@ -89,6 +89,17 @@ TEST(Future, Success_getNothrowRvalue) { [](Future<int>&& fut) { ASSERT_EQ(std::move(fut).getNoThrow(), 1); }); } +TEST(Future, Success_shared_get) { + FUTURE_SUCCESS_TEST([] { return 1; }, + [](Future<int>&& fut) { ASSERT_EQ(std::move(fut).share().get(), 1); }); +} + +TEST(Future, Success_shared_getNothrow) { + FUTURE_SUCCESS_TEST( + [] { return 1; }, + [](Future<int>&& fut) { ASSERT_EQ(std::move(fut).share().getNoThrow(), 1); }); +} + TEST(Future, Success_getAsync) { FUTURE_SUCCESS_TEST( [] { return 1; }, @@ -129,6 +140,16 @@ TEST(Future, Fail_getNothrowRvalue) { [](Future<int>&& fut) { ASSERT_EQ(std::move(fut).getNoThrow(), failStatus()); }); } +TEST(Future, Fail_shared_get) { + FUTURE_FAIL_TEST<int>( + [](Future<int>&& fut) { ASSERT_THROWS_failStatus(std::move(fut).share().get()); }); +} + +TEST(Future, Fail_shared_getNothrow) { + FUTURE_FAIL_TEST<int>( + [](Future<int>&& fut) { ASSERT_EQ(std::move(fut).share().getNoThrow(), failStatus()); }); +} + TEST(Future, Fail_getAsync) { FUTURE_FAIL_TEST<int>([](Future<int>&& fut) { auto pf = makePromiseFuture<int>(); @@ -203,9 +224,24 @@ TEST(Future, isReady_TSAN_OK) { done = true; return 1; }); + //(void)*const_cast<volatile bool*>(&done); // Data Race! Uncomment to make sure TSAN works. while (!fut.isReady()) { } - // ASSERT(done); // Data Race! Uncomment to make sure TSAN is working. + ASSERT(done); + (void)fut.get(); + ASSERT(done); +} + +TEST(Future, isReady_shared_TSAN_OK) { + bool done = false; + auto fut = async([&] { + done = true; + return 1; + }).share(); + //(void)*const_cast<volatile bool*>(&done); // Data Race! Uncomment to make sure TSAN works. + while (!fut.isReady()) { + } + ASSERT(done); (void)fut.get(); ASSERT(done); } |