44
44
45
45
#define CHECK (S, REF ) \
46
46
{ \
47
+ ++test_id; \
47
48
auto ret = S; \
48
49
if (ret != REF) { \
49
- return {#S, REF}; \
50
+ errc = test_id; \
50
51
} \
51
52
}
52
53
@@ -56,7 +57,9 @@ const auto UINT32MAX = std::numeric_limits<uint32_t>::max();
56
57
const auto UINT32MIN = std::numeric_limits<uint32_t >::min();
57
58
const int b = 4 , c = 5 , d = 6 ;
58
59
59
- std::pair<const char *, int > vadd () {
60
+ int vadd () {
61
+ int errc{};
62
+ int test_id{};
60
63
CHECK (syclcompat::extend_add<int32_t >(3 , 4 ), 7 );
61
64
CHECK (syclcompat::extend_add<uint32_t >(b, c), 9 );
62
65
CHECK (syclcompat::extend_add_sat<int32_t >(b, INT32MAX), INT32MAX);
@@ -65,10 +68,12 @@ std::pair<const char *, int> vadd() {
65
68
CHECK (syclcompat::extend_add_sat<int32_t >(b, c, -20 , sycl::minimum<>()), -20 );
66
69
CHECK (syclcompat::extend_add_sat<int32_t >(b, (-33 ), 9 , sycl::maximum<>()), 9 );
67
70
68
- return { nullptr , 0 } ;
71
+ return errc ;
69
72
}
70
73
71
- std::pair<const char *, int > vsub () {
74
+ int vsub () {
75
+ int errc{};
76
+ int test_id{};
72
77
CHECK (syclcompat::extend_sub<int32_t >(3 , 4 ), -1 );
73
78
CHECK (syclcompat::extend_sub<uint32_t >(c, b), 1 );
74
79
CHECK (syclcompat::extend_sub_sat<int32_t >(10 , INT32MIN), INT32MAX);
@@ -78,10 +83,12 @@ std::pair<const char *, int> vsub() {
78
83
CHECK (syclcompat::extend_sub_sat<int32_t >(b, (-33 ), 9 , sycl::maximum<>()),
79
84
37 );
80
85
81
- return { nullptr , 0 } ;
86
+ return errc ;
82
87
}
83
88
84
- std::pair<const char *, int > vabsdiff () {
89
+ int vabsdiff () {
90
+ int errc{};
91
+ int test_id{};
85
92
CHECK (syclcompat::extend_absdiff<int32_t >(3 , 4 ), 1 );
86
93
CHECK (syclcompat::extend_absdiff<uint32_t >(c, b), 1 );
87
94
CHECK (syclcompat::extend_absdiff_sat<int32_t >(10 , INT32MIN), INT32MAX);
@@ -92,10 +99,12 @@ std::pair<const char *, int> vabsdiff() {
92
99
CHECK (syclcompat::extend_absdiff_sat<int32_t >(b, (-33 ), 9 , sycl::maximum<>()),
93
100
37 );
94
101
95
- return { nullptr , 0 } ;
102
+ return errc ;
96
103
}
97
104
98
- std::pair<const char *, int > vmin () {
105
+ int vmin () {
106
+ int errc{};
107
+ int test_id{};
99
108
CHECK (syclcompat::extend_min<int32_t >(3 , 4 ), 3 );
100
109
CHECK (syclcompat::extend_min<uint32_t >(c, b), 4 );
101
110
CHECK (syclcompat::extend_min_sat<int32_t >(UINT32MAX, 1 ), 1 );
@@ -104,10 +113,12 @@ std::pair<const char *, int> vmin() {
104
113
CHECK (syclcompat::extend_min_sat<int32_t >(b, c, -20 , sycl::minimum<>()), -20 );
105
114
CHECK (syclcompat::extend_min_sat<int32_t >(b, (-33 ), 9 , sycl::maximum<>()), 9 );
106
115
107
- return { nullptr , 0 } ;
116
+ return errc ;
108
117
}
109
118
110
- std::pair<const char *, int > vmax () {
119
+ int vmax () {
120
+ int errc{};
121
+ int test_id{};
111
122
CHECK (syclcompat::extend_max<int32_t >(3 , 4 ), 4 );
112
123
CHECK (syclcompat::extend_max<uint32_t >(c, b), 5 );
113
124
CHECK (syclcompat::extend_max_sat<int32_t >(UINT32MAX, 1 ), INT32MAX);
@@ -116,7 +127,7 @@ std::pair<const char *, int> vmax() {
116
127
CHECK (syclcompat::extend_max_sat<int32_t >(b, c, -20 , sycl::minimum<>()), -20 );
117
128
CHECK (syclcompat::extend_max_sat<int32_t >(b, (-33 ), 9 , sycl::maximum<>()), 9 );
118
129
119
- return { nullptr , 0 } ;
130
+ return errc ;
120
131
}
121
132
122
133
template <typename Tp> struct scale {
@@ -127,7 +138,9 @@ template <typename Tp> struct noop {
127
138
Tp operator ()(Tp val, Tp /* scaler*/ ) { return val; }
128
139
};
129
140
130
- std::pair<const char *, int > shl_clamp () {
141
+ int shl_clamp () {
142
+ int errc{};
143
+ int test_id{};
131
144
CHECK (syclcompat::extend_shl_clamp<int32_t >(3 , 4 ), 48 );
132
145
CHECK (syclcompat::extend_shl_clamp<int32_t >(6 , 33 ), 0 );
133
146
CHECK (syclcompat::extend_shl_clamp<int32_t >(3 , 4 , 4 , scale<int32_t >()), 192 );
@@ -139,10 +152,12 @@ std::pair<const char *, int> shl_clamp() {
139
152
CHECK (syclcompat::extend_shl_sat_clamp<int8_t >(9 , 5 , -1 , noop<int8_t >()),
140
153
127 );
141
154
142
- return { nullptr , 0 } ;
155
+ return errc ;
143
156
}
144
157
145
- std::pair<const char *, int > shl_wrap () {
158
+ int shl_wrap () {
159
+ int errc{};
160
+ int test_id{};
146
161
CHECK (syclcompat::extend_shl_wrap<int32_t >(3 , 4 ), 48 );
147
162
CHECK (syclcompat::extend_shl_wrap<int32_t >(6 , 32 ), 6 );
148
163
CHECK (syclcompat::extend_shl_wrap<int32_t >(6 , 33 ), 12 );
@@ -155,10 +170,12 @@ std::pair<const char *, int> shl_wrap() {
155
170
-127 );
156
171
CHECK (syclcompat::extend_shl_sat_wrap<int8_t >(9 , 5 , -1 , noop<int8_t >()), 127 );
157
172
158
- return { nullptr , 0 } ;
173
+ return errc ;
159
174
}
160
175
161
- std::pair<const char *, int > shr_clamp () {
176
+ int shr_clamp () {
177
+ int errc{};
178
+ int test_id{};
162
179
CHECK (syclcompat::extend_shr_clamp<int32_t >(128 , 5 ), 4 );
163
180
CHECK (syclcompat::extend_shr_clamp<int32_t >(INT32MAX, 33 ), 0 );
164
181
CHECK (syclcompat::extend_shr_clamp<int32_t >(128 , 5 , 4 , scale<int32_t >()), 16 );
@@ -170,10 +187,12 @@ std::pair<const char *, int> shr_clamp() {
170
187
CHECK (syclcompat::extend_shr_sat_clamp<int8_t >(512 , 1 , -1 , noop<int8_t >()),
171
188
127 );
172
189
173
- return { nullptr , 0 } ;
190
+ return errc ;
174
191
}
175
192
176
- std::pair<const char *, int > shr_wrap () {
193
+ int shr_wrap () {
194
+ int errc{};
195
+ int test_id{};
177
196
CHECK (syclcompat::extend_shr_wrap<int32_t >(128 , 5 ), 4 );
178
197
CHECK (syclcompat::extend_shr_wrap<int32_t >(128 , 32 ), 128 );
179
198
CHECK (syclcompat::extend_shr_wrap<int32_t >(128 , 33 ), 64 );
@@ -187,106 +206,43 @@ std::pair<const char *, int> shr_wrap() {
187
206
CHECK (syclcompat::extend_shr_sat_wrap<int8_t >(512 , 1 , -1 , noop<int8_t >()),
188
207
127 );
189
208
190
- return { nullptr , 0 } ;
209
+ return errc ;
191
210
}
192
211
193
- void test (const sycl::stream &s, int *ec) {
194
- {
195
- auto res = vadd ();
196
- if (res.first ) {
197
- s << res.first << " = " << res.second << " check failed!\n " ;
198
- *ec = 1 ;
199
- return ;
200
- }
201
- s << " vadd check passed!\n " ;
202
- }
203
- {
204
- auto res = vsub ();
205
- if (res.first ) {
206
- s << res.first << " = " << res.second << " check failed!\n " ;
207
- *ec = 2 ;
208
- return ;
209
- }
210
- s << " vsub check passed!\n " ;
211
- }
212
- {
213
- auto res = vabsdiff ();
214
- if (res.first ) {
215
- s << res.first << " = " << res.second << " check failed!\n " ;
216
- *ec = 3 ;
217
- return ;
218
- }
219
- s << " vabsdiff check passed!\n " ;
220
- }
221
- {
222
- auto res = vmin ();
223
- if (res.first ) {
224
- s << res.first << " = " << res.second << " check failed!\n " ;
225
- *ec = 4 ;
226
- return ;
227
- }
228
- s << " vmin check passed!\n " ;
229
- }
230
- {
231
- auto res = vmax ();
232
- if (res.first ) {
233
- s << res.first << " = " << res.second << " check failed!\n " ;
234
- *ec = 5 ;
235
- return ;
236
- }
237
- s << " vmax check passed!\n " ;
238
- }
239
- {
240
- auto res = shl_clamp ();
241
- if (res.first ) {
242
- s << res.first << " = " << res.second << " check failed!\n " ;
243
- *ec = 6 ;
244
- return ;
245
- }
246
- s << " shl_clamp check passed!\n " ;
247
- }
248
- {
249
- auto res = shl_wrap ();
250
- if (res.first ) {
251
- s << res.first << " = " << res.second << " check failed!\n " ;
252
- *ec = 7 ;
253
- return ;
254
- }
255
- s << " shl_wrap check passed!\n " ;
256
- }
257
- {
258
- auto res = shr_clamp ();
259
- if (res.first ) {
260
- s << res.first << " = " << res.second << " check failed!\n " ;
261
- *ec = 8 ;
262
- return ;
263
- }
264
- s << " shr_clamp check passed!\n " ;
265
- }
266
- {
267
- auto res = shr_wrap ();
268
- if (res.first ) {
269
- s << res.first << " = " << res.second << " check failed!\n " ;
270
- *ec = 9 ;
271
- return ;
272
- }
273
- s << " shr_wrap check passed!\n " ;
274
- }
275
- *ec = 0 ;
276
- }
212
+ template <auto F> void test_fn (sycl::queue q, int *ec) {
213
+ std::cout << __PRETTY_FUNCTION__ << std::endl;
277
214
278
- int main () {
279
- sycl::queue q = syclcompat::get_default_queue ();
280
- int *ec = syclcompat::malloc<int >(1 );
281
- syclcompat::fill<int >(ec, 0 , 1 );
282
215
q.submit ([&](sycl::handler &cgh) {
283
- sycl::stream out (1024 , 256 , cgh);
284
- cgh.parallel_for (1 , [=](sycl::item<1 > it) { test (out, ec); });
216
+ cgh.single_task ([=]() {
217
+ auto res = F ();
218
+ if (res != 0 ) *ec = res;
219
+ });
285
220
});
221
+ int ec_h{};
222
+ syclcompat::memcpy<int >(&ec_h, ec, 1 , q);
286
223
q.wait_and_throw ();
287
224
288
- int ec_h;
289
- syclcompat::memcpy<int >(&ec_h, ec, 1 );
225
+ if (ec_h != 0 ) {
226
+ std::cout << " Test " << ec_h << " failed." << std::endl;
227
+ syclcompat::free (ec, q);
228
+ assert (false );
229
+ }
230
+ }
290
231
291
- return ec_h;
232
+ int main () {
233
+ sycl::queue q = syclcompat::get_default_queue ();
234
+ int *ec = syclcompat::malloc<int >(1 , q);
235
+ syclcompat::fill<int >(ec, 0 , 1 , q);
236
+
237
+ test_fn<vadd>(q, ec);
238
+ test_fn<vsub>(q, ec);
239
+ test_fn<vabsdiff>(q, ec);
240
+ test_fn<vmin>(q, ec);
241
+ test_fn<vmax>(q, ec);
242
+ test_fn<shl_clamp>(q, ec);
243
+ test_fn<shl_wrap>(q, ec);
244
+ test_fn<shr_clamp>(q, ec);
245
+ test_fn<shr_wrap>(q, ec);
246
+
247
+ syclcompat::free (ec, q);
292
248
}
0 commit comments