#include #include #include #include #include using namespace std::chrono_literals; TEST(ThreadPool, Basic) { constexpr size_t adder_count = 500000; constexpr std::array pool_sizes{1, 2, 4, 8, 100}; for (const auto pool_size : pool_sizes) { utils::ThreadPool pool{pool_size}; std::atomic count{0}; for (size_t i = 0; i < adder_count; ++i) { pool.AddTask([&] { count.fetch_add(1); }); } while (pool.UnfinishedTasksNum() != 0) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); } ASSERT_EQ(count.load(), adder_count); } }