/
oop_nust_misis
/
RWLock
Обзор
Документация
Войти
/
oop_nust_misis
/
RWLock
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
master
tests/test_basic.cpp
76 строк
2 KB
seisa
first_commit
27 мар 2025, 22:02
27 мар 2025, 22:02
65f5068
Код
Авторство
О чём код?
#include <gtest/gtest.h> #include <chrono> #include <thread> #include <atomic> #include <library.hpp> using template_library::RWSpinLock; using std::literals::chrono_literals::operator""ms; TEST(Correctness, Read) { std::atomic<int> counter = {0}; RWSpinLock lock; lock.LockRead(); std::thread t1([&] { lock.LockRead(); counter++; }); t1.join(); ASSERT_EQ(counter.load(), 1); } TEST(Correctness, Write) { std::atomic<int> counter = {0}; RWSpinLock lock; lock.LockWrite(); std::thread t1([&] { lock.LockWrite(); counter++; }); std::this_thread::sleep_for(100ms); ASSERT_EQ(counter.load(), 0); lock.UnlockWrite(); t1.join(); ASSERT_EQ(counter.load(), 1); } TEST(Correctness, ReadWrite) { std::atomic<int> counter = {0}; RWSpinLock lock; lock.LockRead(); std::thread t1([&] { lock.LockWrite(); counter++; }); std::this_thread::sleep_for(100ms); ASSERT_EQ(counter.load(), 0); lock.UnlockRead(); t1.join(); ASSERT_EQ(counter.load(), 1); } TEST(Correctness, WriteRead) { std::atomic<int> counter = {0}; RWSpinLock lock; lock.LockWrite(); std::thread t1([&] { lock.LockRead(); counter++; }); std::this_thread::sleep_for(100ms); ASSERT_EQ(counter.load(), 0); lock.UnlockWrite(); t1.join(); ASSERT_EQ(counter.load(), 1); } int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }