Skip to content

Commit 77b9d47

Browse files
Tests now passing, need enhancements for stopping, etc
1 parent 55f822e commit 77b9d47

2 files changed

Lines changed: 24 additions & 16 deletions

File tree

‎test/CMakeLists.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ CPMAddPackage ( NAME circular_buffer
2323

2424
set ( CMAKE_THREAD_PREFER_PTHREAD TRUE )
2525
set ( THREADS_PREFER_PTHREAD_FLAG TRUE )
26-
find_package(Threads REQUIRED)
26+
find_package ( Threads REQUIRED )
2727

2828
# link dependencies
2929
target_link_libraries ( wait_queue_test PRIVATE

‎test/wait_queue_test.cpp‎

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <thread>
2424
#include <future> // std::async
2525
#include <mutex>
26+
#include <stop_token>
2627

2728
#include "catch2/catch_test_macros.hpp"
2829
#include "catch2/catch_template_test_macros.hpp"
@@ -35,7 +36,7 @@
3536

3637
using namespace std::literals::string_literals;
3738

38-
constexpr int N = 400;
39+
constexpr int N = 40;
3940

4041
// WQ creation function with non-used pointer for overloading
4142
template <typename T>
@@ -89,9 +90,14 @@ void non_threaded_arithmetic_test(Q& wq, int count) {
8990
REQUIRE(wq.push(base_val));
9091
}
9192
val_type sum { 0 };
92-
wq.apply( [&sum] (const val_type& i) { sum += i; } );
93+
wq.apply( [&sum] (const val_type& x) { sum += x; } );
9394
REQUIRE (sum == expected_sum);
9495

96+
for (int i {0}; i < count; ++i) {
97+
REQUIRE(*(wq.try_pop()) == base_val);
98+
}
99+
REQUIRE (wq.empty());
100+
95101
for (int i {0}; i < count; ++i) {
96102
wq.push(base_val+i);
97103
}
@@ -110,7 +116,7 @@ template <typename T>
110116
using test_set = std::set<set_elem<T> >;
111117

112118
template <typename T, typename Q>
113-
void read_func (Q& wq, test_set<T>& s, std::mutex& mut) {
119+
void read_func (std::stop_token stop_tok, Q& wq, test_set<T>& s, std::mutex& mut) {
114120
while (true) {
115121
std::optional<set_elem<T> > opt_elem = wq.wait_and_pop();
116122
if (!opt_elem) { // empty element means request stop has been called
@@ -122,7 +128,7 @@ void read_func (Q& wq, test_set<T>& s, std::mutex& mut) {
122128
}
123129

124130
template <typename T, typename Q>
125-
void write_func (Q& wq, int start, int slice, const T& val) {
131+
void write_func (std::stop_token stop_tok, Q& wq, int start, int slice, const T& val) {
126132
for (int i {0}; i < slice; ++i) {
127133
if (!wq.push(set_elem<T>{(start+i), val})) {
128134
// FAIL("wait queue push failed in write_func");
@@ -169,14 +175,13 @@ bool threaded_test(Q& wq, int num_readers, int num_writers, int slice, const T&
169175
REQUIRE (wq.empty());
170176
REQUIRE (wq.stop_requested());
171177
// check set to make sure all entries are present
172-
REQUIRE (s.size() == tot);
173178
int idx {0};
174179
for (const auto& e : s) {
175180
REQUIRE (e.first == idx);
176181
REQUIRE (e.second == val);
177182
++idx;
178183
}
179-
return true;
184+
return (s.size() == tot);
180185
}
181186

182187
// non threaded test, multiple container types, multiple element types
@@ -408,22 +413,25 @@ SCENARIO ( "Threaded wait queue, deque int",
408413

409414
chops::wait_queue<set_elem<int> > wq;
410415

411-
// Parameters are 1 reader, 1 writer thread, 100 slice
412-
// threads will be created and joined
413-
REQUIRE ( threaded_test(wq, 1, 1, 100, 44) );
416+
SECTION ( "1 reader, 1 writer thread, 100 slice" ) {
417+
REQUIRE ( threaded_test(wq, 1, 1, 100, 44) );
418+
}
414419

415-
// Parameters are 5 reader, 3 writer threads, 1000 slice
416-
REQUIRE ( threaded_test(wq, 5, 3, 1000, 1212) );
417-
// Parameters are 60 reader, 40 writer threads, 5000 slice
418-
REQUIRE ( threaded_test(wq, 60, 40, 5000, 5656) );
420+
SECTION ( "5 reader, 3 writer threads, 1000 slice" ) {
421+
REQUIRE ( threaded_test(wq, 5, 3, 1000, 1212) );
422+
}
423+
SECTION ( "60 reader, 40 writer threads, 5000 slice" ) {
424+
REQUIRE ( threaded_test(wq, 60, 40, 5000, 5656) );
425+
}
419426
}
420427

421428
SCENARIO ( "Threaded wait queue, deque string",
422429
"[wait_queue] [threaded] [string] [deque]" ) {
423430

424431
chops::wait_queue<set_elem<std::string> > wq;
425432

426-
// Parameters are 60 reader, 40 writer threads, 12000 slice
427-
REQUIRE ( threaded_test(wq, 60, 40, 12000, "cool, lit, sup"s) );
433+
SECTION ( "60 reader, 40 writer threads, 12000 slice" ) {
434+
REQUIRE ( threaded_test(wq, 60, 40, 12000, "cool, lit, sup"s) );
435+
}
428436
}
429437

0 commit comments

Comments
 (0)