Loading src/sled/futures/future.h +1 −1 Original line number Diff line number Diff line Loading @@ -267,7 +267,7 @@ public: result.FillFailure(future_detail::ExceptionFailure<FailureT>()); } }); OnFailure([result](const FailureT &failure) noexcept { result.FillFailure(failure); }); OnFailure([result](const FailureT &failure) mutable noexcept { result.FillFailure(failure); }); return result; } Loading src/sled/futures/future_test.cc +17 −3 Original line number Diff line number Diff line Loading @@ -14,10 +14,24 @@ TEST_SUITE("future") CHECK_EQ(f.Result(), 42); } TEST_CASE("base failed") TEST_CASE("base success 1") { sled::Promise<int, std::string> p; auto f = p.GetFuture(); auto f = p.GetFuture().OnSuccess([](int i) { CHECK_EQ(i, 42); }).OnFailure([](const std::string &) { REQUIRE(false); }); p.Success(42); CHECK(f.Wait(-1)); CHECK(f.IsValid()); CHECK_EQ(f.Result(), 42); } TEST_CASE("base failed 1") { sled::Promise<int, std::string> p; auto f = p.GetFuture().OnFailure([](const std::string &str) { CHECK_EQ(str, "error"); }).OnSuccess([](int) { REQUIRE(false); }); p.Failure("error"); REQUIRE(p.IsFilled()); REQUIRE(f.IsCompleted()); Loading @@ -39,7 +53,7 @@ TEST_SUITE("future") REQUIRE(f.IsFailed()); CHECK_EQ(f.FailureReason(), "test"); } // TEST_CASE("base failed") { sled::Promise<int, std::string> p; Loading src/sled/futures/internal/failure_handling.h +15 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,21 @@ FailureFromString<DefaultException>(const std::string &str) return DefaultException(str); } // template<> // inline std::string // FailureFromString<std::string>(std::string &&str) // { // return std::move(str); // } // template<typename FailureT, // typename = typename std::enable_if<std::is_constructible<FailureT, std::string>::value>::type> // inline FailureT // FailureFromString(std::string &&str) // { // return FailureT(std::move(str)); // } }// namespace failure namespace future_detail { Loading Loading
src/sled/futures/future.h +1 −1 Original line number Diff line number Diff line Loading @@ -267,7 +267,7 @@ public: result.FillFailure(future_detail::ExceptionFailure<FailureT>()); } }); OnFailure([result](const FailureT &failure) noexcept { result.FillFailure(failure); }); OnFailure([result](const FailureT &failure) mutable noexcept { result.FillFailure(failure); }); return result; } Loading
src/sled/futures/future_test.cc +17 −3 Original line number Diff line number Diff line Loading @@ -14,10 +14,24 @@ TEST_SUITE("future") CHECK_EQ(f.Result(), 42); } TEST_CASE("base failed") TEST_CASE("base success 1") { sled::Promise<int, std::string> p; auto f = p.GetFuture(); auto f = p.GetFuture().OnSuccess([](int i) { CHECK_EQ(i, 42); }).OnFailure([](const std::string &) { REQUIRE(false); }); p.Success(42); CHECK(f.Wait(-1)); CHECK(f.IsValid()); CHECK_EQ(f.Result(), 42); } TEST_CASE("base failed 1") { sled::Promise<int, std::string> p; auto f = p.GetFuture().OnFailure([](const std::string &str) { CHECK_EQ(str, "error"); }).OnSuccess([](int) { REQUIRE(false); }); p.Failure("error"); REQUIRE(p.IsFilled()); REQUIRE(f.IsCompleted()); Loading @@ -39,7 +53,7 @@ TEST_SUITE("future") REQUIRE(f.IsFailed()); CHECK_EQ(f.FailureReason(), "test"); } // TEST_CASE("base failed") { sled::Promise<int, std::string> p; Loading
src/sled/futures/internal/failure_handling.h +15 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,21 @@ FailureFromString<DefaultException>(const std::string &str) return DefaultException(str); } // template<> // inline std::string // FailureFromString<std::string>(std::string &&str) // { // return std::move(str); // } // template<typename FailureT, // typename = typename std::enable_if<std::is_constructible<FailureT, std::string>::value>::type> // inline FailureT // FailureFromString(std::string &&str) // { // return FailureT(std::move(str)); // } }// namespace failure namespace future_detail { Loading