2017-10-09 22:08:24 +00:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
|
|
#include <base/system.h>
|
|
|
|
|
|
|
|
static void Nothing(void *pUser)
|
|
|
|
{
|
|
|
|
(void)pUser;
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(Thread, Detach)
|
|
|
|
{
|
2019-03-19 10:44:16 +00:00
|
|
|
void *pThread = thread_init(Nothing, 0, "detach");
|
2017-10-09 22:08:24 +00:00
|
|
|
thread_detach(pThread);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void SetToOne(void *pUser)
|
|
|
|
{
|
|
|
|
*(int *)pUser = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(Thread, Wait)
|
|
|
|
{
|
|
|
|
int Integer = 0;
|
2019-03-19 10:44:16 +00:00
|
|
|
void *pThread = thread_init(SetToOne, &Integer, "wait");
|
2017-10-09 22:08:24 +00:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void SemaphoreThread(void *pUser)
|
|
|
|
{
|
|
|
|
SEMAPHORE *pSemaphore = (SEMAPHORE *)pUser;
|
|
|
|
sphore_wait(pSemaphore);
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(Thread, SemaphoreMultiThreaded)
|
|
|
|
{
|
|
|
|
SEMAPHORE Semaphore;
|
|
|
|
sphore_init(&Semaphore);
|
|
|
|
sphore_signal(&Semaphore);
|
2019-03-19 10:44:16 +00:00
|
|
|
void *pThread = thread_init(SemaphoreThread, &Semaphore, "semaphore");
|
2017-10-09 22:08:24 +00:00
|
|
|
thread_wait(pThread);
|
|
|
|
sphore_destroy(&Semaphore);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void LockThread(void *pUser)
|
|
|
|
{
|
|
|
|
LOCK *pLock = (LOCK *)pUser;
|
|
|
|
lock_wait(*pLock);
|
|
|
|
lock_unlock(*pLock);
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST(Thread, Lock)
|
|
|
|
{
|
|
|
|
LOCK Lock = lock_create();
|
2018-01-05 15:06:24 +00:00
|
|
|
lock_wait(Lock);
|
2019-03-19 10:44:16 +00:00
|
|
|
void *pThread = thread_init(LockThread, &Lock, "lock");
|
2017-10-09 22:08:24 +00:00
|
|
|
lock_unlock(Lock);
|
|
|
|
thread_wait(pThread);
|
|
|
|
}
|