1#include "gmock/gmock.h"
6#include "exec/single_thread_context.hpp"
29 decltype(stdexec::schedule(std::declval<experimental::execution::single_thread_context>().get_scheduler()) | stdexec::then([]()
noexcept {
36 == stdexec::completion_signatures<stdexec::set_value_t()>{});
48 stdexec::completion_signatures<stdexec::set_error_t(
float)>,
51 == stdexec::completion_signatures<stdexec::set_value_t(), stdexec::set_error_t(
float)>{});
65 stdexec::completion_signatures<>,
68 == stdexec::completion_signatures<stdexec::set_value_t(), stdexec::set_stopped_t()>{});
80 stdexec::completion_signatures<stdexec::set_error_t(
float)>,
83 == stdexec::completion_signatures<
84 stdexec::set_value_t(),
85 stdexec::set_error_t(
float),
86 stdexec::set_stopped_t()
102 const view_s_t data(Kokkos::view_alloc(
"data - shared space"));
104 experimental::execution::single_thread_context stc{};
108 stdexec::inplace_stop_source source;
110 auto stc_then_continues_on_esc_sndr = stdexec::schedule(stc.get_scheduler()) | stdexec::then([]()
noexcept { })
115 stdexec::get_completion_signatures<decltype(stc_then_continues_on_esc_sndr), env_with_stop_token_t>()
116 == stdexec::completion_signatures<stdexec::set_value_t(), stdexec::set_stopped_t()>{});
118 auto stc_then_continues_on_esc_then_sndr =
119 std::move(stc_then_continues_on_esc_sndr)
124 stdexec::get_completion_signatures<decltype(stc_then_continues_on_esc_then_sndr), env_with_stop_token_t>()
125 == stdexec::completion_signatures<
126 stdexec::set_value_t(),
127 stdexec::set_error_t(std::exception_ptr),
128 stdexec::set_stopped_t()
131 auto stc_then_continues_on_esc_then_then_sndr =
132 std::move(stc_then_continues_on_esc_then_sndr)
137 stdexec::get_completion_signatures<decltype(stc_then_continues_on_esc_then_then_sndr), env_with_stop_token_t>()
138 == stdexec::completion_signatures<
139 stdexec::set_value_t(),
140 stdexec::set_error_t(std::exception_ptr),
141 stdexec::set_stopped_t()
144 ASSERT_EQ(data(), 0) <<
"Eager execution is not allowed.";
146 ASSERT_FALSE(source.stop_requested());
150 const auto res_A = stdexec::sync_wait(
151 stc_then_continues_on_esc_then_then_sndr
152 | stdexec::write_env(stdexec::prop{stdexec::get_stop_token, source.get_token()}));
154 ASSERT_TRUE(res_A.has_value());
156 ASSERT_EQ(data(), 2);
158 source.request_stop();
160 const auto res_B = stdexec::sync_wait(
161 std::move(stc_then_continues_on_esc_then_then_sndr)
162 | stdexec::write_env(stdexec::prop{stdexec::get_stop_token, source.get_token()}));
164 ASSERT_FALSE(res_B.has_value());
166 ASSERT_EQ(data(), 2);
#define KOKKOS_EXECUTION_THREADS_THROWS_ON_SYNC_WAIT_ASSERT_AND_SKIP(_sndr_)
#define KOKKOS_EXECUTION_STDEXEC_PRAGMA_DIAGNOSTIC_IGNORED
Basic list of ignored diagnostics when including anything from stdexec.
consteval auto completion_signatures_add()
Concatenate Sndr completion signatures with ExtraSigs if Sndr sends on the value channel; otherwise r...
decltype(stdexec::schedule(std::declval< experimental::execution::single_thread_context >().get_scheduler())|stdexec::then([]() noexcept { })) sndr_t
consteval bool test_add_nothing_empty_env()
consteval bool test_add_error_stop_env()
consteval bool test_add_error_empty_env()
stdexec::prop< stdexec::get_stop_token_t, stdexec::inplace_stop_token > env_with_stop_token_t
consteval bool test_add_nothing_stop_env()
auto get_scheduler() const noexcept -> ExecutionSpaceImpl::Scheduler< execution_space >
Kokkos::View< value_t, Kokkos::SharedSpace > view_s_t
Kokkos::Execution::ExecutionSpaceContext< Exec > context_t