/
dieoska
/
ddnet
Обзор
Документация
Войти
/
dieoska
/
ddnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/test/thread_test.cpp
98 строк
2 KB
ChillerDragon
Add test suffix
22 ноя 2025, 16:34
22 ноя 2025, 16:34
7b943a4
Код
Авторство
О чём код?
#include <base/lock.h> #include <base/system.h> #include <base/tl/threading.h> #include <gtest/gtest.h> static void Nothing(void *pUser) { (void)pUser; } TEST(Thread, Detach) { void *pThread = thread_init(Nothing, nullptr, "detach"); thread_detach(pThread); } static void SetToOne(void *pUser) { *(int *)pUser = 1; } TEST(Thread, Wait) { int Integer = 0; void *pThread = thread_init(SetToOne, &Integer, "wait"); thread_wait(pThread); EXPECT_EQ(Integer, 1); } TEST(Thread, Yield) { thread_yield(); } TEST(Thread, Semaphore) { SEMAPHORE Semaphore; sphore_init(&Semaphore); sphore_destroy(&Semaphore); } TEST(Thread, SemaphoreSingleThreaded) { SEMAPHORE Semaphore; sphore_init(&Semaphore); sphore_signal(&Semaphore); sphore_signal(&Semaphore); sphore_wait(&Semaphore); sphore_wait(&Semaphore); sphore_destroy(&Semaphore); } TEST(Thread, SemaphoreWrapperSingleThreaded) { CSemaphore Semaphore; EXPECT_EQ(Semaphore.GetApproximateValue(), 0); Semaphore.Signal(); EXPECT_EQ(Semaphore.GetApproximateValue(), 1); Semaphore.Signal(); EXPECT_EQ(Semaphore.GetApproximateValue(), 2); Semaphore.Wait(); EXPECT_EQ(Semaphore.GetApproximateValue(), 1); Semaphore.Wait(); EXPECT_EQ(Semaphore.GetApproximateValue(), 0); } static void SemaphoreThread(void *pUser) { SEMAPHORE *pSemaphore = (SEMAPHORE *)pUser; sphore_wait(pSemaphore); } TEST(Thread, SemaphoreMultiThreaded) { SEMAPHORE Semaphore; sphore_init(&Semaphore); sphore_signal(&Semaphore); void *pThread = thread_init(SemaphoreThread, &Semaphore, "semaphore"); thread_wait(pThread); sphore_destroy(&Semaphore); } static void LockThread(void *pUser) { CLock *pLock = (CLock *)pUser; pLock->lock(); pLock->unlock(); } TEST(Thread, Lock) { CLock Lock; Lock.lock(); void *pThread = thread_init(LockThread, &Lock, "lock"); Lock.unlock(); thread_wait(pThread); }