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
82 lines (58 loc) · 1.77 KB
/
Copy pathtest_workers.cpp
File metadata and controls
82 lines (58 loc) · 1.77 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#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;
};
void worker_interface_basics(unsigned W) {
std::atomic<size_t> counter{0};
std::vector<size_t> ids;
{
tf::Executor executor(W, tf::make_worker_interface<CustomWorkerBehavior>(counter, ids));
}
REQUIRE(counter == W*2);
REQUIRE(ids.size() == W);
std::sort(ids.begin(), ids.end());
for(size_t i=0; i<W; i++) {
REQUIRE(ids[i] == i);
}
}
TEST_CASE("WorkerInterface.Basics.1thread" * doctest::timeout(300)) {
worker_interface_basics(1);
}
TEST_CASE("WorkerInterface.Basics.2threads" * doctest::timeout(300)) {
worker_interface_basics(2);
}
TEST_CASE("WorkerInterface.Basics.3threads" * doctest::timeout(300)) {
worker_interface_basics(3);
}
TEST_CASE("WorkerInterface.Basics.4threads" * doctest::timeout(300)) {
worker_interface_basics(4);
}
TEST_CASE("WorkerInterface.Basics.5threads" * doctest::timeout(300)) {
worker_interface_basics(5);
}
TEST_CASE("WorkerInterface.Basics.6threads" * doctest::timeout(300)) {
worker_interface_basics(6);
}
TEST_CASE("WorkerInterface.Basics.7threads" * doctest::timeout(300)) {
worker_interface_basics(7);
}
TEST_CASE("WorkerInterface.Basics.8threads" * doctest::timeout(300)) {
worker_interface_basics(8);
}