]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/25_algorithms/pstl/alg_modifying_operations/generate.cc
2 // { dg-options "-std=gnu++17 -ltbb" }
3 // { dg-do run { target c++17 } }
4 // { dg-timeout-factor 3 }
5 // { dg-require-effective-target tbb-backend }
7 //===-- generate.pass.cpp -------------------------------------------------===//
9 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
10 // See https://llvm.org/LICENSE.txt for license information.
11 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
13 //===----------------------------------------------------------------------===//
15 #include "pstl/pstl_test_config.h"
17 #ifdef PSTL_STANDALONE_TESTS
20 #include "pstl/execution"
21 #include "pstl/algorithm"
25 #endif // PSTL_STANDALONE_TESTS
27 #include "pstl/test_utils.h"
29 using namespace TestUtils
;
32 struct Generator_count
34 const T def_val
= T(-1);
49 template <typename Policy
, typename Iterator
, typename Size
>
51 operator()(Policy
&& exec
, Iterator first
, Iterator last
, Size n
)
54 typedef typename
std::iterator_traits
<Iterator
>::value_type T
;
56 // Try random-access iterator
59 generate(exec
, first
, last
, g
);
60 EXPECT_TRUE(std::count(first
, last
, g
.default_value()) == n
, "generate wrong result for generate");
61 std::fill(first
, last
, T(0));
67 auto last
= generate_n(exec
, first
, m
, g
);
68 EXPECT_TRUE(std::count(first
, last
, g
.default_value()) == m
&& last
== std::next(first
, m
),
69 "generate_n wrong result for generate_n");
70 std::fill(first
, last
, T(0));
77 test_generate_by_type()
79 for (size_t n
= 0; n
<= 100000; n
= n
< 16 ? n
+ 1 : size_t(3.1415 * n
))
81 Sequence
<T
> in(n
, [](size_t v
) -> T
{ return T(0); }); //fill by zero
83 invoke_on_all_policies(test_generate(), in
.begin(), in
.end(), in
.size());
90 template <typename Policy
, typename Iterator
>
92 operator()(Policy
&& exec
, Iterator iter
)
94 auto gen
= []() { return T(0); };
96 generate(exec
, iter
, iter
, non_const(gen
));
97 generate_n(exec
, iter
, 0, non_const(gen
));
105 test_generate_by_type
<int32_t>();
106 test_generate_by_type
<float64_t
>();
108 test_algo_basic_single
<int32_t>(run_for_rnd_fw
<test_non_const
<int32_t>>());
110 std::cout
<< done() << std::endl
;