From e1af6f13ace6863e5bf2de22f8b70c2c04d82961 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sun, 9 Dec 2018 22:45:05 +0700 Subject: [PATCH] make_promise function also can create pending promises --- promise.hpp | 5 +++++ tests.cpp | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/promise.hpp b/promise.hpp index 3eb8a4c..43186b4 100644 --- a/promise.hpp +++ b/promise.hpp @@ -656,6 +656,11 @@ namespace promise_hpp // make_promise // + template < typename R > + promise make_promise() { + return promise(); + } + template < typename R, typename F > promise make_promise(F&& f) { promise result; diff --git a/tests.cpp b/tests.cpp index 8ce75c1..5c642e1 100644 --- a/tests.cpp +++ b/tests.cpp @@ -426,6 +426,25 @@ TEST_CASE("promise") { REQUIRE(check_84_int == 84); } } + SECTION("lazy_chaining") { + { + int check_84_int = 0; + auto p1 = pr::make_promise(); + auto p2 = pr::make_promise(); + + p1.then([&p2](int v){ + return p2; + }).then([&check_84_int](int v2){ + check_84_int = v2; + }); + + REQUIRE(check_84_int == 0); + p1.resolve(42); + REQUIRE(check_84_int == 0); + p2.resolve(84); + REQUIRE(check_84_int == 84); + } + } SECTION("typed_chaining_fails") { { bool call_fail_with_logic_error = false;