#include #include TEST(Thread, Run) { auto loop = uvw::loop::get_default(); auto has_run = std::make_shared(); auto cb = [](const std::shared_ptr &data) { if(auto has_run_ptr = std::static_pointer_cast(data); has_run_ptr) { *has_run_ptr = true; } }; auto handle = loop->resource(cb, has_run); ASSERT_TRUE(handle->run()); ASSERT_TRUE(handle->join()); ASSERT_TRUE(*has_run); loop->run(); } TEST(ThreadLocalStorage, SetGet) { auto loop = uvw::loop::get_default(); auto localStorage = loop->resource(); auto flag{true}; localStorage->set(&flag); ASSERT_TRUE(localStorage->get()); loop->run(); } TEST(Mutex, LockUnlock) { auto loop = uvw::loop::get_default(); auto mtx = loop->resource(); mtx->lock(); #ifdef _MSC_VER // this is allowed by libuv on Windows ASSERT_TRUE(mtx->try_lock()); #else ASSERT_FALSE(mtx->try_lock()); #endif mtx->unlock(); ASSERT_TRUE(mtx->try_lock()); #ifdef _MSC_VER // this is allowed by libuv on Windows ASSERT_TRUE(mtx->try_lock()); #else ASSERT_FALSE(mtx->try_lock()); #endif mtx->unlock(); loop->run(); } TEST(Mutex, RecursiveLockUnlock) { auto loop = uvw::loop::get_default(); auto recursive_mtx = loop->resource(true); recursive_mtx->lock(); recursive_mtx->unlock(); recursive_mtx->lock(); ASSERT_TRUE(recursive_mtx->try_lock()); recursive_mtx->unlock(); recursive_mtx->unlock(); loop->run(); }