//===----------------------------------------------------------------------===// // // Part of CUDA Experimental in CUDA C++ Core Libraries, // under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. // //===----------------------------------------------------------------------===// #pragma once #include #include #include "testing.cuh" // IWYU pragma: keep namespace ex = cuda::experimental::execution; namespace { namespace _dummy { template struct _attrs_t { _CCCL_HOST_DEVICE constexpr auto query(ex::get_completion_scheduler_t) const noexcept; _CCCL_HOST_DEVICE constexpr auto query(ex::get_completion_domain_t) const noexcept { return Domain{}; } }; template struct _opstate_t : cuda::__immovable { using operation_state_concept = ex::operation_state_t; _CCCL_HOST_DEVICE constexpr _opstate_t(Rcvr rcvr) noexcept : _rcvr(static_cast(rcvr)) {} _CCCL_HOST_DEVICE constexpr void start() noexcept { ex::set_value(static_cast(_rcvr)); } Rcvr _rcvr; }; template struct _sndr_t { using sender_concept = ex::sender_t; template _CCCL_HOST_DEVICE static _CCCL_CONSTEVAL auto get_completion_signatures() noexcept { return ex::completion_signatures(); } template _CCCL_HOST_DEVICE constexpr auto connect(Rcvr rcvr) const noexcept -> _opstate_t { return _opstate_t(static_cast(rcvr)); } [[nodiscard]] _CCCL_HOST_DEVICE constexpr auto get_env() const noexcept { return _attrs_t{}; } }; } // namespace _dummy //! Scheduler that returns a sender that always completes inline (successfully). template struct dummy_scheduler : _dummy::_attrs_t { using scheduler_concept = ex::scheduler_t; _CCCL_HOST_DEVICE static constexpr auto schedule() noexcept -> _dummy::_sndr_t { return {}; } _CCCL_HOST_DEVICE friend constexpr bool operator==(dummy_scheduler, dummy_scheduler) noexcept { return true; } _CCCL_HOST_DEVICE friend constexpr bool operator!=(dummy_scheduler, dummy_scheduler) noexcept { return false; } }; namespace _dummy { template _CCCL_HOST_DEVICE constexpr auto _attrs_t::query(ex::get_completion_scheduler_t) const noexcept { return dummy_scheduler{}; } } // namespace _dummy } // namespace