|
14 | 14 | // * limitations under the License.
|
15 | 15 | // */
|
16 | 16 |
|
17 |
| -// #include <catch2/catch.hpp> |
18 |
| -// #include <stdexec/execution.hpp> |
19 |
| -// #include <test_common/receivers.hpp> |
| 17 | +#include <catch2/catch.hpp> |
| 18 | +#include <stdexec/execution.hpp> |
| 19 | +#include <test_common/receivers.hpp> |
20 | 20 |
|
21 |
| -// namespace ex = stdexec; |
| 21 | +namespace ex = stdexec; |
22 | 22 |
|
23 |
| -// struct recv_no_set_value { |
24 |
| -// friend void tag_invoke(ex::set_stopped_t, recv_no_set_value) noexcept {} |
25 |
| -// friend void tag_invoke(ex::set_error_t, recv_no_set_value, std::exception_ptr) noexcept {} |
26 |
| -// friend ex::env<> tag_invoke(ex::get_env_t, const recv_no_set_value&) noexcept { |
27 |
| -// return {}; |
28 |
| -// } |
29 |
| -// }; |
| 23 | +struct recv_no_set_value { |
| 24 | + friend void tag_invoke(ex::set_stopped_t, recv_no_set_value) noexcept {} |
| 25 | + friend void tag_invoke(ex::set_error_t, recv_no_set_value, std::exception_ptr) noexcept {} |
| 26 | + friend ex::env<> tag_invoke(ex::get_env_t, const recv_no_set_value&) noexcept { |
| 27 | + return {}; |
| 28 | + } |
| 29 | +}; |
30 | 30 |
|
31 |
| -// struct recv_set_value_except { |
32 |
| -// friend void tag_invoke(ex::set_value_t, recv_set_value_except) {} |
33 |
| -// friend void tag_invoke(ex::set_stopped_t, recv_set_value_except) noexcept {} |
34 |
| -// friend void tag_invoke(ex::set_error_t, recv_set_value_except, std::exception_ptr) noexcept {} |
35 |
| -// friend ex::env<> tag_invoke(ex::get_env_t, const recv_set_value_except&) noexcept { |
36 |
| -// return {}; |
37 |
| -// } |
38 |
| -// }; |
| 31 | +struct recv_set_value_except { |
| 32 | + friend void tag_invoke(ex::set_value_t, recv_set_value_except) {} |
| 33 | + friend void tag_invoke(ex::set_stopped_t, recv_set_value_except) noexcept {} |
| 34 | + friend void tag_invoke(ex::set_error_t, recv_set_value_except, std::exception_ptr) noexcept {} |
| 35 | + friend ex::env<> tag_invoke(ex::get_env_t, const recv_set_value_except&) noexcept { |
| 36 | + return {}; |
| 37 | + } |
| 38 | +}; |
39 | 39 |
|
40 |
| -// struct recv_set_value_noexcept { |
41 |
| -// friend void tag_invoke(ex::set_value_t, recv_set_value_noexcept) noexcept {} |
42 |
| -// friend void tag_invoke(ex::set_stopped_t, recv_set_value_noexcept) noexcept {} |
43 |
| -// friend void tag_invoke(ex::set_error_t, recv_set_value_noexcept, std::exception_ptr) noexcept |
44 |
| -// {} friend ex::env<> tag_invoke(ex::get_env_t, const recv_set_value_noexcept&) noexcept { |
45 |
| -// return {}; |
46 |
| -// } |
47 |
| -// }; |
| 40 | +struct recv_set_value_noexcept { |
| 41 | + friend void tag_invoke(ex::set_value_t, recv_set_value_noexcept) noexcept {} |
| 42 | + friend void tag_invoke(ex::set_stopped_t, recv_set_value_noexcept) noexcept {} |
| 43 | + friend void tag_invoke(ex::set_error_t, recv_set_value_noexcept, std::exception_ptr) noexcept |
| 44 | + {} friend ex::env<> tag_invoke(ex::get_env_t, const recv_set_value_noexcept&) noexcept { |
| 45 | + return {}; |
| 46 | + } |
| 47 | +}; |
48 | 48 |
|
49 |
| -// struct recv_set_error_except { |
50 |
| -// friend void tag_invoke(ex::set_value_t, recv_set_error_except) noexcept {} |
51 |
| -// friend void tag_invoke(ex::set_stopped_t, recv_set_error_except) noexcept {} |
52 |
| -// friend void tag_invoke(ex::set_error_t, recv_set_error_except, std::exception_ptr) { |
53 |
| -// throw std::logic_error{"err"}; |
54 |
| -// } |
55 |
| -// friend ex::env<> tag_invoke(ex::get_env_t, const recv_set_error_except&) noexcept { |
56 |
| -// return {}; |
57 |
| -// } |
58 |
| -// }; |
59 |
| -// struct recv_set_stopped_except { |
60 |
| -// friend void tag_invoke(ex::set_value_t, recv_set_stopped_except) noexcept {} |
61 |
| -// friend void tag_invoke(ex::set_stopped_t, recv_set_stopped_except) { throw |
62 |
| -// std::logic_error{"err"}; } friend void tag_invoke(ex::set_error_t, recv_set_stopped_except, |
63 |
| -// std::exception_ptr) noexcept {} friend ex::env<> tag_invoke(ex::get_env_t, const |
64 |
| -// recv_set_stopped_except&) noexcept { |
65 |
| -// return {}; |
66 |
| -// } |
67 |
| -// }; |
| 49 | +struct recv_set_error_except { |
| 50 | + friend void tag_invoke(ex::set_value_t, recv_set_error_except) noexcept {} |
| 51 | + friend void tag_invoke(ex::set_stopped_t, recv_set_error_except) noexcept {} |
| 52 | + friend void tag_invoke(ex::set_error_t, recv_set_error_except, std::exception_ptr) { |
| 53 | + throw std::logic_error{"err"}; |
| 54 | + } |
| 55 | + friend ex::env<> tag_invoke(ex::get_env_t, const recv_set_error_except&) noexcept { |
| 56 | + return {}; |
| 57 | + } |
| 58 | +}; |
| 59 | +struct recv_set_stopped_except { |
| 60 | + friend void tag_invoke(ex::set_value_t, recv_set_stopped_except) noexcept {} |
| 61 | + friend void tag_invoke(ex::set_stopped_t, recv_set_stopped_except) { throw |
| 62 | + std::logic_error{"err"}; } friend void tag_invoke(ex::set_error_t, recv_set_stopped_except, |
| 63 | + std::exception_ptr) noexcept {} friend ex::env<> tag_invoke(ex::get_env_t, const |
| 64 | + recv_set_stopped_except&) noexcept { |
| 65 | + return {}; |
| 66 | + } |
| 67 | +}; |
68 | 68 |
|
69 |
| -// struct recv_non_movable { |
70 |
| -// recv_non_movable() = default; |
71 |
| -// ~recv_non_movable() = default; |
72 |
| -// recv_non_movable(recv_non_movable&&) = delete; |
73 |
| -// recv_non_movable& operator=(recv_non_movable&&) = delete; |
74 |
| -// recv_non_movable(const recv_non_movable&) = default; |
75 |
| -// recv_non_movable& operator=(const recv_non_movable&) = default; |
| 69 | +struct recv_non_movable { |
| 70 | + recv_non_movable() = default; |
| 71 | + ~recv_non_movable() = default; |
| 72 | + recv_non_movable(recv_non_movable&&) = delete; |
| 73 | + recv_non_movable& operator=(recv_non_movable&&) = delete; |
| 74 | + recv_non_movable(const recv_non_movable&) = default; |
| 75 | + recv_non_movable& operator=(const recv_non_movable&) = default; |
76 | 76 |
|
77 |
| -// friend void tag_invoke(ex::set_value_t, recv_non_movable) noexcept {} |
78 |
| -// friend void tag_invoke(ex::set_stopped_t, recv_non_movable) noexcept {} |
79 |
| -// friend void tag_invoke(ex::set_error_t, recv_non_movable, std::exception_ptr) noexcept {} |
80 |
| -// friend ex::env<> tag_invoke(ex::get_env_t, const recv_non_movable&) noexcept { |
81 |
| -// return {}; |
82 |
| -// } |
83 |
| -// }; |
| 77 | + friend void tag_invoke(ex::set_value_t, recv_non_movable) noexcept {} |
| 78 | + friend void tag_invoke(ex::set_stopped_t, recv_non_movable) noexcept {} |
| 79 | + friend void tag_invoke(ex::set_error_t, recv_non_movable, std::exception_ptr) noexcept {} |
| 80 | + friend ex::env<> tag_invoke(ex::get_env_t, const recv_non_movable&) noexcept { |
| 81 | + return {}; |
| 82 | + } |
| 83 | +}; |
84 | 84 |
|
85 |
| -// TEST_CASE("receiver types satisfy the receiver concept", "[concepts][receiver]") { |
86 |
| -// using namespace empty_recv; |
| 85 | +TEST_CASE("receiver types satisfy the receiver concept", "[concepts][receiver]") { |
| 86 | + using namespace empty_recv; |
87 | 87 |
|
88 |
| -// REQUIRE(ex::receiver<recv0>); |
89 |
| -// REQUIRE(ex::receiver<recv_int>); |
90 |
| -// REQUIRE(ex::receiver<recv0_ec>); |
91 |
| -// REQUIRE(ex::receiver<recv_int_ec>); |
92 |
| -// REQUIRE(ex::receiver<recv0_ec, std::error_code>); |
93 |
| -// REQUIRE(ex::receiver<recv_int_ec, std::error_code>); |
94 |
| -// REQUIRE(ex::receiver<expect_void_receiver>); |
95 |
| -// REQUIRE(ex::receiver<expect_void_receiver_ex>); |
96 |
| -// REQUIRE(ex::receiver<expect_value_receiver<ex::env<>, int>>); |
97 |
| -// REQUIRE(ex::receiver<expect_value_receiver<ex::env<>, double>>); |
98 |
| -// REQUIRE(ex::receiver<expect_stopped_receiver>); |
99 |
| -// REQUIRE(ex::receiver<expect_stopped_receiver_ex>); |
100 |
| -// REQUIRE(ex::receiver<expect_error_receiver>); |
101 |
| -// REQUIRE(ex::receiver<expect_error_receiver_ex>); |
102 |
| -// REQUIRE(ex::receiver<logging_receiver>); |
103 |
| -// } |
| 88 | + REQUIRE(ex::receiver<recv0>); |
| 89 | + REQUIRE(ex::receiver<recv_int>); |
| 90 | + REQUIRE(ex::receiver<recv0_ec>); |
| 91 | + REQUIRE(ex::receiver<recv_int_ec>); |
| 92 | + REQUIRE(ex::receiver<expect_void_receiver<>>); |
| 93 | + REQUIRE(ex::receiver<expect_void_receiver_ex>); |
| 94 | + REQUIRE(ex::receiver<expect_value_receiver<ex::env<>, int>>); |
| 95 | + REQUIRE(ex::receiver<expect_value_receiver<ex::env<>, double>>); |
| 96 | + REQUIRE(ex::receiver<expect_stopped_receiver<>>); |
| 97 | + REQUIRE(ex::receiver<expect_stopped_receiver_ex<>>); |
| 98 | + REQUIRE(ex::receiver<expect_error_receiver<>>); |
| 99 | + REQUIRE(ex::receiver<expect_error_receiver_ex<std::error_code>>); |
| 100 | + REQUIRE(ex::receiver<logging_receiver>); |
| 101 | +} |
104 | 102 |
|
105 |
| -// TEST_CASE("receiver types satisfy the receiver_of concept", "[concepts][receiver]") { |
106 |
| -// using namespace empty_recv; |
| 103 | +TEST_CASE("receiver types satisfy the receiver_of concept", "[concepts][receiver]") { |
| 104 | + using namespace empty_recv; |
107 | 105 |
|
108 |
| -// REQUIRE(ex::receiver_of<recv0>); |
109 |
| -// REQUIRE(ex::receiver_of<recv_int, int>); |
110 |
| -// REQUIRE(ex::receiver_of<recv0_ec>); |
111 |
| -// REQUIRE(ex::receiver_of<recv_int_ec, int>); |
112 |
| -// REQUIRE(ex::receiver_of<expect_void_receiver>); |
113 |
| -// REQUIRE(ex::receiver_of<expect_void_receiver_ex>); |
114 |
| -// REQUIRE(ex::receiver_of<expect_value_receiver<ex::env<>, int>, int>); |
115 |
| -// REQUIRE(ex::receiver_of<expect_value_receiver<ex::env<>, double>, double>); |
116 |
| -// REQUIRE(ex::receiver_of<expect_stopped_receiver, char>); |
117 |
| -// REQUIRE(ex::receiver_of<expect_stopped_receiver_ex, char>); |
118 |
| -// REQUIRE(ex::receiver_of<expect_error_receiver, char>); |
119 |
| -// REQUIRE(ex::receiver_of<expect_error_receiver_ex, char>); |
120 |
| -// REQUIRE(ex::receiver_of<logging_receiver>); |
121 |
| -// } |
| 106 | + REQUIRE(ex::receiver_of<recv_int, int>); |
| 107 | + REQUIRE(ex::receiver_of<recv0_ec, ex::completion_signatures<ex::set_error_t(std::error_code)>>); |
| 108 | + REQUIRE(ex::receiver_of<recv_int_ec, ex::completion_signatures<ex::set_error_t(std::error_code)>>); |
| 109 | + REQUIRE(ex::receiver_of<recv_int_ec, int>); |
| 110 | + REQUIRE(ex::receiver_of<expect_value_receiver<ex::env<>, int>, ex::completion_signatures<ex::set_value_t(int)>>); |
| 111 | + REQUIRE(ex::receiver_of<expect_value_receiver<ex::env<>, double>, double>); |
| 112 | + REQUIRE(ex::receiver_of<expect_stopped_receiver<>, char>); |
| 113 | + REQUIRE(ex::receiver_of<expect_stopped_receiver_ex<>, char>); |
| 114 | + REQUIRE(ex::receiver_of<expect_error_receiver<>, char>); |
| 115 | + REQUIRE(ex::receiver_of<expect_error_receiver_ex<std::error_code>, char>); |
| 116 | + REQUIRE(ex::receiver_of<logging_receiver, char>); |
| 117 | +} |
122 | 118 |
|
123 |
| -// TEST_CASE( |
124 |
| -// "receiver type w/o set_value models receiver but not receiver_of", "[concepts][receiver]") { |
125 |
| -// REQUIRE(ex::receiver<recv_no_set_value>); |
126 |
| -// REQUIRE(!ex::receiver_of<recv_no_set_value>); |
127 |
| -// } |
| 119 | +TEST_CASE( |
| 120 | + "receiver type w/o set_value models receiver but not receiver_of", "[concepts][receiver]") { |
| 121 | + REQUIRE(ex::receiver<recv_no_set_value>); |
| 122 | + REQUIRE(!ex::receiver_of<recv_no_set_value, int>); |
| 123 | +} |
128 | 124 |
|
129 |
| -// TEST_CASE("type with set_value noexcept is a receiver", "[concepts][receiver]") { |
130 |
| -// REQUIRE(ex::receiver<recv_set_value_noexcept>); |
131 |
| -// REQUIRE(ex::receiver_of<recv_set_value_noexcept>); |
132 |
| -// } |
133 |
| -// TEST_CASE("type with throwing set_value is not a receiver", "[concepts][receiver]") { |
134 |
| -// REQUIRE(!ex::receiver<recv_set_value_except>); |
135 |
| -// REQUIRE(!ex::receiver_of<recv_set_value_except>); |
136 |
| -// } |
137 |
| -// TEST_CASE("type with throwing set_error is not a receiver", "[concepts][receiver]") { |
138 |
| -// REQUIRE(!ex::receiver<recv_set_error_except>); |
139 |
| -// REQUIRE(!ex::receiver_of<recv_set_error_except>); |
140 |
| -// } |
141 |
| -// TEST_CASE("type with throwing set_stopped is not a receiver", "[concepts][receiver]") { |
142 |
| -// REQUIRE(!ex::receiver<recv_set_stopped_except>); |
143 |
| -// REQUIRE(!ex::receiver_of<recv_set_stopped_except>); |
144 |
| -// } |
| 125 | +TEST_CASE("type with set_value noexcept is a receiver", "[concepts][receiver]") { |
| 126 | + REQUIRE(ex::receiver<recv_set_value_noexcept>); |
| 127 | + REQUIRE(ex::receiver_of<recv_set_value_noexcept, int>); |
| 128 | +} |
| 129 | +TEST_CASE("type with throwing set_value is not a receiver", "[concepts][receiver]") { |
| 130 | + REQUIRE(!ex::receiver<recv_set_value_except>); |
| 131 | + REQUIRE(!ex::receiver_of<recv_set_value_except, int>); |
| 132 | +} |
| 133 | +TEST_CASE("type with throwing set_error is not a receiver", "[concepts][receiver]") { |
| 134 | + REQUIRE(!ex::receiver<recv_set_error_except>); |
| 135 | + REQUIRE(!ex::receiver_of<recv_set_error_except, int>); |
| 136 | +} |
| 137 | +TEST_CASE("type with throwing set_stopped is not a receiver", "[concepts][receiver]") { |
| 138 | + REQUIRE(!ex::receiver<recv_set_stopped_except>); |
| 139 | + REQUIRE(!ex::receiver_of<recv_set_stopped_except, int>); |
| 140 | +} |
145 | 141 |
|
146 |
| -// TEST_CASE("non-movable type is not a receiver", "[concepts][receiver]") { |
147 |
| -// REQUIRE(!ex::receiver<recv_non_movable>); |
148 |
| -// REQUIRE(!ex::receiver_of<recv_non_movable>); |
149 |
| -// } |
| 142 | +TEST_CASE("non-movable type is not a receiver", "[concepts][receiver]") { |
| 143 | + REQUIRE(!ex::receiver<recv_non_movable>); |
| 144 | + REQUIRE(!ex::receiver_of<recv_non_movable, int>); |
| 145 | +} |
0 commit comments