28#include "gdbsupport/selftest.h"
29#include "gdbsupport/parallel-for.h"
33#include "gdbsupport/thread-pool.h"
36namespace parallel_for {
38struct save_restore_n_threads
40 save_restore_n_threads ()
45 ~save_restore_n_threads ()
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",
93 selftests::parallel_for::test_n_threads);
102 save_restore_n_threads saver;
103 gdb::thread_pool::g_thread_pool->set_thread_count (n_threads);
107 std::atomic<int> counter (0);
108 FOR_EACH (1, 0, NUMBER,
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_);
130 FOR_EACH (1, 0, NUMBER,
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_);
144 FOR_EACH (1, 0, NUMBER,
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 gdb::make_unique<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 gdb::make_unique<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)
void _initialize_parallel_for_selftests()