kokkos-execution 0.0.1
Loading...
Searching...
No Matches
test_diagnostics.cpp
Go to the documentation of this file.
1#include "gtest/gtest.h"
2
4
15
16namespace Tests::Impl {
17
18template <typename T, bool HasDiagnose = true>
19struct SomeTrait {
20 static constexpr bool value = std::integral<T>;
21
22 static constexpr auto diagnose() noexcept requires HasDiagnose
23 {
24 if constexpr (value) {
25 return stdexec::__msuccess{};
26 } else {
27 return stdexec::__mexception<T>{};
28 }
29 }
30};
31
35
42
44consteval bool test_diagnose_t_single() {
45 static_assert(std::same_as<diagnose_ok_t, stdexec::__msuccess>);
46 static_assert(std::same_as<diagnose_ko_A_t, stdexec::__mexception<std::string>>);
47 static_assert(std::same_as<diagnose_ko_B_t, stdexec::__mexception<std::string_view>>);
48
49 static_assert(!stdexec::__merror<diagnose_ok_t>);
50 static_assert(stdexec::__merror<diagnose_ko_A_t>);
51 static_assert(stdexec::__merror<diagnose_ko_B_t>);
52
53 return true;
54}
55
56static_assert(test_diagnose_t_single());
57
59consteval bool test_diagnose_t_many() {
60 static_assert(std::same_as<diagnose_ok_ok_t, stdexec::__mlist<stdexec::__msuccess, stdexec::__msuccess>>);
61 static_assert(
62 std::same_as<diagnose_ok_ko_A_t, stdexec::__mlist<stdexec::__msuccess, stdexec::__mexception<std::string>>>);
63 static_assert(std::same_as<
65 stdexec::__mlist<stdexec::__mexception<std::string>, stdexec::__mexception<std::string_view>>
66 >);
67
69 static_assert(!stdexec::__merror<diagnose_ok_ok_t>);
70 static_assert(!stdexec::__merror<diagnose_ok_ko_A_t>);
71 static_assert(!stdexec::__merror<diagnose_ko_A_ko_B_t>);
72
73 return true;
74}
75
76static_assert(test_diagnose_t_many());
77
79consteval bool test_first_error_t() {
80 static_assert(std::same_as<Kokkos::Execution::Impl::first_error_t<diagnose_ok_t>, stdexec::__msuccess>);
81 static_assert(
82 std::same_as<Kokkos::Execution::Impl::first_error_t<diagnose_ko_A_t>, stdexec::__mexception<std::string>>);
83 static_assert(
84 std::same_as<Kokkos::Execution::Impl::first_error_t<diagnose_ko_B_t>, stdexec::__mexception<std::string_view>>);
85 static_assert(std::same_as<Kokkos::Execution::Impl::first_error_t<diagnose_ok_ok_t>, stdexec::__msuccess>);
86 static_assert(
87 std::same_as<Kokkos::Execution::Impl::first_error_t<diagnose_ok_ko_A_t>, stdexec::__mexception<std::string>>);
88 static_assert(
89 std::same_as<Kokkos::Execution::Impl::first_error_t<diagnose_ko_A_ko_B_t>, stdexec::__mexception<std::string>>);
90
91 return true;
92}
93
94static_assert(test_first_error_t());
95
97consteval bool test_keep_errors_t() {
98 static_assert(std::same_as<Kokkos::Execution::Impl::keep_errors_t<diagnose_ok_t>, stdexec::__msuccess>);
99 static_assert(
100 std::same_as<Kokkos::Execution::Impl::keep_errors_t<diagnose_ko_A_t>, stdexec::__mexception<std::string>>);
101 static_assert(std::same_as<Kokkos::Execution::Impl::keep_errors_t<diagnose_ok_ok_t>, stdexec::__mlist<>>);
102 static_assert(std::same_as<
104 stdexec::__mlist<stdexec::__mexception<std::string>>
105 >);
106 static_assert(std::same_as<
108 stdexec::__mlist<stdexec::__mexception<std::string>, stdexec::__mexception<std::string_view>>
109 >);
110
111 return true;
112}
113
114static_assert(test_keep_errors_t());
115
116template <typename T>
118 static constexpr auto diagnose() noexcept {
119 static_assert(false, "This should not happen.");
120 return stdexec::__mexception<>{};
121 }
122};
123
142
143static_assert(test_mandate_or_explain());
144
146consteval bool test_rebind_t() {
147 using error_t = stdexec::__mexception<char>;
148 using children_t = stdexec::__mlist<stdexec::__msuccess, error_t>;
150
151 static_assert(std::same_as<rebind_t, Kokkos::Execution::Impl::WITH_CHILDREN_ERRORS<stdexec::__msuccess, error_t>>);
152
153 return true;
154}
155
156static_assert(test_rebind_t());
157
159consteval bool test_collapse_t() {
160 static_assert(std::same_as<Kokkos::Execution::Impl::collapse_t<char>, char>);
161 static_assert(std::same_as<Kokkos::Execution::Impl::collapse_t<stdexec::__mlist<char>>, char>);
162 static_assert(
163 std::same_as<Kokkos::Execution::Impl::collapse_t<stdexec::__mlist<char, char>>, stdexec::__mlist<char, char>>);
164
165 return true;
166}
167
168static_assert(test_collapse_t());
169
171TEST(is, useless) {
172}
173
174} // namespace Tests::Impl
constexpr bool mandate_or_explain() noexcept
If T::value is false, diagnose.
typename KeepErrors< List >::type keep_errors_t
decltype(rebind< To >(static_cast< From * >(nullptr))) rebind_t
typename Diagnose< Ts... >::type diagnose_t
consteval bool test_diagnose_t_single()
consteval bool test_mandate_or_explain()
Kokkos::Execution::Impl::diagnose_t< trait_ok_t, trait_ko_A_t > diagnose_ok_ko_A_t
consteval bool test_collapse_t()
consteval bool test_rebind_t()
consteval bool test_keep_errors_t()
SomeTrait< int > trait_ok_t
Kokkos::Execution::Impl::diagnose_t< trait_ok_t > diagnose_ok_t
SomeTrait< std::string_view > trait_ko_B_t
consteval bool test_first_error_t()
Kokkos::Execution::Impl::diagnose_t< trait_ok_t, trait_ok_t > diagnose_ok_ok_t
Kokkos::Execution::Impl::diagnose_t< trait_ko_A_t > diagnose_ko_A_t
SomeTrait< std::string > trait_ko_A_t
consteval bool test_diagnose_t_many()
Kokkos::Execution::Impl::diagnose_t< trait_ko_B_t > diagnose_ko_B_t
Kokkos::Execution::Impl::diagnose_t< trait_ko_A_t, trait_ko_B_t > diagnose_ko_A_ko_B_t
static constexpr auto diagnose() noexcept
static constexpr auto diagnose() noexcept