Loading src/sled/futures/future.h +1 −1 Original line number Diff line number Diff line Loading @@ -293,7 +293,7 @@ public: { Future<T, OtherFailureT> result = Future<T, OtherFailureT>::Create(); OnSuccess([result](const T &v) mutable noexcept { result.FillSuccess(v); }); OnFailure([result, f](const FailureT &failure) noexcept { OnFailure([result, f](const FailureT &failure) mutable noexcept { try { result.FillFailure(f(failure)); } catch (const std::exception &e) { Loading src/sled/futures/future_test.cc +20 −0 Original line number Diff line number Diff line Loading @@ -126,4 +126,24 @@ TEST_SUITE("future") REQUIRE_EQ(f1.Result(), 1); REQUIRE_EQ(f2.FailureReason(), "1"); } TEST_CASE("MapFailure") { sled::Future<int, bool> f = false; auto f1 = f.MapFailure([](bool) { return std::string("error"); }); CHECK_EQ(f1.FailureReason(), "error"); } TEST_CASE("Chain") { sled::Future<int, bool> f = 1; auto f1 = f.Map([](int i) { return i + 1; }) .FlatMap([](int i) { sled::Promise<std::string, bool> p; p.Success(std::to_string(i)); return p.GetFuture(); }) .MapFailure([](bool) { return std::exception(); }); CHECK_EQ(f1.Result(), "2"); } } Loading
src/sled/futures/future.h +1 −1 Original line number Diff line number Diff line Loading @@ -293,7 +293,7 @@ public: { Future<T, OtherFailureT> result = Future<T, OtherFailureT>::Create(); OnSuccess([result](const T &v) mutable noexcept { result.FillSuccess(v); }); OnFailure([result, f](const FailureT &failure) noexcept { OnFailure([result, f](const FailureT &failure) mutable noexcept { try { result.FillFailure(f(failure)); } catch (const std::exception &e) { Loading
src/sled/futures/future_test.cc +20 −0 Original line number Diff line number Diff line Loading @@ -126,4 +126,24 @@ TEST_SUITE("future") REQUIRE_EQ(f1.Result(), 1); REQUIRE_EQ(f2.FailureReason(), "1"); } TEST_CASE("MapFailure") { sled::Future<int, bool> f = false; auto f1 = f.MapFailure([](bool) { return std::string("error"); }); CHECK_EQ(f1.FailureReason(), "error"); } TEST_CASE("Chain") { sled::Future<int, bool> f = 1; auto f1 = f.Map([](int i) { return i + 1; }) .FlatMap([](int i) { sled::Promise<std::string, bool> p; p.Success(std::to_string(i)); return p.GetFuture(); }) .MapFailure([](bool) { return std::exception(); }); CHECK_EQ(f1.Result(), "2"); } }