diff --git a/CMakeLists.txt b/CMakeLists.txt index a504c7b..589d533 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,7 @@ if(CMAKE_BUILD_TYPE MATCHES "Debug") src/test/UDPC_UnitTest.cpp src/test/TestTSLQueue.cpp src/test/TestUDPC.cpp + src/test/TestSharedSpinLock.cpp ) add_executable(UnitTest ${UDPC_UnitTest_SOURCES}) target_compile_features(UnitTest PUBLIC cxx_std_11) diff --git a/src/test/TestSharedSpinLock.cpp b/src/test/TestSharedSpinLock.cpp new file mode 100644 index 0000000..dda0e4e --- /dev/null +++ b/src/test/TestSharedSpinLock.cpp @@ -0,0 +1,18 @@ +#include + +#include "CXX11_shared_spin_lock.hpp" + +TEST(CXX11_shared_spin_lock, simple) { + UDPC::SharedSpinLock::Ptr spinLockPtr = UDPC::SharedSpinLock::newInstance(); + + auto readLock = spinLockPtr->spin_read_lock(); + EXPECT_TRUE(readLock.isValid()); + EXPECT_TRUE(spinLockPtr->spin_read_lock().isValid()); + EXPECT_FALSE(spinLockPtr->try_spin_write_lock().isValid()); + + auto writeLock = spinLockPtr->trade_read_for_write_lock(readLock); + EXPECT_TRUE(writeLock.isValid()); + EXPECT_FALSE(readLock.isValid()); + EXPECT_FALSE(spinLockPtr->try_spin_read_lock().isValid()); + EXPECT_FALSE(spinLockPtr->try_spin_write_lock().isValid()); +}