// Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. #include "wpi/future.h" // NOLINT(build/include_order) #include "gtest/gtest.h" // NOLINT(build/include_order) #include namespace wpi { TEST(FutureTest, Then) { promise inPromise; future outFuture = inPromise.get_future().then([](bool v) { return v ? 5 : 6; }); inPromise.set_value(true); ASSERT_EQ(outFuture.get(), 5); } TEST(FutureTest, ThenSame) { promise inPromise; future outFuture = inPromise.get_future().then([](bool v) { return !v; }); inPromise.set_value(true); ASSERT_EQ(outFuture.get(), false); } TEST(FutureTest, ThenFromVoid) { promise inPromise; future outFuture = inPromise.get_future().then([] { return 5; }); inPromise.set_value(); ASSERT_EQ(outFuture.get(), 5); } TEST(FutureTest, ThenToVoid) { promise inPromise; future outFuture = inPromise.get_future().then([](bool v) {}); inPromise.set_value(true); ASSERT_TRUE(outFuture.is_ready()); } TEST(FutureTest, ThenVoidVoid) { promise inPromise; future outFuture = inPromise.get_future().then([] {}); inPromise.set_value(); ASSERT_TRUE(outFuture.is_ready()); } TEST(FutureTest, Implicit) { promise inPromise; future outFuture = inPromise.get_future(); inPromise.set_value(true); ASSERT_EQ(outFuture.get(), 1); } TEST(FutureTest, MoveSame) { promise inPromise; future outFuture1 = inPromise.get_future(); future outFuture(std::move(outFuture1)); inPromise.set_value(true); ASSERT_EQ(outFuture.get(), true); } TEST(FutureTest, MoveVoid) { promise inPromise; future outFuture1 = inPromise.get_future(); future outFuture(std::move(outFuture1)); inPromise.set_value(); ASSERT_TRUE(outFuture.is_ready()); } } // namespace wpi