Skip to content

Commit 05387d3

Browse files
Extend blocked_nd_range construction test with necessary checks (#1933)
Co-authored-by: Aleksei Fedotov <aleksei.fedotov@intel.com>
1 parent 8eef2c6 commit 05387d3

File tree

1 file changed

+95
-29
lines changed

1 file changed

+95
-29
lines changed

test/conformance/conformance_blocked_nd_range.cpp

Lines changed: 95 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -210,48 +210,114 @@ void ParallelTest() {
210210
}
211211
template<> void ParallelTest<0>() {}
212212

213+
template <typename T, unsigned int N, typename EqPredicate>
214+
void check_constructed_range(const oneapi::tbb::blocked_nd_range<T, N>& range,
215+
const T (&begins)[N], const T (&ends)[N],
216+
const std::size_t (&grainsizes)[N],
217+
EqPredicate pred)
218+
{
219+
for (unsigned int dim_index = 0; dim_index < N; ++dim_index) {
220+
using dim_type = typename oneapi::tbb::blocked_nd_range<T, N>::dim_range_type;
221+
const dim_type& dim = range.dim(dim_index);
222+
CHECK_MESSAGE(pred(dim.begin(), begins[dim_index]), "Incorrect begin of the constructed range");
223+
CHECK_MESSAGE(pred(dim.end(), ends[dim_index]), "Incorrect end of the constructed range");
224+
CHECK_MESSAGE(dim.grainsize() == grainsizes[dim_index], "Incorrect grainsize of the constructed range");
225+
}
226+
}
227+
228+
template <typename T, unsigned int N>
229+
void check_constructed_range(const oneapi::tbb::blocked_nd_range<T, N>& range,
230+
const T (&begins)[N], const T (&ends)[N],
231+
const std::size_t (&grainsizes)[N])
232+
{
233+
check_constructed_range(range, begins, ends, grainsizes, std::equal_to<T>{});
234+
}
235+
213236
//! Testing blocked_nd_range construction
214237
//! \brief \ref interface
215238
TEST_CASE("Construction") {
216-
oneapi::tbb::blocked_nd_range<int, 1>{ { 0,13,3 } };
217-
218-
oneapi::tbb::blocked_nd_range<int, 1>{ oneapi::tbb::blocked_range<int>{ 0,13,3 } };
239+
int begin1 = 0;
240+
int end1 = 13;
241+
std::size_t grainsize1 = 3;
219242

220-
oneapi::tbb::blocked_nd_range<int, 2>(oneapi::tbb::blocked_range<int>(-8923, 8884, 13), oneapi::tbb::blocked_range<int>(-8923, 5, 13));
243+
int begin2 = -8923;
244+
int end2 = 8884;
245+
std::size_t grainsize2 = 13;
221246

222-
oneapi::tbb::blocked_nd_range<int, 2>({ -8923, 8884, 13 }, { -8923, 8884, 13 });
247+
std::size_t default_grainsize = 1;
223248

224-
oneapi::tbb::blocked_range<int> r1(0, 13);
225-
226-
oneapi::tbb::blocked_range<int> r2(-12, 23);
249+
{
250+
oneapi::tbb::blocked_nd_range<int, 1> r{ {begin1, end1, grainsize1} };
251+
check_constructed_range(r, {begin1}, {end1}, {grainsize1});
252+
}
253+
{
254+
oneapi::tbb::blocked_nd_range<int, 1> r{ {begin1, end1} };
255+
check_constructed_range(r, {begin1}, {end1}, {default_grainsize});
256+
}
257+
{
258+
oneapi::tbb::blocked_nd_range<int, 1> r{oneapi::tbb::blocked_range<int>{begin1, end1, grainsize1}};
259+
check_constructed_range(r, {begin1}, {end1}, {grainsize1});
260+
}
261+
{
262+
oneapi::tbb::blocked_nd_range<int, 1> r{oneapi::tbb::blocked_range<int>{begin1, end1}};
263+
check_constructed_range(r, {begin1}, {end1}, {default_grainsize});
264+
}
265+
{
266+
oneapi::tbb::blocked_nd_range<int, 2> r{{begin1, end1, grainsize1}, {begin2, end2, grainsize2}};
267+
check_constructed_range(r, {begin1, begin2}, {end1, end2}, {grainsize1, grainsize2});
268+
}
269+
{
270+
oneapi::tbb::blocked_nd_range<int, 2> r{{begin1, end1}, {begin2, end2, grainsize2}};
271+
check_constructed_range(r, {begin1, begin2}, {end1, end2}, {default_grainsize, grainsize2});
272+
}
273+
{
274+
oneapi::tbb::blocked_nd_range<int, 2> r{oneapi::tbb::blocked_range<int>{begin1, end1, grainsize1},
275+
oneapi::tbb::blocked_range<int>{begin2, end2, grainsize2}};
276+
check_constructed_range(r, {begin1, begin2}, {end1, end2}, {grainsize1, grainsize2});
277+
}
278+
{
279+
oneapi::tbb::blocked_nd_range<int, 2> r{oneapi::tbb::blocked_range<int>{begin1, end1},
280+
oneapi::tbb::blocked_range<int>{begin2, end2, grainsize2}};
281+
check_constructed_range(r, {begin1, begin2}, {end1, end2}, {default_grainsize, grainsize2});
282+
}
283+
{
284+
oneapi::tbb::blocked_nd_range<int, 2> r{{begin1, end1, grainsize1},
285+
oneapi::tbb::blocked_range<int>{begin2, end2, grainsize2}};
286+
check_constructed_range(r, {begin1, begin2}, {end1, end2}, {grainsize1, grainsize2});
287+
}
227288

228-
oneapi::tbb::blocked_nd_range<int, 2>({ { -8923, 8884, 13 }, r1});
289+
int sizes[4] = {174, 39, 2481, 93};
229290

230-
oneapi::tbb::blocked_nd_range<int, 2>({ r2, r1 });
291+
{
292+
oneapi::tbb::blocked_nd_range<int, 4> r(sizes, grainsize1);
293+
check_constructed_range(r, {0, 0, 0, 0}, sizes,
294+
{grainsize1, grainsize1, grainsize1, grainsize1});
295+
}
296+
{
297+
oneapi::tbb::blocked_nd_range<int, 4> r({sizes[0], sizes[1], sizes[2], sizes[3]}, grainsize2);
298+
check_constructed_range(r, {0, 0, 0, 0}, sizes,
299+
{grainsize2, grainsize2, grainsize2, grainsize2});
300+
}
231301

232-
oneapi::tbb::blocked_nd_range<int, 2>(r1, r2);
302+
{
303+
AbstractValueType abstract_begins[4] = {MakeAbstractValue(-3), MakeAbstractValue(-53),
304+
MakeAbstractValue(-23), MakeAbstractValue(-13)};
233305

234-
int sizes[] = {174, 39, 2481, 93};
235-
oneapi::tbb::blocked_nd_range<int, 4> rNd_1(sizes, /*grainsize*/7);
306+
AbstractValueType abstract_ends[4] = {MakeAbstractValue(13), MakeAbstractValue(23),
307+
MakeAbstractValue(33), MakeAbstractValue(43)};
236308

237-
oneapi::tbb::blocked_nd_range<int, 4> rNd_2({174, 39, 2481, 93}, /*grainsize*/11);
309+
std::size_t grainsizes[4] = {8, 2, 1, 7};
238310

239-
for (unsigned i = 0; i < rNd_1.dim_count(); ++i) {
240-
oneapi::tbb::blocked_nd_range<int, 4>::dim_range_type dim1 = rNd_1.dim(i);
241-
oneapi::tbb::blocked_nd_range<int, 4>::dim_range_type dim2 = rNd_2.dim(i);
242-
REQUIRE(dim1.begin()==0);
243-
REQUIRE(dim2.begin()==0);
244-
unsigned int szi = sizes[i]; // to compare with unsigned integrals without warnings
245-
REQUIRE(dim1.size()==szi);
246-
REQUIRE(dim2.size()==szi);
247-
REQUIRE(dim1.grainsize()==7);
248-
REQUIRE(dim2.grainsize()==11);
311+
oneapi::tbb::blocked_nd_range<AbstractValueType, 4> r{{abstract_begins[0], abstract_ends[0], grainsizes[0]},
312+
{abstract_begins[1], abstract_ends[1], grainsizes[1]},
313+
{abstract_begins[2], abstract_ends[2], grainsizes[2]},
314+
{abstract_begins[3], abstract_ends[3], grainsizes[3]}};
315+
316+
auto abstract_eq_pred = [](const AbstractValueType& left, const AbstractValueType& right) {
317+
return GetValueOf(left) == GetValueOf(right);
318+
};
319+
check_constructed_range(r, abstract_begins, abstract_ends, grainsizes, abstract_eq_pred);
249320
}
250-
251-
oneapi::tbb::blocked_nd_range<AbstractValueType, 4>({ MakeAbstractValue(-3), MakeAbstractValue(13), 8 },
252-
{ MakeAbstractValue(-53), MakeAbstractValue(23), 2 },
253-
{ MakeAbstractValue(-23), MakeAbstractValue(33), 1 },
254-
{ MakeAbstractValue(-13), MakeAbstractValue(43), 7 });
255321
}
256322

257323
static const std::size_t N = 4;

0 commit comments

Comments
 (0)