#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include
#include
class CustomWorkerBehavior : public tf::WorkerInterface {
public:
CustomWorkerBehavior(std::atomic& counter, std::vector& 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& _counter;
std::vector& _ids;
std::mutex _mutex;
};
void worker_interface_basics(unsigned W) {
std::atomic counter{0};
std::vector ids;
{
tf::Executor executor(W, tf::make_worker_interface(counter, ids));
}
REQUIRE(counter == W*2);
REQUIRE(ids.size() == W);
std::sort(ids.begin(), ids.end());
for(size_t i=0; i