#include "doctest.h" #include #include using namespace tt; TEST_CASE("a mutex can block a thread") { auto mutex = Mutex(); mutex.lock(portMAX_DELAY); Thread thread = Thread( "thread", 1024, [&mutex]() { mutex.lock(portMAX_DELAY); return 0; } ); thread.start(); kernel::delayMillis(5); CHECK_EQ(thread.getState(), Thread::State::Running); mutex.unlock(); kernel::delayMillis(5); CHECK_EQ(thread.getState(), Thread::State::Stopped); thread.join(); } TEST_CASE("a Mutex can be locked exactly once") { Mutex mutex; CHECK_EQ(mutex.lock(0), true); CHECK_EQ(mutex.lock(0), false); CHECK_EQ(mutex.unlock(), true); } TEST_CASE("unlocking a Mutex without locking returns false") { Mutex mutex; CHECK_EQ(mutex.unlock(), false); } TEST_CASE("unlocking a Mutex twice returns false on the second attempt") { Mutex mutex; CHECK_EQ(mutex.lock(0), true); CHECK_EQ(mutex.unlock(), true); CHECK_EQ(mutex.unlock(), false); }