28#include "gdbsupport/selftest.h"
29#include "gdbsupport/parallel-for.h"
33#include "gdbsupport/thread-pool.h"
36namespace parallel_for {
47 gdb::thread_pool::g_thread_pool->set_thread_count (
n_threads);
55#define FOR_EACH gdb::parallel_for_each
62#define FOR_EACH gdb::sequential_for_each
92 selftests::register_test (
"parallel_for",
102 save_restore_n_threads saver;
103 gdb::thread_pool::g_thread_pool->set_thread_count (n_threads);
107 std::atomic<int> counter (0);
109 [&] (
int start,
int end)
111 counter += end - start;
113 SELF_CHECK (counter == NUMBER);
117 [&] (
int start,
int end)
119 counter += end - start;
121 SELF_CHECK (counter == 0);
123 auto task_size_max_ = [] (
int iter)
127 auto task_size_max = gdb::make_function_view (task_size_max_);
131 [&] (
int start,
int end)
133 counter += end - start;
135 SELF_CHECK (counter == NUMBER);
137 auto task_size_one_ = [] (
int iter)
141 auto task_size_one = gdb::make_function_view (task_size_one_);
145 [&] (
int start,
int end)
147 counter += end - start;
149 SELF_CHECK (counter == NUMBER);
155 std::vector<std::unique_ptr<int>> intresults;
156 std::atomic<bool> any_empty_tasks (
false);
159 [&] (
int start,
int end)
162 any_empty_tasks =
true;
163 return std::unique_ptr<int> (
new int (end - start));
165 SELF_CHECK (!any_empty_tasks);
166 SELF_CHECK (std::all_of (intresults.begin (),
168 [] (
const std::unique_ptr<int> &entry)
170 return entry != nullptr;
175 any_empty_tasks =
false;
177 [&] (
int start,
int end)
180 any_empty_tasks =
true;
181 return std::unique_ptr<int> (
new int (end - start));
184 SELF_CHECK (!any_empty_tasks);
185 SELF_CHECK (std::all_of (intresults.begin (),
187 [] (
const std::unique_ptr<int> &entry)
189 return entry != nullptr;
int thread_count(process_stratum_target *proc_target)
static void test(int n_threads)
static void test_n_threads()
void _initialize_parallel_for_selftests()
~save_restore_n_threads()