forked from taskflow/taskflow
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_workers.cpp
More file actions
69 lines (37 loc) · 1.08 KB
/
Copy pathtest_workers.cpp
File metadata and controls
69 lines (37 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest.h>
#include <taskflow/taskflow.hpp>
class CustomWorkerBehavior : public tf::WorkerInterface {
public:
CustomWorkerBehavior(std::atomic<size_t>& counter, std::vector<size_t>& ids) :
_counter {counter},
_ids {ids} {
}
void scheduler_prologue(tf::Worker& wv) override {
_counter++;
std::scoped_lock lock(_mutex);
_ids.push_back(wv.id());
}
void scheduler_epilogue(tf::Worker&, std::exception_ptr) override {
_counter++;
}
std::atomic<size_t>& _counter;
std::vector<size_t>& _ids;
std::mutex _mutex;
};
TEST_CASE("WorkerInterface" * doctest::timeout(300)) {
const size_t N = 10;
for(size_t n=1; n<=N; n++) {
std::atomic<size_t> counter{0};
std::vector<size_t> ids;
{
tf::Executor executor(n, std::make_shared<CustomWorkerBehavior>(counter, ids));
}
REQUIRE(counter == n*2);
REQUIRE(ids.size() == n);
std::sort(ids.begin(), ids.end(), std::less<int>{});
for(size_t i=0; i<n; i++) {
REQUIRE(ids[i] == i);
}
}
}