Skip to content

Commit 64f2190

Browse files
committed
Rewrite test framework
1 parent cc846b6 commit 64f2190

File tree

11 files changed

+600
-733
lines changed

11 files changed

+600
-733
lines changed

tests/basic.cu

Lines changed: 0 additions & 47 deletions
This file was deleted.

tests/basics.cu

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
#include "common.h"
2+
3+
struct basics_tests {
4+
template<typename T, size_t... I, size_t N = sizeof...(I)>
5+
__host__ __device__ void operator()(generator<T> gen, std::index_sequence<I...>) {
6+
// default constructor
7+
{
8+
kf::vec<T, N> x;
9+
ASSERT(equals(x[I], T()) && ...);
10+
}
11+
12+
// filled with one
13+
{
14+
kf::vec<T, N> x = {T((gen.next(I), 1))...};
15+
ASSERT(equals(x[I], T(1)) && ...);
16+
}
17+
18+
// filled with steps
19+
{
20+
kf::vec<T, N> x = {T(I)...};
21+
ASSERT(equals(x[I], T(I)) && ...);
22+
}
23+
24+
// broadcast constructor
25+
{
26+
T init = gen.next();
27+
kf::vec<T, N> x {init};
28+
ASSERT(equals(x[I], init) && ...);
29+
}
30+
31+
// Getters
32+
T items[N] = {gen.next(I)...};
33+
kf::vec<T, N> a = {items[I]...};
34+
35+
ASSERT(equals(a[I], items[I]) && ...);
36+
ASSERT(equals(a.get(I), items[I]) && ...);
37+
ASSERT(equals(a.at(I), items[I]) && ...);
38+
ASSERT(equals(a(I), items[I]) && ...);
39+
40+
// Data, begin, end
41+
ASSERT(a.size() == N);
42+
ASSERT(&a[0] == a.data());
43+
ASSERT(&a[0] == a.begin());
44+
ASSERT(&a[0] + N == a.end());
45+
ASSERT(&a[0] == a.cdata());
46+
ASSERT(&a[0] == a.cbegin());
47+
ASSERT(&a[0] + N == a.cend());
48+
49+
// setters
50+
T new_items[N] = {gen.next(I)...};
51+
(a.set(I, new_items[I]), ...);
52+
ASSERT(equals(a[I], new_items[I]) && ...);
53+
}
54+
};
55+
56+
REGISTER_TEST_CASE("basics", basics_tests, int, float)
57+
58+
struct creation_tests {
59+
__host__ __device__ void operator()(generator<int> gen) {
60+
using kernel_float::into_vector;
61+
using kernel_float::make_vec;
62+
63+
// into_vector on scalar
64+
{
65+
kf::vec<int, 1> a = into_vector(int(5));
66+
ASSERT(a[0] == 5);
67+
}
68+
69+
// into_vector on CUDA vector types
70+
{
71+
kf::vec<int, 1> a = into_vector(make_int1(5));
72+
kf::vec<int, 2> b = into_vector(make_int2(5, 4));
73+
kf::vec<int, 3> c = into_vector(make_int3(5, 4, -1));
74+
kf::vec<int, 4> d = into_vector(make_int4(5, 4, -1, 0));
75+
76+
ASSERT(a[0] == 5);
77+
ASSERT(b[0] == 5 && b[1] == 4);
78+
ASSERT(c[0] == 5 && c[1] == 4 && c[2] == -1);
79+
ASSERT(d[0] == 5 && d[1] == 4 && d[2] == -1 && d[3] == 0);
80+
}
81+
82+
// into_vector on C-style array
83+
{
84+
int items[3] = {1, 2, 3};
85+
kf::vec<int, 3> a = into_vector(items);
86+
ASSERT(a[0] == 1 && a[1] == 2 && a[2] == 3);
87+
}
88+
89+
// into_vector on kf array
90+
{
91+
kf::vec<int, 3> items = {1, 2, 3};
92+
kf::vec<int, 3> a = into_vector(items);
93+
ASSERT(a[0] == 1 && a[1] == 2 && a[2] == 3);
94+
}
95+
96+
// make_vec
97+
{
98+
kf::vec<int, 3> a = make_vec(true, short(2), int(3));
99+
ASSERT(a[0] == 1 && a[1] == 2 && a[2] == 3);
100+
}
101+
}
102+
103+
__host__ __device__ void operator()(generator<float> gen) {
104+
using kernel_float::into_vector;
105+
using kernel_float::make_vec;
106+
107+
// into_vector on scalar
108+
{
109+
kf::vec<float, 1> a = into_vector(int(5.0f));
110+
ASSERT(a[0] == 5.0f);
111+
}
112+
113+
// into_vector on CUDA vector types
114+
{
115+
kf::vec<float, 1> a = into_vector(make_float1(5.0f));
116+
kf::vec<float, 2> b = into_vector(make_float2(5.0f, 4.0f));
117+
kf::vec<float, 3> c = into_vector(make_float3(5.0f, 4.0f, -1.0f));
118+
kf::vec<float, 4> d = into_vector(make_float4(5.0f, 4.0f, -1.0f, 0.0f));
119+
120+
ASSERT(a[0] == 5.0f);
121+
ASSERT(b[0] == 5.0f && b[1] == 4.0f);
122+
ASSERT(c[0] == 5.0f && c[1] == 4.0f && c[2] == -1.0f);
123+
ASSERT(d[0] == 5.0f && d[1] == 4.0f && d[2] == -1.0f && d[3] == 0.0f);
124+
}
125+
126+
// into_vector on C-style array
127+
{
128+
float items[3] = {1.0f, 2.0f, 3.0f};
129+
kf::vec<float, 3> a = into_vector(items);
130+
ASSERT(a[0] == 1.0f && a[1] == 2.0f && a[2] == 3.0f);
131+
}
132+
133+
// into_vector on kf array
134+
{
135+
kf::vec<float, 3> items = {1.0f, 2.0f, 3.0f};
136+
kf::vec<float, 3> a = into_vector(items);
137+
ASSERT(a[0] == 1.0f && a[1] == 2.0f && a[2] == 3.0f);
138+
}
139+
140+
// make_vec
141+
{
142+
kf::vec<float, 3> a = make_vec(true, int(2), 3.0f);
143+
ASSERT(a[0] == 1.0f && a[1] == 2.0f && a[2] == 3.0f);
144+
}
145+
}
146+
};
147+
148+
REGISTER_TEST_CASE("into_vec and make_vec", creation_tests, int, float)

0 commit comments

Comments
 (0)