Skip to content

Commit 78e5794

Browse files
committed
[oneDPL][ranges][test][copy_if] support size limit for output in a test checker
1 parent 025a734 commit 78e5794

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

test/parallel_api/ranges/std_ranges_copy_if.pass.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,25 @@ main()
2323
namespace dpl_ranges = oneapi::dpl::ranges;
2424

2525
auto copy_if_checker = [](std::ranges::random_access_range auto&& r_in,
26-
std::ranges::random_access_range auto&& r_out, auto&&... args)
26+
std::ranges::random_access_range auto&& r_out, auto pred, auto proj)
2727
{
28-
auto res = std::ranges::copy_if(std::forward<decltype(r_in)>(r_in), std::ranges::begin(r_out),
29-
std::forward<decltype(args)>(args)...);
30-
3128
using ret_type = std::ranges::copy_if_result<std::ranges::borrowed_iterator_t<decltype(r_in)>,
3229
std::ranges::borrowed_iterator_t<decltype(r_out)>>;
33-
return ret_type{res.in, res.out};
30+
31+
auto it_in = std::ranges::begin(r_in);
32+
auto it_out = std::ranges::begin(r_out);
33+
for(; it_in != std::ranges::end(r_in) && it_out != std::ranges::end(r_out); ++it_in)
34+
{
35+
if (std::invoke(pred, std::invoke(proj, *it_in)))
36+
{
37+
*it_out = *it_in;
38+
++it_out;
39+
}
40+
}
41+
return ret_type{it_in, it_out};
3442
};
3543

36-
test_range_algo<0, int, data_in_out>{big_sz}(dpl_ranges::copy_if, copy_if_checker, pred);
44+
test_range_algo<0, int, data_in_out>{big_sz}(dpl_ranges::copy_if, copy_if_checker, pred, std::identity{});
3745
test_range_algo<1, int, data_in_out>{}(dpl_ranges::copy_if, copy_if_checker, pred, proj);
3846
test_range_algo<2, P2, data_in_out>{}(dpl_ranges::copy_if, copy_if_checker, pred, &P2::x);
3947
test_range_algo<3, P2, data_in_out>{}(dpl_ranges::copy_if, copy_if_checker, pred, &P2::proj);

0 commit comments

Comments
 (0)