2 * Copyright 2015 Facebook, Inc.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <gtest/gtest.h>
19 #include <folly/futures/SharedPromise.h>
21 using namespace folly;
23 TEST(SharedPromise, setGet) {
26 auto f1 = p.getFuture();
27 auto f2 = p.getFuture();
28 EXPECT_EQ(1, f1.value());
29 EXPECT_EQ(1, f2.value());
31 TEST(SharedPromise, getSet) {
33 auto f1 = p.getFuture();
34 auto f2 = p.getFuture();
36 EXPECT_EQ(1, f1.value());
37 EXPECT_EQ(1, f2.value());
40 TEST(SharedPromise, getSetGet) {
42 auto f1 = p.getFuture();
44 auto f2 = p.getFuture();
45 EXPECT_EQ(1, f1.value());
46 EXPECT_EQ(1, f2.value());
49 TEST(SharedPromise, reset) {
52 auto f1 = p.getFuture();
54 EXPECT_EQ(1, f1.value());
56 p = SharedPromise<int>();
57 auto f2 = p.getFuture();
58 EXPECT_FALSE(f2.isReady());
60 EXPECT_EQ(2, f2.value());
63 TEST(SharedPromise, getMoveSet) {
65 auto f = p.getFuture();
66 auto p2 = std::move(p);
68 EXPECT_EQ(1, f.value());
71 TEST(SharedPromise, setMoveGet) {
74 auto p2 = std::move(p);
75 auto f = p2.getFuture();
76 EXPECT_EQ(1, f.value());
79 TEST(SharedPromise, moveSetGet) {
81 auto p2 = std::move(p);
83 auto f = p2.getFuture();
84 EXPECT_EQ(1, f.value());
87 TEST(SharedPromise, moveGetSet) {
89 auto p2 = std::move(p);
90 auto f = p2.getFuture();
92 EXPECT_EQ(1, f.value());
95 TEST(SharedPromise, moveMove) {
96 SharedPromise<std::shared_ptr<int>> p;
97 auto f1 = p.getFuture();
98 auto f2 = p.getFuture();
99 auto p2 = std::move(p);
101 p.setValue(std::make_shared<int>(1));
104 TEST(SharedPromise, setWith) {
105 SharedPromise<int> p;
106 p.setWith([]{ return 1; });
107 EXPECT_EQ(1, p.getFuture().value());
110 TEST(SharedPromise, isFulfilled) {
111 SharedPromise<int> p;
112 EXPECT_FALSE(p.isFulfilled());
113 auto p2 = std::move(p);
114 EXPECT_FALSE(p2.isFulfilled());
116 EXPECT_TRUE(p2.isFulfilled());
118 EXPECT_TRUE(p.isFulfilled());
121 TEST(SharedPromise, interruptHandler) {
122 SharedPromise<int> p;
124 p.setInterruptHandler([&](const exception_wrapper&) { flag = true; });
125 auto f = p.getFuture();