// check that futures are ready in then()
{
- std::vector<Promise<void>> promises(10);
- std::vector<Future<void>> futures;
+ std::vector<Promise<Unit>> promises(10);
+ std::vector<Future<Unit>> futures;
for (auto& p : promises)
futures.push_back(p.getFuture());
auto allf = collectAll(futures)
- .then([](Try<std::vector<Try<void>>>&& ts) {
+ .then([](Try<std::vector<Try<Unit>>>&& ts) {
for (auto& f : ts.value())
f.value();
});
// void futures success case
{
- std::vector<Promise<void>> promises(10);
- std::vector<Future<void>> futures;
+ std::vector<Promise<Unit>> promises(10);
+ std::vector<Future<Unit>> futures;
for (auto& p : promises)
futures.push_back(p.getFuture());
// void futures failure case
{
- std::vector<Promise<void>> promises(10);
- std::vector<Future<void>> futures;
+ std::vector<Promise<Unit>> promises(10);
+ std::vector<Future<Unit>> futures;
for (auto& p : promises)
futures.push_back(p.getFuture());
// error
{
- std::vector<Promise<void>> promises(10);
- std::vector<Future<void>> futures;
+ std::vector<Promise<Unit>> promises(10);
+ std::vector<Future<Unit>> futures;
for (auto& p : promises)
futures.push_back(p.getFuture());
TEST(Collect, alreadyCompleted) {
{
- std::vector<Future<void>> fs;
+ std::vector<Future<Unit>> fs;
for (int i = 0; i < 10; i++)
fs.push_back(makeFuture());
collectAll(fs)
- .then([&](std::vector<Try<void>> ts) {
+ .then([&](std::vector<Try<Unit>> ts) {
EXPECT_EQ(fs.size(), ts.size());
});
}
}
TEST(Collect, collectN) {
- std::vector<Promise<void>> promises(10);
- std::vector<Future<void>> futures;
+ std::vector<Promise<Unit>> promises(10);
+ std::vector<Future<Unit>> futures;
for (auto& p : promises)
futures.push_back(p.getFuture());
bool flag = false;
size_t n = 3;
collectN(futures, n)
- .then([&](std::vector<std::pair<size_t, Try<void>>> v) {
+ .then([&](std::vector<std::pair<size_t, Try<Unit>>> v) {
flag = true;
EXPECT_EQ(n, v.size());
for (auto& tt : v)
/// Ensure that we can compile collectAll/Any with folly::small_vector
TEST(Collect, smallVector) {
- static_assert(!FOLLY_IS_TRIVIALLY_COPYABLE(Future<void>),
+ static_assert(!FOLLY_IS_TRIVIALLY_COPYABLE(Future<Unit>),
"Futures should not be trivially copyable");
static_assert(!FOLLY_IS_TRIVIALLY_COPYABLE(Future<int>),
"Futures should not be trivially copyable");
{
- folly::small_vector<Future<void>> futures;
+ folly::small_vector<Future<Unit>> futures;
for (int i = 0; i < 10; i++)
futures.push_back(makeFuture());
auto anyf = collectAny(futures);
}
{
- folly::small_vector<Future<void>> futures;
+ folly::small_vector<Future<Unit>> futures;
for (int i = 0; i < 10; i++)
futures.push_back(makeFuture());
Promise<int> pi;
Future<bool> fb = pb.getFuture();
Future<int> fi = pi.getFuture();
- bool flag = false;
auto f = collect(std::move(fb), std::move(fi));
pb.setValue(true);
EXPECT_FALSE(f.isReady());
auto f = collectAll(fs);
EXPECT_TRUE(f.isReady());
}
+
+TEST(Collect, noDefaultConstructor) {
+ struct A {
+ explicit A(size_t /* x */) {}
+ };
+
+ auto f1 = makeFuture(A(1));
+ auto f2 = makeFuture(A(2));
+
+ auto f = collect(std::move(f1), std::move(f2));
+}