#include <gtest/gtest.h>#include <string.h>#include <string>#include <list>#include <map> #include "typedefs.h"#include "WelsThreadLib.h"#include "WelsThreadPool.h"#include "WelsTask.h"#include "WelsThreadPoolTest.h" #define TEST_TASK_NUM 30 uint32_t CSimpleTask::id = 0; WELS_THREAD_ROUTINE_TYPE OneCallingFunc(void *) { CThreadPoolTest cThreadPoolTest; CSimpleTask* aTasks[TEST_TASK_NUM]; CWelsThreadPool* pThreadPool = (CWelsThreadPool::AddReference()); if (pThreadPool == NULL) return 0; int32_t i; for (i = 0; i < TEST_TASK_NUM; i++) { aTasks[i] = new CSimpleTask (&cThreadPoolTest); } for (i = 0; i < TEST_TASK_NUM; i++) { pThreadPool->QueueTask (aTasks[i]); } while (cThreadPoolTest.GetTaskCount() < TEST_TASK_NUM) { WelsSleep (1); } for (i = 0; i < TEST_TASK_NUM; i++) { delete aTasks[i]; } pThreadPool->RemoveInstance(); return 0;} TEST (CThreadPoolTest, CThreadPoolTest) { OneCallingFunc(NULL); int iRet = CWelsThreadPool::SetThreadNum (8); EXPECT_EQ (0, iRet); EXPECT_FALSE (CWelsThreadPool::IsReferenced()); CWelsThreadPool* pThreadPool = (CWelsThreadPool::AddReference()); ASSERT_TRUE (pThreadPool != NULL); EXPECT_TRUE (pThreadPool->IsReferenced()); EXPECT_EQ (8, pThreadPool->GetThreadNum()); iRet = CWelsThreadPool::SetThreadNum (4); EXPECT_TRUE (0 != iRet); EXPECT_EQ (8, pThreadPool->GetThreadNum()); pThreadPool->RemoveInstance(); iRet = CWelsThreadPool::SetThreadNum (4); EXPECT_EQ (0, iRet); pThreadPool = (CWelsThreadPool::AddReference()); EXPECT_TRUE (pThreadPool->IsReferenced()); EXPECT_EQ (4, pThreadPool->GetThreadNum()); pThreadPool->RemoveInstance(); EXPECT_FALSE (CWelsThreadPool::IsReferenced());} TEST (CThreadPoolTest, CThreadPoolTestMulti) { int iCallingNum = 10; WELS_THREAD_HANDLE mThreadID[30]; int i = 0; WELS_THREAD_ERROR_CODE rc; for (i = 0; i < iCallingNum; i++) { rc = WelsThreadCreate (& (mThreadID[i]), OneCallingFunc, NULL, 0); ASSERT_TRUE (rc == WELS_THREAD_ERROR_OK); WelsSleep (1); } for (i = iCallingNum; i < iCallingNum * 2; i++) { rc = WelsThreadCreate (& (mThreadID[i]), OneCallingFunc, NULL, 0); ASSERT_TRUE (rc == WELS_THREAD_ERROR_OK); WelsSleep (1); WelsThreadJoin (mThreadID[i]); } for (i = 0; i < iCallingNum; i++) { WelsThreadJoin (mThreadID[i]); } for (i = iCallingNum * 2; i < iCallingNum * 3; i++) { rc = WelsThreadCreate (& (mThreadID[i]), OneCallingFunc, NULL, 0); ASSERT_TRUE (rc == WELS_THREAD_ERROR_OK); WelsSleep (1); WelsThreadJoin (mThreadID[i]); } EXPECT_FALSE (CWelsThreadPool::IsReferenced());}
#include <gtest/gtest.h>
#include <string.h>
#include <string>
#include <list>
#include <map>
#include "typedefs.h"
#include "WelsThreadLib.h"
#include "WelsThreadPool.h"
#include "WelsTask.h"
#include "WelsThreadPoolTest.h"
#define TEST_TASK_NUM 30
uint32_t CSimpleTask::id = 0;
WELS_THREAD_ROUTINE_TYPE OneCallingFunc(void *) {
CThreadPoolTest cThreadPoolTest;
CSimpleTask* aTasks[TEST_TASK_NUM];
CWelsThreadPool* pThreadPool = (CWelsThreadPool::AddReference());
if (pThreadPool == NULL)
return 0;
int32_t i;
for (i = 0; i < TEST_TASK_NUM; i++) {
aTasks[i] = new CSimpleTask (&cThreadPoolTest);
}
for (i = 0; i < TEST_TASK_NUM; i++) {
pThreadPool->QueueTask (aTasks[i]);
}
while (cThreadPoolTest.GetTaskCount() < TEST_TASK_NUM) {
WelsSleep (1);
}
for (i = 0; i < TEST_TASK_NUM; i++) {
delete aTasks[i];
}
pThreadPool->RemoveInstance();
return 0;
}
TEST (CThreadPoolTest, CThreadPoolTest) {
OneCallingFunc(NULL);
int iRet = CWelsThreadPool::SetThreadNum (8);
EXPECT_EQ (0, iRet);
EXPECT_FALSE (CWelsThreadPool::IsReferenced());
CWelsThreadPool* pThreadPool = (CWelsThreadPool::AddReference());
ASSERT_TRUE (pThreadPool != NULL);
EXPECT_TRUE (pThreadPool->IsReferenced());
EXPECT_EQ (8, pThreadPool->GetThreadNum());
iRet = CWelsThreadPool::SetThreadNum (4);
EXPECT_TRUE (0 != iRet);
EXPECT_EQ (8, pThreadPool->GetThreadNum());
pThreadPool->RemoveInstance();
iRet = CWelsThreadPool::SetThreadNum (4);
EXPECT_EQ (0, iRet);
pThreadPool = (CWelsThreadPool::AddReference());
EXPECT_TRUE (pThreadPool->IsReferenced());
EXPECT_EQ (4, pThreadPool->GetThreadNum());
pThreadPool->RemoveInstance();
EXPECT_FALSE (CWelsThreadPool::IsReferenced());
}
TEST (CThreadPoolTest, CThreadPoolTestMulti) {
int iCallingNum = 10;
WELS_THREAD_HANDLE mThreadID[30];
int i = 0;
WELS_THREAD_ERROR_CODE rc;
for (i = 0; i < iCallingNum; i++) {
rc = WelsThreadCreate (& (mThreadID[i]), OneCallingFunc, NULL, 0);
ASSERT_TRUE (rc == WELS_THREAD_ERROR_OK);
WelsSleep (1);
}
for (i = iCallingNum; i < iCallingNum * 2; i++) {
rc = WelsThreadCreate (& (mThreadID[i]), OneCallingFunc, NULL, 0);
ASSERT_TRUE (rc == WELS_THREAD_ERROR_OK);
WelsSleep (1);
WelsThreadJoin (mThreadID[i]);
}
for (i = 0; i < iCallingNum; i++) {
WelsThreadJoin (mThreadID[i]);
}
for (i = iCallingNum * 2; i < iCallingNum * 3; i++) {
rc = WelsThreadCreate (& (mThreadID[i]), OneCallingFunc, NULL, 0);
ASSERT_TRUE (rc == WELS_THREAD_ERROR_OK);
WelsSleep (1);
WelsThreadJoin (mThreadID[i]);
}
EXPECT_FALSE (CWelsThreadPool::IsReferenced());
}