Skip to content

Commit

Permalink
added connect_all_result
Browse files Browse the repository at this point in the history
  • Loading branch information
dietmarkuehl committed Aug 29, 2024
1 parent a935f81 commit 1501ab6
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 0 deletions.
28 changes: 28 additions & 0 deletions include/beman/execution26/detail/connect_all_result.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// include/beman/execution26/detail/connect_all_result.hpp -*-C++-*-
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#ifndef INCLUDED_INCLUDE_BEMAN_EXECUTION26_DETAIL_CONNECT_ALL_RESULT
#define INCLUDED_INCLUDE_BEMAN_EXECUTION26_DETAIL_CONNECT_ALL_RESULT

#include <beman/execution26/detail/basic_state.hpp>
#include <beman/execution26/detail/connect_all.hpp>
#include <beman/execution26/detail/call_result_t.hpp>
#include <beman/execution26/detail/indices_for.hpp>

// ----------------------------------------------------------------------------

namespace beman::execution26::detail
{
template <typename Sender, typename Receiver>
using connect_all_result
= ::beman::execution26::detail::call_result_t<
decltype(::beman::execution26::detail::connect_all),
::beman::execution26::detail::basic_state<Sender, Receiver>*,
Sender,
::beman::execution26::detail::indices_for<Sender>
>;
}

// ----------------------------------------------------------------------------

#endif
46 changes: 46 additions & 0 deletions src/beman/execution26/tests/exec-snd-expos.pass.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// src/beman/execution26/tests/exe-snd-expos.pass.cpp -*-C++-*-
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#include <beman/execution26/detail/connect_all_result.hpp>
#include <beman/execution26/detail/product_type.hpp>
#include <beman/execution26/detail/operation_state.hpp>
#include <beman/execution26/detail/basic_operation.hpp>
Expand Down Expand Up @@ -106,6 +107,7 @@ namespace
struct sender0
{
using sender_concept = test_std::sender_t;
using indices_for = ::std::index_sequence_for<>;
tag t{};
int data{};
template <typename Receiver>
Expand All @@ -115,6 +117,7 @@ namespace
struct sender1
{
using sender_concept = test_std::sender_t;
using indices_for = ::std::index_sequence_for<sender0>;
tag t{};
int data{};
sender0 c0{};
Expand All @@ -125,6 +128,7 @@ namespace
struct sender2
{
using sender_concept = test_std::sender_t;
using indices_for = ::std::index_sequence_for<sender0, sender0>;
tag t{};
int data{};
sender0 c0{};
Expand All @@ -136,6 +140,7 @@ namespace
struct sender3
{
using sender_concept = test_std::sender_t;
using indices_for = ::std::index_sequence_for<sender0, sender0, sender0>;
tag t{};
int data{};
sender0 c0{};
Expand All @@ -148,6 +153,7 @@ namespace
struct sender4
{
using sender_concept = test_std::sender_t;
using indices_for = ::std::index_sequence_for<sender0, sender0, sender0, sender0>;
tag t{};
int data{};
sender0 c0{};
Expand Down Expand Up @@ -958,6 +964,45 @@ namespace
//-dk: TODO test connect_all
}

auto test_connect_all_result() -> void
{
{
test_detail::basic_state state{sender0{}, receiver{}};
static_assert(std::same_as<
decltype(test_detail::connect_all(&state, sender0{}, std::index_sequence<0, 1, 2, 3>{})),
test_detail::connect_all_result<sender0, receiver>
>);
}
{
test_detail::basic_state state{sender1{}, receiver{}};
static_assert(std::same_as<
decltype(test_detail::connect_all(&state, sender1{}, std::index_sequence<0, 1, 2, 3>{})),
test_detail::connect_all_result<sender1, receiver>
>);
}
{
test_detail::basic_state state{sender2{}, receiver{}};
static_assert(std::same_as<
decltype(test_detail::connect_all(&state, sender2{}, std::index_sequence<0, 1, 2, 3>{})),
test_detail::connect_all_result<sender2, receiver>
>);
}
{
test_detail::basic_state state{sender3{}, receiver{}};
static_assert(std::same_as<
decltype(test_detail::connect_all(&state, sender3{}, std::index_sequence<0, 1, 2, 3>{})),
test_detail::connect_all_result<sender3, receiver>
>);
}
{
test_detail::basic_state state{sender4{}, receiver{}};
static_assert(std::same_as<
decltype(test_detail::connect_all(&state, sender4{}, std::index_sequence<0, 1, 2, 3>{})),
test_detail::connect_all_result<sender4, receiver>
>);
}
}

auto test_basic_operation() -> void
{
test_detail::basic_operation op{sender0{}, receiver{}};
Expand Down Expand Up @@ -987,5 +1032,6 @@ auto main() -> int
test_completion_tag();
test_product_type();
test_connect_all();
test_connect_all_result();
test_basic_operation();
}

0 comments on commit 1501ab6

Please sign in to comment.