@@ -198,6 +198,99 @@ namespace
198
198
assert (dom == domain{17 });
199
199
}
200
200
201
+ namespace completion_domain {
202
+ struct domain {};
203
+ struct other {};
204
+ struct common {};
205
+ struct none {};
206
+ struct mismatch {};
207
+
208
+ template <typename > struct env ;
209
+ template <typename > struct scheduler ;
210
+
211
+ template <typename W>
212
+ struct sender
213
+ {
214
+ using sender_concept = test_std::sender_t ;
215
+ auto get_env () const noexcept -> env<W> { return {}; }
216
+ };
217
+ template <typename W>
218
+ struct scheduler
219
+ {
220
+ using scheduler_concept = test_std::scheduler_t ;
221
+ auto schedule () noexcept -> sender<W> { return {}; }
222
+ auto operator == (scheduler const &) const -> bool = default ;
223
+ auto query (test_std::get_domain_t const &) const noexcept -> domain { return {}; }
224
+ };
225
+
226
+ template <>
227
+ struct scheduler <none>
228
+ {
229
+ using scheduler_concept = test_std::scheduler_t ;
230
+ auto schedule () noexcept -> sender<none> { return {}; }
231
+ auto operator == (scheduler const &) const -> bool = default ;
232
+ };
233
+
234
+ template <>
235
+ struct env <common>
236
+ {
237
+ template <typename Tag>
238
+ auto query (test_std::get_completion_scheduler_t <Tag> const &) const noexcept
239
+ -> scheduler<common>
240
+ {
241
+ return {};
242
+ }
243
+ };
244
+
245
+ template <>
246
+ struct env <none>
247
+ {
248
+ template <typename Tag>
249
+ auto query (test_std::get_completion_scheduler_t <Tag> const &) const noexcept
250
+ -> scheduler<none>
251
+ {
252
+ return {};
253
+ }
254
+ };
255
+
256
+ struct one_missing {};
257
+ template <>
258
+ struct env <one_missing>
259
+ {
260
+ template <typename Tag>
261
+ auto query (test_std::get_completion_scheduler_t <Tag> const &) const noexcept
262
+ -> scheduler<one_missing>
263
+ {
264
+ return {};
265
+ }
266
+ auto query (test_std::get_completion_scheduler_t <test_std::set_error_t > const &) const noexcept = delete;
267
+ };
268
+
269
+ struct two_missing {};
270
+ template <>
271
+ struct env <two_missing>
272
+ {
273
+ auto query (test_std::get_completion_scheduler_t <test_std::set_value_t > const &) const noexcept
274
+ -> scheduler<two_missing>
275
+ {
276
+ return {};
277
+ }
278
+ };
279
+ }
280
+ auto test_completion_domain () -> void
281
+ {
282
+ namespace cd = completion_domain;
283
+ static_assert (test_std::sender<cd::sender<cd::common>>);
284
+ static_assert (std::same_as<cd::env<cd::common>, decltype (test_std::get_env (cd::sender<cd::common>{}))>);
285
+ static_assert (std::same_as<cd::domain, decltype (test_std::get_domain (test_std::get_completion_scheduler<test_std::set_error_t >(cd::env<cd::common>{})))>);
286
+ static_assert (std::same_as<cd::domain, decltype (test_std::get_domain (test_std::get_completion_scheduler<test_std::set_stopped_t >(cd::env<cd::common>{})))>);
287
+ static_assert (std::same_as<cd::domain, decltype (test_std::get_domain (test_std::get_completion_scheduler<test_std::set_value_t >(cd::env<cd::common>{})))>);
288
+ static_assert (std::same_as<cd::domain, decltype (test_detail::completion_domain ((cd::sender<cd::common>{})))>);
289
+ static_assert (std::same_as<cd::domain, decltype (test_detail::completion_domain ((cd::sender<cd::one_missing>{})))>);
290
+ static_assert (std::same_as<cd::domain, decltype (test_detail::completion_domain ((cd::sender<cd::two_missing>{})))>);
291
+ static_assert (std::same_as<test_std::default_domain, decltype (test_detail::completion_domain ((cd::sender<cd::none>{})))>);
292
+ }
293
+
201
294
auto test_query_with_default () -> void
202
295
{
203
296
auto result1{test_detail::query_with_default (test_std::get_domain,
@@ -215,11 +308,14 @@ namespace
215
308
216
309
auto test_get_domain_late () -> void
217
310
{
311
+ #if 0
218
312
static_assert(test_std::sender<test_sender>);
219
313
env const e;
220
314
test_sender const sndr;
221
315
auto dom{test_detail::get_domain_late(sndr, e)};
222
316
(void)dom;
317
+ //-dk:TOO test
318
+ #endif
223
319
}
224
320
}
225
321
@@ -230,6 +326,7 @@ auto main() -> int
230
326
test_join_env ();
231
327
test_sched_attrs ();
232
328
test_sched_env ();
329
+ test_completion_domain ();
233
330
test_query_with_default ();
234
331
test_get_domain_late ();
235
332
}
0 commit comments