13#include <boost/test/unit_test.hpp>
51#define WAIT_FOR(futures) \
53 for (const auto& f : futures) { \
54 BOOST_REQUIRE(f.wait_for(TEST_WAIT_TIMEOUT) == std::future_status::ready); \
62 return std::move(*
Assert(pool.
Submit(std::forward<F>(fn))));
92 std::counting_semaphore<>
blocker(0);
116 std::vector<std::function<
void()>>
tasks;
129 std::atomic<int> counter = 0;
132 std::vector<std::future<void>>
futures;
136 counter.fetch_add(i, std::memory_order_relaxed);
152 std::counting_semaphore<>
blocker(0);
178 std::atomic<bool> flag =
false;
181 flag.store(
true, std::memory_order_release);
206 const auto make_err{[&](
size_t n) {
return strprintf(
"error on thread #%s", n); }};
209 std::vector<std::future<void>>
futures;
226 std::counting_semaphore<>
blocker(0);
231 std::atomic<int> counter = 0;
234 counter.fetch_add(1, std::memory_order_relaxed);
257 std::promise<void> signal;
264 signal.get_future().wait();
274 std::counting_semaphore<>
blocker(0);
310 std::atomic<int> counter{0};
312 std::vector<std::future<void>>
futures;
316 counter.fetch_add(1, std::memory_order_relaxed);
336 std::vector<std::function<
void()>>
tasks;
347 std::atomic<int> counter{0};
348 std::counting_semaphore<>
blocker(0);
352 counter.fetch_add(1, std::memory_order_relaxed);
378 std::this_thread::yield();
398 std::counting_semaphore<>
blocker(0);
402 std::atomic<int> counter{0};
404 std::vector<std::future<void>>
futures;
426 std::counting_semaphore<>
blocker(0);
443 std::this_thread::yield();
463 std::atomic_int32_t
sum{0};
465 sum.fetch_add(i, std::memory_order_relaxed);
#define Assert(val)
Identity function.
BOOST_CHECK_EXCEPTION predicates to check the specific validation error.
I randrange(I range) noexcept
Generate a random integer in the range [0..range), with range > 0.
Fixed-size thread pool for running arbitrary tasks concurrently.
void Start(int num_workers) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Start worker threads.
util::Expected< Future< F >, SubmitError > Submit(F &&fn) noexcept EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Enqueues a new task for asynchronous execution.
int GetNumCores()
Return the number of cores available on the current system.
BOOST_FIXTURE_TEST_SUITE(cuckoocache_tests, BasicTestingSetup)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END()
BOOST_CHECK_EXCEPTION(HTTPHeaders{}.Read(reader), std::runtime_error, HasReason{"Empty HTTP header name"})
#define BOOST_CHECK_EQUAL(v1, v2)
#define BOOST_CHECK(expr)
std::vector< std::function< void()> > tasks(MAX_READ_WORKERS)
constexpr std::string_view SubmitErrorString(const ThreadPool::SubmitError err) noexcept
#define WAIT_FOR(futures)
BOOST_AUTO_TEST_CASE(submit_fails_with_correct_error)
constexpr char POOL_NAME[]
constexpr auto TEST_WAIT_TIMEOUT
auto Submit(ThreadPool &pool, F &&fn)
std::vector< std::future< void > > BlockWorkers(ThreadPool &threadPool, std::counting_semaphore<> &release_sem, size_t num_of_threads_to_block)
void UninterruptibleSleep(const std::chrono::microseconds &n)
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.