summaryrefslogtreecommitdiff
path: root/src/mongo/util/future_test_future_int.cpp
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2018-11-14 17:28:15 -0500
committerMathias Stearn <mathias@10gen.com>2018-11-30 19:21:46 -0500
commit3cc2238a6e132b1fc67f70a3a137ebf2f4db3849 (patch)
treeb0a839eb988fec6e1e2dcce9cba4a91576c02f30 /src/mongo/util/future_test_future_int.cpp
parent69e3a7e1b92b72b5332339a9834a239c635f1350 (diff)
downloadmongo-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.cpp38
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);
}