#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
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);
}
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());
}
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());
}
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);
}