/*
- * Copyright 2015 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include <folly/futures/SharedPromise.h>
-#include <gtest/gtest.h>
+#include <folly/portability/GTest.h>
using namespace folly;
-TEST(SharedPromise, SetGet) {
+TEST(SharedPromise, setGetSemiFuture) {
+ SharedPromise<int> p;
+ p.setValue(1);
+ auto f1 = p.getSemiFuture();
+ auto f2 = p.getSemiFuture();
+ EXPECT_EQ(1, f1.value());
+ EXPECT_EQ(1, f2.value());
+}
+
+TEST(SharedPromise, setGetMixed) {
+ SharedPromise<int> p;
+ p.setValue(1);
+ auto f1 = p.getSemiFuture();
+ auto f2 = p.getFuture();
+ EXPECT_EQ(1, f1.value());
+ EXPECT_EQ(1, f2.value());
+}
+
+TEST(SharedPromise, setGet) {
SharedPromise<int> p;
p.setValue(1);
auto f1 = p.getFuture();
EXPECT_EQ(1, f1.value());
EXPECT_EQ(1, f2.value());
}
-TEST(SharedPromise, GetSet) {
+TEST(SharedPromise, getSet) {
SharedPromise<int> p;
auto f1 = p.getFuture();
auto f2 = p.getFuture();
EXPECT_EQ(1, f2.value());
}
-TEST(SharedPromise, GetSetGet) {
+TEST(SharedPromise, getSetGet) {
SharedPromise<int> p;
auto f1 = p.getFuture();
p.setValue(1);
EXPECT_EQ(1, f2.value());
}
-TEST(SharedPromise, Reset) {
+TEST(SharedPromise, reset) {
SharedPromise<int> p;
auto f1 = p.getFuture();
EXPECT_EQ(2, f2.value());
}
-TEST(SharedPromise, GetMoveSet) {
+TEST(SharedPromise, getMoveSet) {
SharedPromise<int> p;
auto f = p.getFuture();
auto p2 = std::move(p);
EXPECT_EQ(1, f.value());
}
-TEST(SharedPromise, SetMoveGet) {
+TEST(SharedPromise, setMoveGet) {
SharedPromise<int> p;
p.setValue(1);
auto p2 = std::move(p);
EXPECT_EQ(1, f.value());
}
-TEST(SharedPromise, MoveSetGet) {
+TEST(SharedPromise, moveSetGet) {
SharedPromise<int> p;
auto p2 = std::move(p);
p2.setValue(1);
EXPECT_EQ(1, f.value());
}
-TEST(SharedPromise, MoveGetSet) {
+TEST(SharedPromise, moveGetSet) {
SharedPromise<int> p;
auto p2 = std::move(p);
auto f = p2.getFuture();
EXPECT_EQ(1, f.value());
}
-TEST(SharedPromise, MoveMove) {
+TEST(SharedPromise, moveMove) {
SharedPromise<std::shared_ptr<int>> p;
auto f1 = p.getFuture();
auto f2 = p.getFuture();
p = std::move(p2);
p.setValue(std::make_shared<int>(1));
}
+
+TEST(SharedPromise, setWith) {
+ SharedPromise<int> p;
+ p.setWith([]{ return 1; });
+ EXPECT_EQ(1, p.getFuture().value());
+}
+
+TEST(SharedPromise, isFulfilled) {
+ SharedPromise<int> p;
+ EXPECT_FALSE(p.isFulfilled());
+ auto p2 = std::move(p);
+ EXPECT_FALSE(p2.isFulfilled());
+ p2.setValue(1);
+ EXPECT_TRUE(p2.isFulfilled());
+ p = std::move(p2);
+ EXPECT_TRUE(p.isFulfilled());
+}
+
+TEST(SharedPromise, interruptHandler) {
+ SharedPromise<int> p;
+ bool flag = false;
+ p.setInterruptHandler([&](const exception_wrapper&) { flag = true; });
+ auto f = p.getFuture();
+ f.cancel();
+ EXPECT_TRUE(flag);
+}