9 #include "fml/synchronization/waitable_event.h"
10 #include "gtest/gtest.h"
17 TEST(ResourceManagerVKTest, CreatesANewInstance) {
28 class DeathRattle final {
30 explicit DeathRattle(std::function<
void()> callback)
31 : callback_(
std::move(callback)) {}
33 DeathRattle(DeathRattle&&) =
default;
34 DeathRattle& operator=(DeathRattle&&) =
default;
36 ~DeathRattle() { callback_(); }
39 std::function<void()> callback_;
44 TEST(ResourceManagerVKTest, ReclaimMovesAResourceAndDestroysIt) {
47 auto waiter = fml::AutoResetWaitableEvent();
49 auto rattle = DeathRattle([&waiter]() { waiter.Signal(); });
52 EXPECT_FALSE(waiter.IsSignaledForTest());
62 TEST(ResourceManagerVKTest, TerminatesWhenOutOfScope) {
66 std::weak_ptr<ResourceManagerVK> manager;
74 EXPECT_EQ(manager.lock(),
nullptr);
77 TEST(ResourceManagerVKTest, IsThreadSafe) {
82 std::weak_ptr<ResourceManagerVK> manager;
88 struct MockResource {};
90 std::thread thread1([&manager]() {
94 std::thread thread2([&manager]() {
103 EXPECT_EQ(manager.lock(),
nullptr);