|
@@ -18,18 +18,6 @@
|
|
|
#include "gtest/gtest.h"
|
|
|
|
|
|
using namespace llvm;
|
|
|
-using namespace std::chrono;
|
|
|
-
|
|
|
-/// Try best to make this thread not progress faster than the main thread
|
|
|
-static void yield() {
|
|
|
-#ifdef LLVM_ENABLE_THREADS
|
|
|
- std::this_thread::yield();
|
|
|
-#endif
|
|
|
- std::this_thread::sleep_for(milliseconds(200));
|
|
|
-#ifdef LLVM_ENABLE_THREADS
|
|
|
- std::this_thread::yield();
|
|
|
-#endif
|
|
|
-}
|
|
|
|
|
|
// Fixture for the unittests, allowing to *temporarily* disable the unittests
|
|
|
// on a particular platform
|
|
@@ -83,11 +71,9 @@ TEST_F(ThreadPoolTest, AsyncBarrier) {
|
|
|
ThreadPool Pool;
|
|
|
for (size_t i = 0; i < 5; ++i) {
|
|
|
Pool.async([&checked_in, i] {
|
|
|
- yield();
|
|
|
++checked_in;
|
|
|
});
|
|
|
}
|
|
|
- ASSERT_EQ(0, checked_in);
|
|
|
Pool.wait();
|
|
|
ASSERT_EQ(5, checked_in);
|
|
|
}
|
|
@@ -111,13 +97,10 @@ TEST_F(ThreadPoolTest, Async) {
|
|
|
CHECK_UNSUPPORTED();
|
|
|
ThreadPool Pool;
|
|
|
std::atomic_int i{0};
|
|
|
- // sleep here just to ensure that the not-equal is correct.
|
|
|
Pool.async([&i] {
|
|
|
- yield();
|
|
|
++i;
|
|
|
});
|
|
|
Pool.async([&i] { ++i; });
|
|
|
- ASSERT_NE(2, i.load());
|
|
|
Pool.wait();
|
|
|
ASSERT_EQ(2, i.load());
|
|
|
}
|
|
@@ -126,14 +109,11 @@ TEST_F(ThreadPoolTest, GetFuture) {
|
|
|
CHECK_UNSUPPORTED();
|
|
|
ThreadPool Pool;
|
|
|
std::atomic_int i{0};
|
|
|
- // sleep here just to ensure that the not-equal is correct.
|
|
|
Pool.async([&i] {
|
|
|
- yield();
|
|
|
++i;
|
|
|
});
|
|
|
// Force the future using get()
|
|
|
Pool.async([&i] { ++i; }).get();
|
|
|
- ASSERT_NE(2, i.load());
|
|
|
Pool.wait();
|
|
|
ASSERT_EQ(2, i.load());
|
|
|
}
|
|
@@ -147,11 +127,9 @@ TEST_F(ThreadPoolTest, PoolDestruction) {
|
|
|
ThreadPool Pool;
|
|
|
for (size_t i = 0; i < 5; ++i) {
|
|
|
Pool.async([&checked_in, i] {
|
|
|
- yield();
|
|
|
++checked_in;
|
|
|
});
|
|
|
}
|
|
|
- ASSERT_EQ(0, checked_in);
|
|
|
}
|
|
|
ASSERT_EQ(5, checked_in);
|
|
|
}
|