Horizon Official Technical Documentation
ThreadSafeQueueTest.cpp File Reference
#include "Core/Multithreading/ThreadSafeQueue.hpp"
#include <boost/test/unit_test.hpp>
#include <cstring>
#include <thread>
#include <atomic>
+ Include dependency graph for ThreadSafeQueueTest.cpp:

Macros

#define BOOST_TEST_MODULE   "ThreadSafeQueueTest"
 
#define MAX_PUSHES   1000000
 

Functions

 BOOST_AUTO_TEST_CASE (ThreadSafeQueueTest)
 

Macro Definition Documentation

◆ BOOST_TEST_MODULE

#define BOOST_TEST_MODULE   "ThreadSafeQueueTest"

◆ MAX_PUSHES

#define MAX_PUSHES   1000000

Function Documentation

◆ BOOST_AUTO_TEST_CASE()

BOOST_AUTO_TEST_CASE ( ThreadSafeQueueTest  )
42{
44 std::thread *t[4];
45 std::atomic<bool> go;
46
47 for (int i = 0; i < MAX_PUSHES; i++)
48 queue.push(std::move(i));
49
50 BOOST_CHECK_EQUAL(queue.size(), MAX_PUSHES);
51
52 t[0] = new std::thread([&queue, &go]() {
53 while (!go);
54 for (int i = 0; i < MAX_PUSHES; i++)
55 queue.push(std::move(i));
56 });
57
58 t[1] = new std::thread([&queue, &go]() {
59 while (!go);
60 for (int i = 0; i < MAX_PUSHES; i++)
61 queue.push(std::move(i));
62 });
63
64 t[2] = new std::thread([&queue, &go]() {
65 while (!go);
66 for (int i = 0; i < MAX_PUSHES; i++)
67 queue.try_pop();
68 });
69
70 t[3] = new std::thread([&queue, &go]() {
71 while (!go);
72 for (int i = 0; i < MAX_PUSHES; i++)
73 queue.try_pop();
74 });
75
76 go.exchange(true);
77
78 t[0]->join();
79 t[1]->join();
80 t[2]->join();
81 t[3]->join();
82
83 delete t[0];
84 delete t[1];
85 delete t[2];
86 delete t[3];
87
88 BOOST_CHECK_EQUAL(queue.size(), MAX_PUSHES);
89}
std::atomic< bool > go
Definition: LockedLookupTableTest.cpp:49
#define MAX_PUSHES
Definition: ThreadSafeQueueTest.cpp:39
Definition: ThreadSafeQueue.hpp:37
std::size_t size()
Definition: ThreadSafeQueue.hpp:102
void push(T &&new_value)
Definition: ThreadSafeQueue.hpp:90
std::shared_ptr< T > try_pop()
Definition: ThreadSafeQueue.hpp:84

References go, MAX_PUSHES, ThreadSafeQueue< T >::push(), ThreadSafeQueue< T >::size(), and ThreadSafeQueue< T >::try_pop().

+ Here is the call graph for this function: