Showing the changes to test/common/WelsThreadPoolTest.cpp (1 of 10 files). Show all
Unified · Split
| @@ -10,7 +10,7 @@ · 9 unmodified lines | ||
| 10 | 10 | #include "WelsTask.h" |
| 11 | 11 | #include "WelsThreadPoolTest.h" |
| 12 | 12 | |
| 13 | −#define TEST_TASK_NUM 20 | |
| 13 | +#define TEST_TASK_NUM 30 | |
| 14 | 14 | |
| 15 | 15 | class CSimpleTask : public IWelsTask { |
| 16 | 16 | public: |
| @@ -36,11 +36,10 @@ class CSimpleTask : public IWelsTask { · 19 unmodified lines | ||
| 36 | 36 | |
| 37 | 37 | uint32_t CSimpleTask::id = 0; |
| 38 | 38 | |
| 39 | − | |
| 40 | −TEST (CThreadPoolTest, CThreadPoolTest) { | |
| 39 | +void* OneCallingFunc() { | |
| 41 | 40 | CThreadPoolTest cThreadPoolTest; |
| 42 | 41 | CSimpleTask* aTasks[TEST_TASK_NUM]; |
| 43 | − CWelsThreadPool cThreadPool (&cThreadPoolTest); | |
| 42 | + CWelsThreadPool* pThreadPool = & (CWelsThreadPool::AddReference (&cThreadPoolTest)); | |
| 44 | 43 | |
| 45 | 44 | int32_t i; |
| 46 | 45 | for (i = 0; i < TEST_TASK_NUM; i++) { |
| @@ -48,7 +47,7 @@ TEST (CThreadPoolTest, CThreadPoolTest) { · 1 unmodified line | ||
| 48 | 47 | } |
| 49 | 48 | |
| 50 | 49 | for (i = 0; i < TEST_TASK_NUM; i++) { |
| 51 | − cThreadPool.QueueTask (aTasks[i]); | |
| 50 | + pThreadPool->QueueTask (aTasks[i]); | |
| 52 | 51 | } |
| 53 | 52 | |
| 54 | 53 | while (cThreadPoolTest.GetTaskCount() < TEST_TASK_NUM) { |
| @@ -58,5 +57,66 @@ TEST (CThreadPoolTest, CThreadPoolTest) { · 3 unmodified lines | ||
| 58 | 57 | for (i = 0; i < TEST_TASK_NUM; i++) { |
| 59 | 58 | delete aTasks[i]; |
| 60 | 59 | } |
| 60 | + pThreadPool->RemoveInstance(); | |
| 61 | + | |
| 62 | + return 0; | |
| 63 | +} | |
| 64 | + | |
| 65 | + | |
| 66 | +TEST (CThreadPoolTest, CThreadPoolTest) { | |
| 67 | + OneCallingFunc(); | |
| 68 | + | |
| 69 | + int iRet = CWelsThreadPool::SetThreadNum (8); | |
| 70 | + EXPECT_EQ (0, iRet); | |
| 71 | + EXPECT_FALSE (CWelsThreadPool::IsReferenced()); | |
| 72 | + | |
| 73 | + CWelsThreadPool* pThreadPool = & (CWelsThreadPool::AddReference (NULL)); | |
| 74 | + EXPECT_TRUE(pThreadPool->IsReferenced()); | |
| 75 | + EXPECT_EQ (8, pThreadPool->GetThreadNum()); | |
| 76 | + | |
| 77 | + iRet = CWelsThreadPool::SetThreadNum (4); | |
| 78 | + EXPECT_TRUE (0 != iRet); | |
| 79 | + EXPECT_EQ (8, pThreadPool->GetThreadNum()); | |
| 80 | + | |
| 81 | + pThreadPool->RemoveInstance(); | |
| 82 | + | |
| 83 | + iRet = CWelsThreadPool::SetThreadNum (4); | |
| 84 | + EXPECT_EQ (0, iRet); | |
| 85 | + pThreadPool = & (CWelsThreadPool::AddReference (NULL)); | |
| 86 | + EXPECT_TRUE (pThreadPool->IsReferenced()); | |
| 87 | + EXPECT_EQ (4, pThreadPool->GetThreadNum()); | |
| 88 | + pThreadPool->RemoveInstance(); | |
| 89 | + | |
| 90 | + EXPECT_FALSE (CWelsThreadPool::IsReferenced()); | |
| 91 | +} | |
| 92 | + | |
| 93 | + | |
| 94 | +TEST (CThreadPoolTest, CThreadPoolTestMulti) { | |
| 95 | + int iCallingNum = 10; | |
| 96 | + WELS_THREAD_HANDLE mThreadID[30]; | |
| 97 | + int i = 0; | |
| 98 | + | |
| 99 | + for (i = 0; i < iCallingNum; i++) { | |
| 100 | + WelsThreadCreate (& (mThreadID[i]), (LPWELS_THREAD_ROUTINE)OneCallingFunc, NULL, 0); | |
| 101 | + WelsSleep (1); | |
| 102 | + } | |
| 103 | + | |
| 104 | + for (i = iCallingNum; i < iCallingNum * 2; i++) { | |
| 105 | + WelsThreadCreate (& (mThreadID[i]), (LPWELS_THREAD_ROUTINE)OneCallingFunc, NULL, 0); | |
| 106 | + WelsSleep (1); | |
| 107 | + WelsThreadJoin (mThreadID[i]); | |
| 108 | + } | |
| 109 | + | |
| 110 | + for (i = 0; i < iCallingNum; i++) { | |
| 111 | + WelsThreadJoin (mThreadID[i]); | |
| 112 | + } | |
| 113 | + | |
| 114 | + for (i = iCallingNum * 2; i < iCallingNum * 3; i++) { | |
| 115 | + WelsThreadCreate (& (mThreadID[i]), (LPWELS_THREAD_ROUTINE)OneCallingFunc, NULL, 0); | |
| 116 | + WelsSleep (1); | |
| 117 | + WelsThreadJoin (mThreadID[i]); | |
| 118 | + } | |
| 119 | + | |
| 120 | + EXPECT_FALSE (CWelsThreadPool::IsReferenced()); | |
| 61 | 121 | } |
| 62 | 122 | |