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::__mset<stdexec::set_value_t()>,
45 static_assert(stdexec::__mset_eq<
46 stdexec::__mset<stdexec::set_value_t(), stdexec::set_error_t(
float)>,
49 stdexec::completion_signatures<stdexec::set_error_t(
float)>,
61 static_assert(stdexec::__mset_eq<
62 stdexec::__mset<stdexec::set_value_t(), stdexec::set_stopped_t()>,
65 stdexec::completion_signatures<>,
75 static_assert(stdexec::__mset_eq<
76 stdexec::__mset<stdexec::set_value_t(), stdexec::set_stopped_t(), stdexec::set_error_t(
float)>,
79 stdexec::completion_signatures<stdexec::set_error_t(
float)>,
96 const view_s_t data(Kokkos::view_alloc(
"data - shared space"));
98 experimental::execution::single_thread_context stc{};
102 stdexec::inplace_stop_source source;
104 auto stc_then_continues_on_esc_sndr = stdexec::schedule(stc.get_scheduler()) | stdexec::then([]()
noexcept { })
108 static_assert(stdexec::__mset_eq<
109 stdexec::__mset<stdexec::set_value_t(), stdexec::set_stopped_t()>,
110 stdexec::__completion_signatures_of_t<
decltype(stc_then_continues_on_esc_sndr),
env_with_stop_token_t>
113 auto stc_then_continues_on_esc_then_sndr =
114 std::move(stc_then_continues_on_esc_sndr)
120 stdexec::__mset<stdexec::set_value_t(), stdexec::set_error_t(std::exception_ptr), stdexec::set_stopped_t()>,
121 stdexec::__completion_signatures_of_t<
decltype(stc_then_continues_on_esc_then_sndr),
env_with_stop_token_t>
124 auto stc_then_continues_on_esc_then_then_sndr =
125 std::move(stc_then_continues_on_esc_then_sndr)
131 stdexec::__mset<stdexec::set_value_t(), stdexec::set_error_t(std::exception_ptr), stdexec::set_stopped_t()>,
132 stdexec::__completion_signatures_of_t<
133 decltype(stc_then_continues_on_esc_then_then_sndr),
138 ASSERT_EQ(data(), 0) <<
"Eager execution is not allowed.";
140 ASSERT_FALSE(source.stop_requested());
144 const auto res_A = stdexec::sync_wait(
145 stc_then_continues_on_esc_then_then_sndr
146 | stdexec::write_env(stdexec::prop{stdexec::get_stop_token, source.get_token()}));
148 ASSERT_TRUE(res_A.has_value());
150 ASSERT_EQ(data(), 2);
152 source.request_stop();
154 const auto res_B = stdexec::sync_wait(
155 std::move(stc_then_continues_on_esc_then_then_sndr)
156 | stdexec::write_env(stdexec::prop{stdexec::get_stop_token, source.get_token()}));
158 ASSERT_FALSE(res_B.has_value());
160 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.
decltype(completion_signatures_add< Sndr, ExtraSigs, Env... >()) completion_signatures_add_t
consteval bool test_add_nothing_empty_env()
consteval bool test_add_error_stop_env()
decltype(stdexec::schedule(std::declval< experimental::execution::single_thread_context >().get_scheduler())|stdexec::then([]() noexcept { })) sndr_t
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