mirror of
https://github.com/Naios/continuable.git
synced 2026-02-16 15:19:48 +08:00
Additionally test co_await expressions with 1 or more args
This commit is contained in:
parent
a85040b0c2
commit
02965776e3
@ -27,6 +27,8 @@
|
|||||||
#include <exception>
|
#include <exception>
|
||||||
#endif // CONTINUABLE_WITH_NO_EXCEPTIONS
|
#endif // CONTINUABLE_WITH_NO_EXCEPTIONS
|
||||||
|
|
||||||
|
#include <tuple>
|
||||||
|
|
||||||
#include "test-continuable.hpp"
|
#include "test-continuable.hpp"
|
||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
@ -58,18 +60,25 @@ struct coroutine_traits<void, T...> {
|
|||||||
/// Resolves the given promise asynchonously
|
/// Resolves the given promise asynchonously
|
||||||
template <typename S, typename T>
|
template <typename S, typename T>
|
||||||
void resolve_async(S&& supplier, T&& promise) {
|
void resolve_async(S&& supplier, T&& promise) {
|
||||||
|
// 0 args
|
||||||
co_await supplier();
|
co_await supplier();
|
||||||
|
|
||||||
co_await supplier();
|
// 1 args
|
||||||
|
int a1 = co_await supplier(1);
|
||||||
|
EXPECT_EQ(a1, 1);
|
||||||
|
|
||||||
|
// 2-n args
|
||||||
|
std::tuple<int, int> a2 = co_await supplier(1, 2);
|
||||||
|
EXPECT_EQ(a2, std::make_tuple(1, 2));
|
||||||
|
|
||||||
promise.set_value();
|
promise.set_value();
|
||||||
co_return;
|
co_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TYPED_TEST(single_dimension_tests, are_awaitable) {
|
TYPED_TEST(single_dimension_tests, are_awaitable) {
|
||||||
auto const& supply = [&] {
|
auto const& supply = [&](auto&&... args) {
|
||||||
// Supplies the current tested continuable
|
// Supplies the current tested continuable
|
||||||
return this->supply();
|
return this->supply(std::forward<decltype(args)>(args)...);
|
||||||
};
|
};
|
||||||
|
|
||||||
EXPECT_ASYNC_RESULT(
|
EXPECT_ASYNC_RESULT(
|
||||||
@ -94,8 +103,17 @@ struct await_exception : std::exception {
|
|||||||
/// Resolves the given promise asynchonously through an exception
|
/// Resolves the given promise asynchonously through an exception
|
||||||
template <typename S, typename T>
|
template <typename S, typename T>
|
||||||
void resolve_async_exceptional(S&& supplier, T&& promise) {
|
void resolve_async_exceptional(S&& supplier, T&& promise) {
|
||||||
|
// 0 args
|
||||||
co_await supplier();
|
co_await supplier();
|
||||||
|
|
||||||
|
// 1 args
|
||||||
|
int a1 = co_await supplier(1);
|
||||||
|
EXPECT_EQ(a1, 1);
|
||||||
|
|
||||||
|
// 2-n args
|
||||||
|
std::tuple<int, int> a2 = co_await supplier(1, 2);
|
||||||
|
EXPECT_EQ(a2, std::make_tuple(1, 2));
|
||||||
|
|
||||||
ASSERT_THROW(co_await supplier().then([] { throw await_exception{}; }),
|
ASSERT_THROW(co_await supplier().then([] { throw await_exception{}; }),
|
||||||
await_exception);
|
await_exception);
|
||||||
|
|
||||||
@ -104,9 +122,9 @@ void resolve_async_exceptional(S&& supplier, T&& promise) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TYPED_TEST(single_dimension_tests, are_awaitable_with_exceptions) {
|
TYPED_TEST(single_dimension_tests, are_awaitable_with_exceptions) {
|
||||||
auto const& supply = [&] {
|
auto const& supply = [&](auto&&... args) {
|
||||||
// Supplies the current tested continuable
|
// Supplies the current tested continuable
|
||||||
return this->supply();
|
return this->supply(std::forward<decltype(args)>(args)...);
|
||||||
};
|
};
|
||||||
|
|
||||||
ASSERT_ASYNC_COMPLETION(
|
ASSERT_ASYNC_COMPLETION(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user