// // Created by fomenko on 26.09.2019. // #include "gtest/gtest.h" #include "gmock/gmock.h" #include "piconditionvar.h" #include #include "testutil.h" class ConditionLock : public ::testing::Test, public TestUtil { public: PIConditionLock* m = new PIConditionLock(); }; TEST_F(ConditionLock, lock_is_protect) { m->lock(); bool isProtect = true; createThread([&](){ m->lock(); isProtect = false; }); ASSERT_TRUE(isProtect); } TEST_F(ConditionLock, unlock_is_release) { m->lock(); volatile bool isReleased = false; m->unlock(); createThread([&](){ m->lock(); isReleased = true; m->unlock(); }); EXPECT_TRUE(thread->waitForFinish(WAIT_THREAD_TIME_MS)); ASSERT_TRUE(isReleased); } TEST_F(ConditionLock, tryLock_is_false_when_locked) { createThread([&](){ m->lock(); piMSleep(WAIT_THREAD_TIME_MS); }); ASSERT_FALSE(m->tryLock()); } TEST_F(ConditionLock, tryLock_is_true_when_unlocked) { ASSERT_TRUE(m->tryLock()); } TEST_F(ConditionLock, tryLock_is_recursive_lock_enable) { m->lock(); ASSERT_TRUE(m->tryLock()); }