kokkos-execution 0.0.1
Loading...
Searching...
No Matches
test_when_all.cpp
Go to the documentation of this file.
1#include "gtest/gtest.h"
2
4PRAGMA_DIAGNOSTIC_PUSH
6#include "exec/single_thread_context.hpp"
7PRAGMA_DIAGNOSTIC_POP
8
10
21
22namespace Tests {
23
24using sndr_A_t = decltype(stdexec::when_all(
25 stdexec::schedule(stdexec::inline_scheduler{}) | stdexec::then([]() { }),
26 stdexec::just() | stdexec::then([]() { })));
27
28using sndr_B_t = decltype(stdexec::when_all(
29 stdexec::schedule(stdexec::inline_scheduler{}) | stdexec::then([]() { }),
30 stdexec::schedule(std::declval<exec::single_thread_context>().get_scheduler()) | stdexec::then([]() { })));
31
34 static_assert(std::same_as<
35 stdexec::__completion_domain_of_t<stdexec::set_value_t, sndr_A_t>,
36 stdexec::indeterminate_domain<>
37 >);
38
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
42 >);
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
46 >);
47
48 return true;
49}
50
51static_assert(test_when_all_completion_domain());
52
55 static_assert(!stdexec::dependent_sender<sndr_A_t>);
56 static_assert(stdexec::dependent_sender<sndr_B_t>);
57
58 return true;
59}
60
61static_assert(test_when_all_dependent_sender());
62
64TEST(WhenAll, no_branch) {
65 auto sndr = stdexec::when_all();
66
67 static_assert(std::same_as<stdexec::tag_of_t<decltype(sndr)>, stdexec::just_t>);
68
69 static_assert(!stdexec::dependent_sender<decltype(sndr)>);
70
71 static_assert(
72 stdexec::get_completion_signatures<decltype(sndr)>()
73 == stdexec::completion_signatures<stdexec::set_value_t()>{});
74
75 ASSERT_TRUE(stdexec::sync_wait(std::move(sndr)).has_value()); // NOLINT(performance-move-const-arg)
76}
77
79TEST(WhenAll, single_branch) {
80 auto sndr = stdexec::just(42);
81
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))), // NOLINT(performance-move-const-arg)
85 decltype(sndr)
86 >);
87
88 auto&& w_a = stdexec::when_all(sndr);
89
91 ASSERT_NE(std::addressof(w_a), std::addressof(sndr));
92
93 sndr = stdexec::just(56);
94
95 const auto result = stdexec::sync_wait(std::move(w_a)); // NOLINT(performance-move-const-arg)
96 ASSERT_TRUE(result.has_value());
97 ASSERT_EQ(std::get<0>(*result), 42);
98 ASSERT_EQ(
99 std::get<0>(*stdexec::sync_wait(stdexec::when_all(std::move(sndr)))), 56); // NOLINT(performance-move-const-arg)
100
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&&>);
106}
107
109TEST(WhenAllTest, only_schedule_sender_branches) {
110 exec::single_thread_context stc{};
111
112 stdexec::sync_wait(
113 stdexec::when_all(
114 stdexec::schedule(stc.get_scheduler()),
115 stdexec::schedule(stc.get_scheduler()),
116 stdexec::schedule(stc.get_scheduler())));
117}
118
119} // namespace Tests
#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