30 #include "gtest/gtest.h" 34 TEST(threadpool, wait_nothing)
38 waiter.
wait(tpool.get());
41 TEST(threadpool, wait_waits)
45 std::atomic<bool> b(
false);
48 waiter.
wait(tpool.get());
52 TEST(threadpool, one_thread)
57 std::atomic<unsigned int> counter(0);
58 for (
size_t n = 0; n < 4096; ++n)
60 tpool->submit(&waiter, [&counter](){++counter;});
62 waiter.
wait(tpool.get());
66 TEST(threadpool, many_threads)
71 std::atomic<unsigned int> counter(0);
72 for (
size_t n = 0; n < 4096; ++n)
74 tpool->submit(&waiter, [&counter](){++counter;});
76 waiter.
wait(tpool.get());
80 static uint64_t fibonacci(std::shared_ptr<tools::threadpool> tpool,
uint64_t n)
86 tpool->submit(&waiter, [&tpool, &
f1, n](){
f1 = fibonacci(tpool, n-1); });
87 tpool->submit(&waiter, [&tpool, &
f2, n](){
f2 = fibonacci(tpool, n-2); });
88 waiter.
wait(tpool.get());
92 TEST(threadpool, reentrency)
98 waiter.
wait(tpool.get());
108 waiter.
wait(tpool.get());
117 bool thrown =
false, executed =
false;
118 tpool->submit(&waiter, [&](){
119 try { tpool->submit(&waiter, [&](){ executed =
true; }); }
120 catch(
const std::exception &e) { thrown =
true; }
122 waiter.
wait(tpool.get());
127 TEST(threadpool, leaf_reentrancy)
132 std::atomic<int> counter(0);
133 for (
int i = 0; i < 1000; ++i)
135 tpool->submit(&waiter, [&](){
137 for (
int j = 0; j < 500; ++j)
139 tpool->submit(&waiter, [&](){ ++counter; },
true);
141 waiter.
wait(tpool.get());
144 waiter.
wait(tpool.get());
TEST(threadpool, wait_nothing)
#define ASSERT_FALSE(condition)
#define ASSERT_EQ(val1, val2)
unsigned __int64 uint64_t
#define ASSERT_TRUE(condition)