kokkos-execution
0.0.1
Toggle main menu visibility
Loading...
Searching...
No Matches
test_diagnostics.cpp
Go to the documentation of this file.
1
#include "gtest/gtest.h"
2
3
#include "
kokkos-execution/impl/diagnostics.hpp
"
4
15
16
namespace
Tests::Impl
{
17
18
template
<
typename
T,
bool
HasDiagnose = true>
19
struct
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
32
using
trait_ok_t
=
SomeTrait<int>
;
33
using
trait_ko_A_t
=
SomeTrait<std::string>
;
34
using
trait_ko_B_t
=
SomeTrait<std::string_view>
;
35
36
using
diagnose_ok_t
=
Kokkos::Execution::Impl::diagnose_t<trait_ok_t>
;
37
using
diagnose_ko_A_t
=
Kokkos::Execution::Impl::diagnose_t<trait_ko_A_t>
;
38
using
diagnose_ko_B_t
=
Kokkos::Execution::Impl::diagnose_t<trait_ko_B_t>
;
39
using
diagnose_ok_ok_t
=
Kokkos::Execution::Impl::diagnose_t<trait_ok_t, trait_ok_t>
;
40
using
diagnose_ok_ko_A_t
=
Kokkos::Execution::Impl::diagnose_t<trait_ok_t, trait_ko_A_t>
;
41
using
diagnose_ko_A_ko_B_t
=
Kokkos::Execution::Impl::diagnose_t<trait_ko_A_t, trait_ko_B_t>
;
42
44
consteval
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
56
static_assert
(
test_diagnose_t_single
());
57
59
consteval
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<
64
diagnose_ko_A_ko_B_t
,
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
76
static_assert
(
test_diagnose_t_many
());
77
79
consteval
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
94
static_assert
(
test_first_error_t
());
95
97
consteval
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<
103
Kokkos::Execution::Impl::keep_errors_t<diagnose_ok_ko_A_t>
,
104
stdexec::__mlist<stdexec::__mexception<std::string>>
105
>);
106
static_assert
(std::same_as<
107
Kokkos::Execution::Impl::keep_errors_t<diagnose_ko_A_ko_B_t>
,
108
stdexec::__mlist<stdexec::__mexception<std::string>, stdexec::__mexception<std::string_view>>
109
>);
110
111
return
true
;
112
}
113
114
static_assert
(
test_keep_errors_t
());
115
116
template
<
typename
T>
117
struct
SomeTraitWithComplexDiagnose
:
SomeTrait
<T, false> {
118
static
constexpr
auto
diagnose
() noexcept {
119
static_assert
(
false
,
"This should not happen."
);
120
return
stdexec::__mexception<>{};
121
}
122
};
123
129
consteval
bool
test_mandate_or_explain
() {
131
static_assert
(
Kokkos::Execution::Impl::mandate_or_explain<std::true_type>
());
132
static_assert
(
Kokkos::Execution::Impl::mandate_or_explain<SomeTrait<int>
>());
133
135
static_assert
(!
Kokkos::Execution::Impl::mandate_or_explain<SomeTrait<std::string, false>
>());
136
138
static_assert
(
Kokkos::Execution::Impl::mandate_or_explain<SomeTraitWithComplexDiagnose<int>
>());
139
140
return
true
;
141
}
142
143
static_assert
(
test_mandate_or_explain
());
144
146
consteval
bool
test_rebind_t
() {
147
using
error_t = stdexec::__mexception<char>;
148
using
children_t = stdexec::__mlist<stdexec::__msuccess, error_t>;
149
using
rebind_t =
Kokkos::Execution::Impl::rebind_t<Kokkos::Execution::Impl::WITH_CHILDREN_ERRORS, children_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
156
static_assert
(
test_rebind_t
());
157
159
consteval
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
168
static_assert
(
test_collapse_t
());
169
171
TEST(is, useless) {
172
}
173
174
}
// namespace Tests::Impl
diagnostics.hpp
Kokkos::Execution::Impl::mandate_or_explain
constexpr bool mandate_or_explain() noexcept
If T::value is false, diagnose.
Definition
diagnostics.hpp:135
Kokkos::Execution::Impl::keep_errors_t
typename KeepErrors< List >::type keep_errors_t
Definition
diagnostics.hpp:130
Kokkos::Execution::Impl::rebind_t
decltype(rebind< To >(static_cast< From * >(nullptr))) rebind_t
Definition
diagnostics.hpp:32
Kokkos::Execution::Impl::diagnose_t
typename Diagnose< Ts... >::type diagnose_t
Definition
diagnostics.hpp:67
Tests::Impl
Definition
test_compile_time_optional.cpp:16
Tests::Impl::test_diagnose_t_single
consteval bool test_diagnose_t_single()
Definition
test_diagnostics.cpp:44
Tests::Impl::test_mandate_or_explain
consteval bool test_mandate_or_explain()
Definition
test_diagnostics.cpp:129
Tests::Impl::diagnose_ok_ko_A_t
Kokkos::Execution::Impl::diagnose_t< trait_ok_t, trait_ko_A_t > diagnose_ok_ko_A_t
Definition
test_diagnostics.cpp:40
Tests::Impl::test_collapse_t
consteval bool test_collapse_t()
Definition
test_diagnostics.cpp:159
Tests::Impl::test_rebind_t
consteval bool test_rebind_t()
Definition
test_diagnostics.cpp:146
Tests::Impl::test_keep_errors_t
consteval bool test_keep_errors_t()
Definition
test_diagnostics.cpp:97
Tests::Impl::trait_ok_t
SomeTrait< int > trait_ok_t
Definition
test_diagnostics.cpp:32
Tests::Impl::diagnose_ok_t
Kokkos::Execution::Impl::diagnose_t< trait_ok_t > diagnose_ok_t
Definition
test_diagnostics.cpp:36
Tests::Impl::trait_ko_B_t
SomeTrait< std::string_view > trait_ko_B_t
Definition
test_diagnostics.cpp:34
Tests::Impl::test_first_error_t
consteval bool test_first_error_t()
Definition
test_diagnostics.cpp:79
Tests::Impl::diagnose_ok_ok_t
Kokkos::Execution::Impl::diagnose_t< trait_ok_t, trait_ok_t > diagnose_ok_ok_t
Definition
test_diagnostics.cpp:39
Tests::Impl::diagnose_ko_A_t
Kokkos::Execution::Impl::diagnose_t< trait_ko_A_t > diagnose_ko_A_t
Definition
test_diagnostics.cpp:37
Tests::Impl::trait_ko_A_t
SomeTrait< std::string > trait_ko_A_t
Definition
test_diagnostics.cpp:33
Tests::Impl::test_diagnose_t_many
consteval bool test_diagnose_t_many()
Definition
test_diagnostics.cpp:59
Tests::Impl::diagnose_ko_B_t
Kokkos::Execution::Impl::diagnose_t< trait_ko_B_t > diagnose_ko_B_t
Definition
test_diagnostics.cpp:38
Tests::Impl::diagnose_ko_A_ko_B_t
Kokkos::Execution::Impl::diagnose_t< trait_ko_A_t, trait_ko_B_t > diagnose_ko_A_ko_B_t
Definition
test_diagnostics.cpp:41
Tests::Impl::SomeTraitWithComplexDiagnose
Definition
test_diagnostics.cpp:117
Tests::Impl::SomeTraitWithComplexDiagnose::diagnose
static constexpr auto diagnose() noexcept
Definition
test_diagnostics.cpp:118
Tests::Impl::SomeTrait
Definition
test_diagnostics.cpp:19
Tests::Impl::SomeTrait< int >::value
static constexpr bool value
Definition
test_diagnostics.cpp:20
Tests::Impl::SomeTrait::diagnose
static constexpr auto diagnose() noexcept
Definition
test_diagnostics.cpp:22
tests
impl
test_diagnostics.cpp
Generated on
for kokkos-execution by
1.18.0