Commit 6d15ae73 authored by tqcq's avatar tqcq
Browse files

feat update

parent 40a8ffd4
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -15,10 +15,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());
@@ -40,7 +54,7 @@ TEST_SUITE("future")
        REQUIRE(f.IsFailed());
        CHECK_EQ(f.FailureReason(), "test");
    }

    //
    TEST_CASE("base failed")
    {
        sled::Promise<int, std::string> p;
+20 −11
Original line number Diff line number Diff line
@@ -15,14 +15,16 @@ struct is_invocable : std::is_constructible<std::function<void(Args...)>,

}// namespace

template<typename FailureT>
template<typename FailureT,
         typename = typename std::enable_if<!std::is_constructible<FailureT, std::string>::value>::type>
inline FailureT
FailureFromString(std::string &&)
{
    return FailureT();
}

template<typename FailureT>
template<typename FailureT,
         typename = typename std::enable_if<std::is_constructible<FailureT, std::string>::value>::type>
inline FailureT
FailureFromString(const std::string &str)
{
@@ -32,18 +34,25 @@ FailureFromString(const std::string &str)

template<>
inline std::string
FailureFromString<std::string>(std::string &&str)
FailureFromString<std::string>(const std::string &str)
{
    return std::move(str);
    return {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));
}
// 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