kokkos-utils
0.0.5
Toggle main menu visibility
Loading...
Searching...
No Matches
test_type_list.cpp
Go to the documentation of this file.
1
#include "gtest/gtest.h"
2
3
#include "
kokkos-utils/impl/type_list.hpp
"
4
14
15
namespace
Kokkos::utils::tests::impl
16
{
17
18
using
type_list_t
= Kokkos::Impl::type_list<char, short, int>;
19
21
TEST
(
impl
, is_type_list_v)
22
{
23
static_assert
(!
Kokkos::utils::impl::is_type_list_v<int>
);
24
static_assert
(!
Kokkos::utils::impl::is_type_list_v<std::tuple<int, int>
>);
25
static_assert
(
Kokkos::utils::impl::is_type_list_v<type_list_t>
);
26
static_assert
(
Kokkos::utils::impl::is_type_list_v<Kokkos::Impl::type_list<>
>);
27
static_assert
(
Kokkos::utils::impl::is_type_list_v<Kokkos::Impl::type_list<int>
>);
28
static_assert
(
Kokkos::utils::impl::is_type_list_v<Kokkos::Impl::type_list<int, double>
>);
29
}
30
32
TEST
(
impl
, make_type_list_t)
33
{
34
static_assert
(std::same_as<Kokkos::utils::impl::make_type_list_t<int >, Kokkos::Impl::type_list<int >>);
35
static_assert
(std::same_as<Kokkos::utils::impl::make_type_list_t<int, double>, Kokkos::Impl::type_list<int, double>>);
36
37
static_assert
(std::same_as<Kokkos::utils::impl::make_type_list_t<type_list_t>,
type_list_t
>);
38
}
39
41
TEST
(
impl
, type_list_size_v)
42
{
43
using
Kokkos::utils::impl::type_list_size_v
;
44
45
using
type_list_empty_t = Kokkos::Impl::type_list<>;
46
static_assert
(type_list_size_v<type_list_empty_t> == 0);
47
48
static_assert
(type_list_size_v<type_list_t> == 3);
49
}
50
52
TEST
(
impl
, type_list_contains_v)
53
{
54
using
Kokkos::utils::impl::type_list_contains_v
;
55
56
static_assert
( type_list_contains_v<char, type_list_t>);
57
static_assert
( ! type_list_contains_v<double, type_list_t>);
58
59
static_assert
( type_list_contains_v<char, int, double, char>);
60
static_assert
( ! type_list_contains_v<char, int, double, const char>);
61
}
62
64
TEST
(
impl
, type_list_at_t)
65
{
66
using
Kokkos::utils::impl::type_list_at_t
;
67
68
static_assert
(std::same_as<type_list_at_t<0, type_list_t>,
char
>);
69
static_assert
(std::same_as<type_list_at_t<1, type_list_t>,
short
>);
70
static_assert
(std::same_as<type_list_at_t<2, type_list_t>,
int
>);
71
}
72
74
template
<
typename
T>
75
struct
VectorOfTransformer
76
{
77
using
type
= std::vector<T>;
78
};
79
81
TEST
(
impl
, transform_type_list_t)
82
{
83
using
Kokkos::utils::impl::transform_type_list_t
;
84
85
using
transformed_type_list_t = transform_type_list_t<VectorOfTransformer, type_list_t>;
86
87
using
expt_transformed_type_list_t = Kokkos::Impl::type_list<std::vector<char>, std::vector<short>, std::vector<int>>;
88
89
static_assert
(std::same_as<transformed_type_list_t, expt_transformed_type_list_t>);
90
}
91
93
TEST
(
impl
, type_list_to_tuple)
94
{
95
using
Kokkos::utils::impl::type_list_to_tuple_t
;
96
97
using
expt_tuple_t = std::tuple<char, short, int>;
98
99
static_assert
(std::same_as<type_list_to_tuple_t<type_list_t>, expt_tuple_t>);
100
}
101
103
TEST
(
impl
, type_list_index_v)
104
{
105
using
Kokkos::utils::impl::type_list_index_v
;
106
107
static_assert
(type_list_index_v<char, type_list_t> == 0);
108
static_assert
(type_list_index_v<short, type_list_t> == 1);
109
static_assert
(type_list_index_v<int, type_list_t> == 2);
110
}
111
113
TEST
(
impl
, type_list_all_v)
114
{
115
static_assert
(
Kokkos::utils::impl::type_list_all_v<std::is_floating_point, Kokkos::Impl::type_list<float, double>
>);
116
static_assert
(!
Kokkos::utils::impl::type_list_all_v<std::is_floating_point, Kokkos::Impl::type_list<float, double, int>
>);
117
118
static_assert
(
Kokkos::utils::impl::type_list_all_v<std::is_floating_point, float, double>
);
119
static_assert
(!
Kokkos::utils::impl::type_list_all_v<std::is_floating_point, float, double, int>
);
120
}
121
123
TEST
(
impl
, type_list_any_v)
124
{
125
static_assert
(
Kokkos::utils::impl::type_list_any_v<std::is_floating_point, Kokkos::Impl::type_list<float, std::string, int>
>);
126
static_assert
(
Kokkos::utils::impl::type_list_any_v<std::is_integral, Kokkos::Impl::type_list<float, std::string, int>
>);
127
static_assert
(!
Kokkos::utils::impl::type_list_any_v<std::is_enum, Kokkos::Impl::type_list<float, std::string, int>
>);
128
129
static_assert
(
Kokkos::utils::impl::type_list_any_v<std::is_floating_point, float, std::string, int>
);
130
static_assert
(
Kokkos::utils::impl::type_list_any_v<std::is_integral, float, std::string, int>
);
131
static_assert
(!
Kokkos::utils::impl::type_list_any_v<std::is_enum, float, std::string, int>
);
132
}
133
135
TEST
(
impl
, for_each)
136
{
137
using
Kokkos::utils::impl::for_each
;
138
139
static_assert
([]() {
140
size_t
sum_of_sizes = 0;
141
142
for_each<type_list_t>([&] <
typename
T>()
constexpr
{
143
sum_of_sizes +=
sizeof
(T);
144
});
145
146
return
sum_of_sizes ==
sizeof
(char) +
sizeof
(
short
) +
sizeof
(int);
147
}());
148
}
149
150
}
// namespace Kokkos::utils::tests::impl
Kokkos::utils::impl::type_list_all_v
constexpr bool type_list_all_v
Definition
type_list.hpp:158
Kokkos::utils::impl::type_list_size_v
constexpr size_t type_list_size_v
Definition
type_list.hpp:56
Kokkos::utils::impl::type_list_contains_v
constexpr bool type_list_contains_v
Definition
type_list.hpp:73
Kokkos::utils::impl::type_list_any_v
constexpr bool type_list_any_v
Definition
type_list.hpp:208
Kokkos::utils::impl::for_each
constexpr void for_each(Callable callable)
Calls the instantiation of the call operator of a callable object for each type in a Kokkos::Impl::ty...
Definition
type_list.hpp:213
Kokkos::utils::impl::transform_type_list_t
typename TransformTypeList< TransformerType, T >::type transform_type_list_t
Definition
type_list.hpp:107
Kokkos::utils::impl::type_list_to_tuple_t
typename TypeListToTuple< T >::type type_list_to_tuple_t
Definition
type_list.hpp:122
Kokkos::utils::impl::is_type_list_v
constexpr bool is_type_list_v
Definition
type_list.hpp:23
Kokkos::utils::impl::type_list_index_v
constexpr size_t type_list_index_v
Definition
type_list.hpp:139
Kokkos::utils::impl::type_list_at_t
typename TypeListAt< I, T >::type type_list_at_t
Definition
type_list.hpp:92
Kokkos::utils::tests::impl
Definition
test_type_list.cpp:16
Kokkos::utils::tests::impl::TEST
TEST(impl, is_type_list_v)
Definition
test_type_list.cpp:21
Kokkos::utils::tests::impl::type_list_t
Kokkos::Impl::type_list< char, short, int > type_list_t
Definition
test_type_list.cpp:18
Kokkos::utils::tests::impl::VectorOfTransformer
Helper struct for the test of Kokkos::utils::impl::transform_type_list_t.
Definition
test_type_list.cpp:76
Kokkos::utils::tests::impl::VectorOfTransformer::type
std::vector< T > type
Definition
test_type_list.cpp:77
type_list.hpp
tests
impl
test_type_list.cpp
Generated on
for kokkos-utils by
1.18.0