libcruft-util/test/thread/event.cpp
Danny Robson 01094611eb thread: add minimal thread primitives for win32
This allows us to get around the lack of these types under MinGW
2019-06-22 15:46:34 +10:00

41 lines
994 B
C++

#include "thread/event.hpp"
#include "thread/thread.hpp"
#include "tap.hpp"
#include <atomic>
int
main ()
{
cruft::TAP::logger tap;
// create an event which a thread will wait on. after it's been woken up
// it will modify the contents of val. this will be tested at a couple of
// points for consistency.
//
// the test isn't 100% deterministic (because we're attempting to create
// specific timings by just waiting). but it's a decent first check.
std::atomic<int> val = 0;
cruft::thread::event a;
cruft::thread::thread t ([&] () {
a.wait ();
++val;
});
// block for hopefully long enough to allow the above thread to change
// the value of the integer.
cruft::thread::this_thread::sleep_for (std::chrono::milliseconds (100));
tap.expect_eq (val, 0, "waiting actually blocks");
a.notify_all ();
t.join ();
tap.expect_eq (val, 1, "notification released the lock");
return tap.status ();
}