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()>{});
47 stdexec::completion_signatures<stdexec::set_error_t(
float)>,
50 == stdexec::completion_signatures<stdexec::set_value_t(), stdexec::set_error_t(
float)>{});
63 stdexec::completion_signatures<>,
66 == stdexec::completion_signatures<stdexec::set_value_t(), stdexec::set_stopped_t()>{});
77 stdexec::completion_signatures<stdexec::set_error_t(
float)>,
80 == stdexec::completion_signatures<
81 stdexec::set_value_t(),
82 stdexec::set_error_t(
float),
83 stdexec::set_stopped_t()
98 const view_s_t data(Kokkos::view_alloc(
"data - shared space"));
100 experimental::execution::single_thread_context stc{};
104 stdexec::inplace_stop_source source;
106 auto stc_then_continues_on_esc_sndr = stdexec::schedule(stc.get_scheduler()) | stdexec::then([]()
noexcept { })
111 stdexec::get_completion_signatures<decltype(stc_then_continues_on_esc_sndr), env_with_stop_token_t>()
112 == stdexec::completion_signatures<stdexec::set_value_t(), stdexec::set_stopped_t()>{});
114 auto stc_then_continues_on_esc_then_sndr =
115 std::move(stc_then_continues_on_esc_sndr)
120 stdexec::get_completion_signatures<decltype(stc_then_continues_on_esc_then_sndr), env_with_stop_token_t>()
121 == stdexec::completion_signatures<
122 stdexec::set_value_t(),
123 stdexec::set_error_t(std::exception_ptr),
124 stdexec::set_stopped_t()
127 auto stc_then_continues_on_esc_then_then_sndr =
128 std::move(stc_then_continues_on_esc_then_sndr)
133 stdexec::get_completion_signatures<decltype(stc_then_continues_on_esc_then_then_sndr), env_with_stop_token_t>()
134 == stdexec::completion_signatures<
135 stdexec::set_value_t(),
136 stdexec::set_error_t(std::exception_ptr),
137 stdexec::set_stopped_t()
140 ASSERT_EQ(data(), 0) <<
"Eager execution is not allowed.";
142 ASSERT_FALSE(source.stop_requested());
146 const auto res_A = stdexec::sync_wait(
147 stc_then_continues_on_esc_then_then_sndr
148 | stdexec::write_env(stdexec::prop{stdexec::get_stop_token, source.get_token()}));
150 ASSERT_TRUE(res_A.has_value());
152 ASSERT_EQ(data(), 2);
154 source.request_stop();
156 const auto res_B = stdexec::sync_wait(
157 std::move(stc_then_continues_on_esc_then_then_sndr)
158 | stdexec::write_env(stdexec::prop{stdexec::get_stop_token, source.get_token()}));
160 ASSERT_FALSE(res_B.has_value());
162 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< Exec >
Kokkos::View< value_t, Kokkos::SharedSpace > view_s_t
Kokkos::Execution::ExecutionSpaceContext< Exec > context_t