SpiecsEngine
 
Loading...
Searching...
No Matches
ThreadPoolCached_test.h
Go to the documentation of this file.
1/**
2* @file ThreadPoolCached_test.h.
3* @brief The ThreadPoolCached_test Definitions.
4* @author Spices.
5*/
6
7#pragma once
8#include <gmock/gmock.h>
9#include <Core/Thread/ThreadPoolBasic.h>
10#include "Instrumentor.h"
11
12namespace SpicesTest {
13
14 /**
15 * @brief The interface is inherited from testing::Test.
16 * Registry on Initialize.
17 */
19 {
20 protected:
21
22 /**
23 * @brief The interface is inherited from testing::Test.
24 * Registry on Initialize.
25 */
26 void SetUp() override {
27 m_ThreadPool.SetMode(Spices::PoolMode::MODE_CACHED);
28 m_ThreadPool.SetThreadIdleTimeOut(10);
29 m_ThreadPool.Start(nThreads);
30 }
31
33 m_ThreadPool.Wait();
34 }
35
36 /**
37 * @brief ThreadPool.
38 */
39 Spices::ThreadPool m_ThreadPool;
40
41 /**
42 * @brief Number of Threads in ThreadPool.
43 */
44 const int nThreads = 4;
45 };
46
47 /**
48 * @brief Testing if initialize successfully.
49 */
51
53
54 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
55 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
56 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
57 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
58 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
59 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
60 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
61 }
62
63 /**
64 * @brief Testing if submit one pool task successfully.
65 */
67
69
70 auto func = [](int sec) -> bool
71 {
72 std::this_thread::sleep_for(std::chrono::seconds(sec));
73 return true;
74 };
75
76 std::future<bool> future = m_ThreadPool.SubmitPoolTask(std::bind(func, 2));
77
78 func(1); /* @brief Wait for task execute. */
79
80 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
81 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads - 1 );
82 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
83 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
84 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
85 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
86 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
87
88 future.get(); /* @brief Wait for sub thread finish. */
89
90 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
91 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
92 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
93 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
94 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
95 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
96 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
97 }
98
99 /**
100 * @brief Testing if submit nThreads pool task successfully.
101 */
103
105
106 auto func = [](int sec) -> bool
107 {
108 std::this_thread::sleep_for(std::chrono::seconds(sec));
109 return true;
110 };
111
112 std::vector<std::future<bool>> futures(nThreads);
113 for (int i = 0; i < nThreads; i++)
114 {
115 futures[i] = m_ThreadPool.SubmitPoolTask(std::bind(func, 2));
116 }
117
118 func(1); /* @brief Wait for task execute. */
119
120 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
121 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,0 );
122 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
123 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
124 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
125 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
126 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
127
128 /* @brief Wait for sub thread finish. */
129 for (int i = 0; i < nThreads; i++)
130 {
131 futures[i].get();
132 }
133
134 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
135 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
136 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
137 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
138 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
139 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
140 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
141 }
142
143 /**
144 * @brief Testing if submit 2 nThreads pool task successfully.
145 */
147
149
150 auto func = [](int sec) -> bool
151 {
152 std::this_thread::sleep_for(std::chrono::seconds(sec));
153 return true;
154 };
155
156 std::vector<std::future<bool>> futures(2 * nThreads);
157 for (int i = 0; i < 2 * nThreads; i++)
158 {
159 futures[i] = m_ThreadPool.SubmitPoolTask(std::bind(func, 2));
160 }
161
162 func(1); /* @brief Wait for task execute. */
163
164 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
165 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,0 );
166 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
167 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
168 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,2 * nThreads );
169 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
170 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
171
172 /* @brief Wait for part tasks finish. */
173 for (int i = 0; i < 2 * nThreads; i++)
174 {
175 futures[i].get();
176 }
177
178 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
179 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,2 * nThreads );
180 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
181 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
182 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,2 * nThreads );
183 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
184 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
185
186 /* @brief Wait for threads recovery finish. */
187 func(25);
188
189 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
190 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
191 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
192 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
193 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
194 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
195 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
196 }
197
198 /**
199 * @brief Testing if submit very much pool task successfully.
200 */
202
204
205 auto func = [](int sec) -> bool
206 {
207 std::this_thread::sleep_for(std::chrono::microseconds(sec));
208 return true;
209 };
210
211 std::vector<std::future<bool>> futures(10000);
212 for (int i = 0; i < 10000; i++)
213 {
214 futures[i] = m_ThreadPool.SubmitPoolTask(std::bind(func, 1));
215 }
216
217 func(2000); /* @brief Wait for part tasks finish. */
218
219 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,Spices::THREAD_MAX_THRESHHOLD);
220
221 /* @brief Wait for all tasks finish. */
222 for (int i = 0; i < 10000; i++)
223 {
224 futures[i].get();
225 }
226
227 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
228 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,Spices::THREAD_MAX_THRESHHOLD);
229 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
230 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
231 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,Spices::THREAD_MAX_THRESHHOLD);
232 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
233 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
234
235 /* @brief Wait for all threads recovery. */
236 auto inTime = std::chrono::high_resolution_clock::now();
237 while (m_ThreadPool.GetThreadsCount() != nThreads)
238 {
239 func(1000);
240 }
241 auto outTime = std::chrono::high_resolution_clock::now();
242
243 std::cout << "Cache Mode recovery threads cost: " << std::chrono::duration_cast<std::chrono::milliseconds>(outTime - inTime).count() << std::endl;
244
245 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
246 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
247 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
248 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
249 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
250 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
251 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
252 }
253
254 /**
255 * @brief Testing if submit one thread task successfully.
256 */
258
260
261 auto func = []() -> void
262 {
263 std::this_thread::sleep_for(std::chrono::seconds(2));
264 };
265
266 m_ThreadPool.SubmitThreadTask_LightWeight(0, func);
267
268 /* @brief Wait for all tasks finish. */
269 m_ThreadPool.Wait();
270
271 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
272 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
273 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
274 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
275 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
276 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
277 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
278
279 for (auto& pair : m_ThreadPool.GetThreads())
280 {
281 EXPECT_EQ(pair.second->GetThreadTasksCount(), 0);
282 }
283 }
284
285 /**
286 * @brief Testing if submit thread task for each successfully.
287 */
289
291
292 auto func = []() -> void
293 {
294 std::this_thread::sleep_for(std::chrono::seconds(2));
295 };
296
297 m_ThreadPool.SubmitThreadTask_LightWeight_ForEach(func);
298
299 /* @brief Wait for all tasks finish. */
300 m_ThreadPool.Wait();
301
302 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
303 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
304 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
305 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
306 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
307 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
308 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
309
310 for (auto& pair : m_ThreadPool.GetThreads())
311 {
312 EXPECT_EQ(pair.second->GetThreadTasksCount(), 0);
313 }
314 }
315
316 /**
317 * @brief Testing if submit thread task for each twice successfully.
318 */
320
322
323 auto func = []() -> void
324 {
325 std::this_thread::sleep_for(std::chrono::seconds(1));
326 };
327
328 m_ThreadPool.SubmitThreadTask_LightWeight_ForEach(func);
329 m_ThreadPool.SubmitThreadTask_LightWeight_ForEach(func);
330
331 /* @brief Wait for all tasks finish. */
332 m_ThreadPool.Wait();
333
334 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
335 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
336 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
337 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
338 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
339 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
340 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
341
342 for (auto& pair : m_ThreadPool.GetThreads())
343 {
344 EXPECT_EQ(pair.second->GetThreadTasksCount(), 0);
345 }
346 }
347
348 /**
349 * @brief Testing if submit very much thread task successfully.
350 */
352
354
355 auto func = []() -> void
356 {
357 std::this_thread::sleep_for(std::chrono::microseconds(1));
358 };
359
360 for (int i = 0; i < 2000; i++)
361 {
362 m_ThreadPool.SubmitThreadTask_LightWeight_ForEach(func);
363 }
364
365 /* @brief Wait for all tasks finish. */
366 m_ThreadPool.Wait();
367
368 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
369 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
370 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
371 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
372 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
373 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
374 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
375
376 for (auto& pair : m_ThreadPool.GetThreads())
377 {
378 EXPECT_EQ(pair.second->GetThreadTasksCount(), 0);
379 }
380 }
381
382 /**
383 * @brief Testing if submit very much mixed task successfully.
384 */
386
388
389 auto func = []() -> void
390 {
391 std::this_thread::sleep_for(std::chrono::microseconds(1));
392 };
393 auto func1 = [](int sec) -> void
394 {
395 std::this_thread::sleep_for(std::chrono::microseconds(sec));
396 };
397
398 for (int i = 0; i < 5000; i++)
399 {
400 m_ThreadPool.SubmitPoolTask(func);
401 }
402
403 for (int i = 0; i < 1000; i++)
404 {
405 m_ThreadPool.SubmitThreadTask_LightWeight_ForEach(func);
406 }
407
408 /* @brief Wait for all tasks finish. */
409 m_ThreadPool.Wait();
410
411 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
412 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,Spices::THREAD_MAX_THRESHHOLD);
413 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
414 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
415 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,Spices::THREAD_MAX_THRESHHOLD);
416 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
417 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
418
419 for (auto& pair : m_ThreadPool.GetThreads())
420 {
421 EXPECT_EQ(pair.second->GetThreadTasksCount(), 0);
422 }
423
424 /* @brief Wait for all threads recovery. */
425 while (m_ThreadPool.GetThreadsCount() != nThreads)
426 {
427 func1(1000);
428 }
429
430 EXPECT_EQ(m_ThreadPool.GetInitThreadSize() ,nThreads );
431 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize() ,nThreads );
432 EXPECT_EQ(m_ThreadPool.GetPoolMode() ,Spices::PoolMode::MODE_CACHED);
433 EXPECT_EQ(m_ThreadPool.GetTasks() ,0 );
434 EXPECT_EQ(m_ThreadPool.GetThreadsCount() ,nThreads );
435 EXPECT_EQ(m_ThreadPool.GetThreadIdleTimeOut(),10 );
436 EXPECT_EQ(m_ThreadPool.IsPoolRunning() ,true );
437 }
438
439 /**
440 * @brief Testing Continue/Suspend API.
441 */
443
445
446 m_ThreadPool.Suspend();
447
448 std::atomic_int executeCount;
449
450 {
451 SPICESTEST_PROFILE_SCOPE("Quick Task");
452
453 for (int i = 0; i < 10; i++)
454 {
455 m_ThreadPool.SubmitPoolTask([&]() {
456 ++executeCount;
457 });
458 }
459
460 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), 10);
461 EXPECT_EQ(m_ThreadPool.GetTasks(), 10);
462
463 m_ThreadPool.Continue();
464
465 m_ThreadPool.Wait();
466 m_ThreadPool.Suspend();
467
468 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), 10);
469 EXPECT_EQ(m_ThreadPool.GetTasks(), 0);
470 EXPECT_EQ(executeCount.load(), 10);
471 }
472
473 {
474 SPICESTEST_PROFILE_SCOPE("Slow Task");
475
476 for (int i = 0; i < 10; i++)
477 {
478 m_ThreadPool.SubmitPoolTask([&]() {
479 std::this_thread::sleep_for(std::chrono::seconds(2));
480 ++executeCount;
481 });
482 }
483
484 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), 10);
485 EXPECT_EQ(m_ThreadPool.GetTasks(), 10);
486
487 m_ThreadPool.Continue();
488 std::this_thread::sleep_for(std::chrono::seconds(1));
489 m_ThreadPool.Suspend();
490 std::this_thread::sleep_for(std::chrono::seconds(2));
491
492 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), 10);
493 EXPECT_EQ(m_ThreadPool.GetTasks(), 0);
494 EXPECT_EQ(executeCount.load(), 20);
495
496 m_ThreadPool.Continue();
497 m_ThreadPool.Wait();
498
499 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), 10);
500 EXPECT_EQ(m_ThreadPool.GetTasks(), 0);
501 EXPECT_EQ(executeCount.load(), 20);
502 }
503 }
504}
#define UPROPERTYS(...)
#define UCONSTRUCT(T, N)
#define UPROPERTY(N)
#define UFUNCTION(N)
#define UFUNCTION_T(T, N)
#define END_CLASS
#define UFUNCTIONS(...)
#define UDECONSTRUCT(T, N)
#define UPROPERTY_S(N)
#define UCLASS()
Definition ClassTraits.h:31
#define CLASS_SCOPE
#define DELEGATE_ONE_PARAM(name, p0)
Use this macro to instance a Delegate Class. One Parameter Specific.
#define DELEGATE_THREE_PARAM(name, p0, p1, p2)
Use this macro to instance a Delegate Class. Three Parameter Specific.
#define DELEGATE_SIX_PARAM(name, p0, p1, p2, p3, p4, p5)
Use this macro to instance a Delegate Class. Six Parameter Specific.
#define DELEGATE_FIVE_PARAM(name, p0, p1, p2, p3, p4)
Use this macro to instance a Delegate Class. Five Parameter Specific.
#define DELEGATE_NONE_PARAM(name)
Use this macro to instance a Delegate Class. None Parameter Specific.
#define DELEGATE_SEVEN_PARAM(name, p0, p1, p2, p3, p4, p5, p6)
Use this macro to instance a Delegate Class. Seven Parameter Specific.
#define DELEGATE_EIGHT_PARAM(name, p0, p1, p2, p3, p4, p5, p6, p7)
Use this macro to instance a Delegate Class. Eight Parameter Specific.
#define DELEGATE_TWO_PARAM(name, p0, p1)
Use this macro to instance a Delegate Class. Two Parameter Specific.
#define DELEGATE_FOUR_PARAM(name, p0, p1, p2, p3)
Use this macro to instance a Delegate Class. Four Parameter Specific.
#define DELEGATE_NINE_PARAM(name, p0, p1, p2, p3, p4, p5, p6, p7, p8)
Use this macro to instance a Delegate Class. Nine Parameter Specific.
#define SPICES_FUNC_SIG
#define SPICESTEST_PROFILE_SCOPE_LINE2(name, line)
#define SPICESTEST_PROFILE_SCOPE(name)
#define SPICES_PROFILE
#define SPICESTEST_PROFILE_END_SESSION()
#define SPICESTEST_PROFILE_BEGIN_SESSION(name, filepath)
#define SPICESTEST_PROFILE_SCOPE_LINE(name, line)
#define SPICESTEST_PROFILE_FUNCTION()
#define SPICES_PROFILE_ZONE
void Test0(int a, int b)
Basic Class Function.
void Test(float f)
Basic Override Class Function.
void Test()
Basic Override Class Function.
static void Test1()
Static Class Function.
Test Function Class.
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
void TearDown() override
Testing class TearDown function.
Instance Delegate Class.
bool b(int q, float w) const
static bool c(int q, float w)
const volatile std::string m_Name_b
FieldTraitsTest(const std::string &name)
static bool sf(int a, float b, void *c)
bool fc(int a, float b, void *c) const
auto GetFResult(T &&func, Args &&... args) -> decltype(func(std::forward< Args >(args)...))
InstrumentationTimer(const char *name)
std::chrono::time_point< std::chrono::steady_clock > m_StartTimepoint
Instrumentor(Instrumentor &&)=delete
static Instrumentor & Get()
void BeginSession(const std::string &name, const std::string &filepath="results.json")
void WriteProfile(const ProfileResult &result)
InstrumentationSession * m_CurrentSession
std::ofstream m_OutputStream
Instrumentor(const Instrumentor &)=delete
MemoryPoolTest2(const MemoryPoolTest2 &)=delete
MemoryPoolTest2 & operator=(const MemoryPoolTest2 &)=delete
static constexpr size_t y
std::array< std::array< int, x >, y > datas
static constexpr size_t x
MemoryPoolTest(const MemoryPoolTest &)=delete
MemoryPoolTest & operator=(const MemoryPoolTest &)=delete
std::tuple< int, float, void * > m_Tuple
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
static constexpr size_t n2
Iter counts 2.
void TearDown() override
The interface is inherited from testing::Test. Call before Destructor.
static constexpr size_t n
Iter counts.
The interface is inherited from testing::Test. Registry on Initialize.
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
std::unique_ptr< Spices::ObjectPool< Object > > m_ObjectPool
ObjectPool.
void TearDown() override
The interface is inherited from testing::Test. Call before Destructor.
static constexpr size_t n
ObjectPool objects number.
The interface is inherited from testing::Test. Registry on Initialize.
virtual ~Object()=default
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
Spices::PageCache pc
PageCache.
static constexpr size_t n
Test iter number.
void TearDown() override
The interface is inherited from testing::Test. Call before Destructor.
The interface is inherited from testing::Test. Registry on Initialize.
Declare Empty Class.
ThreadCacheTest & operator=(const ThreadCacheTest &)=delete
std::tuple< int, float, void * > m_Tuple
ThreadCacheTest(const ThreadCacheTest &)=delete
static constexpr size_t n
Iter counts.
void TearDown() override
The interface is inherited from testing::Test. Call before Destructor.
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
Spices::ThreadCache tc
ThreadCache.
The interface is inherited from testing::Test. Registry on Initialize.
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
Spices::ThreadPool m_ThreadPool
ThreadPool.
const int nThreads
Number of Threads in ThreadPool.
The interface is inherited from testing::Test. Registry on Initialize.
int nThreads
Number of Threads in ThreadPool.
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
Spices::ThreadPool m_ThreadPool
ThreadPool.
The interface is inherited from testing::Test. Registy on Initialize.
std::string Test(std::string str)
Basic Override Class Function.
static bool Test1()
Static Class Function.
int Test0(int a, int b)
Basic Class Function.
bool Test()
Basic Override Class Function.
void Test(float f)
Basic Override Class Function.
void Test()
Basic Override Class Function.
void TearDown() override
Testing class TearDown function.
std::vector< scl::directed_acyclic_node > m_Nodes
void SetUp() override
Testing class initialize function.
The interface is inherited from testing::Test. Registy on Initialize.
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
void TearDown() override
The interface is inherited from testing::Test. Call before Destructor.
The interface is inherited from testing::Test. Registry on Initialize.
scl::kd_tree< 2 > m_KDTree
Create a KDTree with 2 dimensions.
Definition KDTree_test.h:57
void TearDown() override
Testing class TearDown function.
Definition KDTree_test.h:52
void SetUp() override
Testing class initialize function.
Definition KDTree_test.h:27
The interface is inherited from testing::Test. Registry on Initialize.
Definition KDTree_test.h:21
scl::linked_unordered_map< int, std::string > c1
scl::linked_unordered_map< float, std::string > c2
scl::linked_unordered_map< std::string, std::string > c0
void SetUp() override
Testing class initialize function.
void TearDown() override
Testing class TearDown function.
The interface is inherited from testing::Test. Registry on Initialize.
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
void TearDown() override
Testing class TearDown function.
Unit Test for RuntimeMemoryBlock.
void TearDown() override
The interface is inherited from testing::Test. Call before Destructor.
void SetUp() override
The interface is inherited from testing::Test. Registry on Initialize.
The interface is inherited from testing::Test. Registry on Initialize.
static std::string GetClassString(ClassType t)
Get Class Name as string.
Class Static Function Library.
virtual ~ClassTraitsTest()=default
bool f(int q, float w, void *c, bool(ClassTraitsTest::*)(int **, int &&))
std::reference_wrapper< const int > cir
bool f(int q, float w)
std::reference_wrapper< int * > ipr
std::reference_wrapper< const int * > cipr
std::reference_wrapper< const int const *const > cicpcr
bool fc(int q, float w) const
static bool fs(int q, float w)
auto mfc(F func, Args ...args) -> decltype(f(std::forward< Args >(args)...))
std::reference_wrapper< int > ir
static bool FileLibrary_Size(const FileHandle *handle, uint64_t *out_size)
Calculate The file size.
static bool FileLibrary_Read(const FileHandle *handle, uint64_t data_size, void *out_data, uint64_t *out_bytes_read)
Read Specific size of data form the current file handle pointer, and move pointer the same size.
static bool FileLibrary_Write_Line(const FileHandle *handle, const char *text)
Write one line data to the file handle pointer.
static bool FileLibrary_Write(const FileHandle *handle, uint64_t data_size, const void *data, uint64_t *out_bytes_written)
Write given data to the file handle pointer.
static bool FileLibrary_Open(const char *path, FileModes mode, bool binary, FileHandle *out_handle)
Open the file using given string.
static void FileLibrary_Close(FileHandle *handle)
Close the file by the file handle.
static bool FileLibrary_Delete(const char *filePath)
Delete a file from disk.
static bool FileLibrary_CopyFile(std::string srcFilePath, std::string dstFilePath)
Copy a file to dst path.
static bool FileLibrary_Read_Line(const FileHandle *handle, uint64_t max_length, char *line_buf, uint64_t *out_line_length)
Read one line from the current file handle pointer, and move pointer the same size.
static bool FileLibrary_Exists(const char *path)
Determine whether the given string is existing a file.
static bool FileLibrary_Read_all_bytes(const FileHandle *handle, char *out_bytes, uint64_t *out_bytes_read)
Read all data form the current file handle pointer.
File Static Function Library.
Definition FileLibrary.h:49
static void Init()
Init Log.
Definition Log.cpp:24
static void ShutDown()
Shutdown Log.
Definition Log.cpp:82
static void Free(void *ptr)
Free memory entry point.
static void *& PointerSpace(void *obj)
Get object first 4/8 bytes as a pointer.
MemoryPool Class.
Definition MemoryPool.h:22
Page memory cache. Third level of memory allocator.
Definition PageCache.h:21
static bool CloseProcess(const char *processName)
Close a Process with command.
static bool OpenProcess(const char *processPath, const char *commandLine="")
Open a Process with command.
static float ProcessMemoryInUsed()
Get this Process Memory used( GB ).
Process Static Function Library.
static bool StringsEqual(const char *str0, const char *str1)
Determine if the strings given are equal. Platform Specific.
String Static Function Library.
Thread memory cache. First level of memory allocator.
Definition ThrealCache.h:19
static bool SetThreadName(const std::string &name)
Set Thread name.
Thread Static Function Library.
behave_state_list. wrapper of combing all state behaves.
bool Empty() const
Determine if this list is empty.
Definition FreeList.h:50
void Push(void *obj)
Recycle a object memory to this free list.
Definition FreeList.cpp:13
void *& Begin()
Get current pointer (no const & reference version).
Definition FreeList.h:94
void *& End()
Get end pointer (no const & reference version).
Definition FreeList.h:100
Free list for memory pool.
Definition FreeList.h:16
The kd_tree with K dimensions container Class. K the number of dimensions. Every node in the tree is ...
Definition KDTree.h:27
The container combines hashmap and list together. Used in the case that we want iter a hashmap in ord...
void build()
Malloc a memory to begin_.
void add_element(const std::string &name, const std::string &type)
Add a element to object_, means a memory block will be occupied with given param type.
runtime_memory_block()=default
Constructor Function.
void * get_addr() const
Get the begin_.
The container is wrapper of a continue memory block. Used in Material::BuildMaterial(),...
Bidirectional cyclic linked list for span.
Definition SpanList.h:73
span * m_Next
next span.
Definition SpanList.h:41
span * m_Prev
previous span.
Definition SpanList.h:46
Used for manage multiple page memory.
Definition SpanList.h:15
simple tree.
Definition Tree.h:18
This Class is similar to std::vector, the difference between that is this one allocates memory by mal...
Definition Vector.h:18
int main(int argc, char **argv)
The Entry of SpicesTest.
Definition main.cpp:76
static bool sf(int a, float b, void *c)
constexpr auto CleanupOutputString(const char(&expr)[N], const char(&remove)[K])
TEST_F(free_list_test, PushPop)
Testing scl::free_list::Push/Pop.
TEST_F(runtime_memory_block_test, Initialize)
Testing if initialize successfully.
TEST_F(directed_acyclic_graph_test, Addnode)
Testing if add node successfully.
TEST_F(ThreadPoolFixed_test, Initialize)
Testing if initialize successfully.
TEST_F(span_list_test, Initialize)
Testing scl::span_list::Initialize.
TEST_F(linked_unordered_map_test, Initialize)
Testing if initialize successfully.
TEST_F(kd_tree_test, Insert)
Testing if Insert successfully.
Definition KDTree_test.h:63
void DelegateTestT(Args ...args)
Template Function.
TEST_F(MemoryPool_test, PointerSpace)
Testing Spices::MemoryPool::PointerSpace.
TEST(tuple_test, IterTuple)
Testing std::tuple Helper Function.
Definition Tuple_test.h:17
RType ThreadPoolTestT(Args &&...args)
Template Function.
TEST_F(ObjectPool_test, Initialize)
Testing Spices::ObjectPool::Initialize.
TEST_F(Delegate_test, Bind)
Testing if bind successfully.
TEST_F(ThreadPoolCached_test, Initialize)
Testing if initialize successfully.
TEST_F(ThreadCache_test, AllocateDeallocate)
Testing Spices::ThreadCache::Allocate/Deallocate.
TEST_F(PageCache_test, NewSpan)
Testing Spices::PageCache::NewSpan.
constexpr bool is_pointer_v< _Ty *const volatile >
Definition IsPointer.h:27
Spices::ClassTraitsTest inst
constexpr bool is_pointer_v< _Ty *const >
Definition IsPointer.h:21
const int * ecip
constexpr bool is_const_v
value of is_const.
Definition IsConst.h:100
ClassItemType
class property/function type.
Definition ClassTraits.h:19
constexpr bool is_pointer_v< _Ty * >
Definition IsPointer.h:18
constexpr bool is_pointer_v< _Ty *volatile >
Definition IsPointer.h:24
FileModes
file mode
Definition FileLibrary.h:32
@ FILE_MODE_READ
model : read
Definition FileLibrary.h:37
@ FILE_MODE_WRITE
model : write
Definition FileLibrary.h:42
constexpr bool is_pointer_v
Declare of is_pointer.
Definition IsPointer.h:15
void IterTuple(Tuple &tuple, Function &&f)
Iter a tuple.
Definition Tuple.h:34
std::thread::id ThreadID
std::chrono::microseconds ElapsedTime
FloatingPointMicroseconds Start
static constexpr bool value
static constexpr bool value
void * handle
FILE* handle. Need cast while use.
Definition FileLibrary.h:21
bool is_valid
Is this handle Valid.
Definition FileLibrary.h:26
This Struct is FILE* handle pointer Wrapper.
Definition FileLibrary.h:15
bool operator==(const String2 &other) const
equal operation.
Definition Math.h:88
double string
Definition Math.h:63
bool operator==(const UInt2 &other) const
equal operation.
Definition Math.h:42
UInt2(const uint32_t &x, const uint32_t &y)
Constructor Function.
Definition Math.h:30
double unsigned int
Definition Math.h:17
constexpr bool is_variable() const
Definition FieldTraits.h:83
constexpr bool is_function() const
Definition FieldTraits.h:78
constexpr bool is_variable() const
Definition FieldTraits.h:48
constexpr bool is_member() const
Definition FieldTraits.h:33
constexpr bool is_function() const
Definition FieldTraits.h:43
constexpr bool is_const() const
Definition FieldTraits.h:38
constexpr size_t param_count() const
Definition FieldTraits.h:53
static constexpr bool value
Definition IsConst.h:52
is_const remove pointer from type.
Definition IsConst.h:51
is_const remove reference(both pointer) from type. For reference and pointer can be mixed together.
Definition IsConst.h:62
static constexpr bool value
Definition IsConst.h:31
static constexpr bool value
Definition IsConst.h:21
Declare of is_const.
Definition IsConst.h:20
Store Non Member Variable Type.
T pointer
Field pointer.
std::string_view name
Field Name.
size_t offset
Field offset.
constexpr field_traits(T &&p, std::string_view n, size_t offset=0)
Definition FieldTraits.h:96
Field Traits template.
Definition FieldTraits.h:95
Collection of Type and Class.
is_const process pointer or reference.
Definition IsConst.h:93
Container of store Types.
Definition TypeList.h:20