mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-27 08:05:41 +00:00
79 lines
1.3 KiB
C++
79 lines
1.3 KiB
C++
|
#include "common/event.h"
|
||
|
#include "gtest/gtest.h"
|
||
|
#include <atomic>
|
||
|
#include <chrono>
|
||
|
#include <thread>
|
||
|
|
||
|
TEST(Event, InitialStateUnsignaled)
|
||
|
{
|
||
|
Common::Event e;
|
||
|
ASSERT_FALSE(e.TryWait(1));
|
||
|
}
|
||
|
|
||
|
TEST(Event, SignalOnSameThread)
|
||
|
{
|
||
|
Common::Event e;
|
||
|
e.Signal();
|
||
|
ASSERT_TRUE(e.TryWait(1));
|
||
|
}
|
||
|
|
||
|
TEST(Event, SignalOnSecondThread)
|
||
|
{
|
||
|
Common::Event e;
|
||
|
|
||
|
std::thread thr([&e]() { e.Signal(); });
|
||
|
e.Wait();
|
||
|
thr.join();
|
||
|
}
|
||
|
|
||
|
TEST(Event, SignalOnSecondThreadWithDelay)
|
||
|
{
|
||
|
Common::Event e;
|
||
|
std::atomic_bool fl{false};
|
||
|
|
||
|
std::thread thr([&e, &fl]() {
|
||
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||
|
e.Signal();
|
||
|
fl.store(true);
|
||
|
});
|
||
|
ASSERT_FALSE(fl.load());
|
||
|
e.Wait();
|
||
|
ASSERT_TRUE(fl.load());
|
||
|
thr.join();
|
||
|
}
|
||
|
|
||
|
TEST(Event, ResetAfterSignaling)
|
||
|
{
|
||
|
Common::Event e;
|
||
|
|
||
|
e.Signal();
|
||
|
e.Reset();
|
||
|
|
||
|
ASSERT_FALSE(e.TryWait(1));
|
||
|
}
|
||
|
|
||
|
TEST(Event, WaitForMultiple)
|
||
|
{
|
||
|
Common::Event e1, e2;
|
||
|
e1.Signal();
|
||
|
e2.Signal();
|
||
|
|
||
|
Common::Event* events[] = { &e1, &e2 };
|
||
|
Common::Event::WaitForMultiple(events, countof(events));
|
||
|
}
|
||
|
|
||
|
TEST(Event, AutoReset)
|
||
|
{
|
||
|
Common::Event e(true);
|
||
|
e.Signal();
|
||
|
ASSERT_TRUE(e.TryWait(1));
|
||
|
ASSERT_FALSE(e.TryWait(1));
|
||
|
}
|
||
|
|
||
|
TEST(Event, NoAutoReset)
|
||
|
{
|
||
|
Common::Event e(false);
|
||
|
e.Signal();
|
||
|
ASSERT_TRUE(e.TryWait(1));
|
||
|
ASSERT_TRUE(e.TryWait(1));
|
||
|
}
|