1#include "gtest/gtest.h"
6#include "exec/single_thread_context.hpp"
25 stdexec::schedule(stdexec::inline_scheduler{}) | stdexec::then([]() { }),
26 stdexec::just() | stdexec::then([]() { })));
29 stdexec::schedule(stdexec::inline_scheduler{}) | stdexec::then([]() { }),
30 stdexec::schedule(std::declval<exec::single_thread_context>().get_scheduler()) | stdexec::then([]() { })));
34 static_assert(std::same_as<
35 stdexec::__completion_domain_of_t<stdexec::set_value_t, sndr_A_t>,
36 stdexec::indeterminate_domain<>
39 static_assert(std::same_as<
40 stdexec::__completion_domain_of_t<stdexec::set_value_t, sndr_A_t, stdexec::env<>>,
41 stdexec::default_domain
43 static_assert(std::same_as<
44 stdexec::__completion_domain_of_t<stdexec::set_value_t, sndr_B_t, stdexec::env<>>,
45 stdexec::default_domain
55 static_assert(!stdexec::dependent_sender<sndr_A_t>);
56 static_assert(stdexec::dependent_sender<sndr_B_t>);
64TEST(WhenAll, no_branch) {
65 auto sndr = stdexec::when_all();
67 static_assert(std::same_as<stdexec::tag_of_t<
decltype(sndr)>, stdexec::just_t>);
69 static_assert(!stdexec::dependent_sender<
decltype(sndr)>);
72 stdexec::get_completion_signatures<decltype(sndr)>()
73 == stdexec::completion_signatures<stdexec::set_value_t()>{});
75 ASSERT_TRUE(stdexec::sync_wait(std::move(sndr)).has_value());
79TEST(WhenAll, single_branch) {
80 auto sndr = stdexec::just(42);
82 static_assert(std::same_as<
decltype(stdexec::when_all(sndr)),
decltype(sndr)>);
83 static_assert(std::same_as<
84 decltype(stdexec::when_all(std::move(sndr))),
88 auto&& w_a = stdexec::when_all(sndr);
91 ASSERT_NE(std::addressof(w_a), std::addressof(sndr));
93 sndr = stdexec::just(56);
95 const auto result = stdexec::sync_wait(std::move(w_a));
96 ASSERT_TRUE(result.has_value());
97 ASSERT_EQ(std::get<0>(*result), 42);
99 std::get<0>(*stdexec::sync_wait(stdexec::when_all(std::move(sndr)))), 56);
102 using just_not_copy_constructible_t =
decltype(stdexec::just(std::make_unique<int>(0)));
103 static_assert(!std::copy_constructible<just_not_copy_constructible_t>);
104 static_assert(!std::invocable<const stdexec::when_all_t&, just_not_copy_constructible_t&>);
105 static_assert(std::invocable<const stdexec::when_all_t&, just_not_copy_constructible_t&&>);
109TEST(WhenAllTest, only_schedule_sender_branches) {
110 exec::single_thread_context stc{};
114 stdexec::schedule(stc.get_scheduler()),
115 stdexec::schedule(stc.get_scheduler()),
116 stdexec::schedule(stc.get_scheduler())));
#define KOKKOS_EXECUTION_STDEXEC_PRAGMA_DIAGNOSTIC_IGNORED
Basic list of ignored diagnostics when including anything from stdexec.
decltype(stdexec::when_all( stdexec::schedule(stdexec::inline_scheduler{})|stdexec::then([]() { }), stdexec::just()|stdexec::then([]() { }))) sndr_A_t
consteval bool test_when_all_dependent_sender()
consteval bool test_when_all_completion_domain()
decltype(stdexec::when_all( stdexec::schedule(stdexec::inline_scheduler{})|stdexec::then([]() { }), stdexec::schedule(std::declval< exec::single_thread_context >().get_scheduler())|stdexec::then([]() { }))) sndr_B_t