Skip to content

Commit c9d7942

Browse files
committed
add test for task queue and barrier
1 parent 4e5fac0 commit c9d7942

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

test/cpp-utility/task/BarrierTest.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include <catch2/catch.hpp>
2+
#include <cpp-utility/task/TaskQueue.hpp>
3+
#include <unistd.h>
4+
5+
using namespace utility::task;
6+
7+
TEST_CASE("Barrier") {
8+
std::atomic_int counter{0};
9+
TaskQueue queue(2);
10+
11+
queue.add_task([&counter](size_t) { counter += 10; });
12+
queue.add_task([&counter](size_t) {
13+
usleep(1000);
14+
if (counter == 10) {
15+
counter += 10;
16+
}
17+
});
18+
auto func = [&counter](size_t) { counter--; };
19+
20+
SECTION("with barrier [correct result]") {
21+
queue.add_barrier();
22+
queue.add_task(func);
23+
queue.add_task(func);
24+
queue.execute_tasks();
25+
REQUIRE(counter == 18);
26+
}
27+
SECTION("without barrier [incorrect result]") {
28+
queue.add_task(func);
29+
queue.add_task(func);
30+
queue.execute_tasks();
31+
REQUIRE(counter == 8);
32+
}
33+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <catch2/catch.hpp>
2+
#include <cpp-utility/task/TaskQueue.hpp>
3+
4+
using namespace utility::task;
5+
6+
int atomic_add(size_t n_threads, size_t n_tasks) {
7+
std::atomic_int counter{0};
8+
TaskQueue queue(n_threads);
9+
10+
auto f = [&counter](size_t) { counter++; };
11+
12+
for (size_t i = 0; i < n_tasks; i++) {
13+
queue.add_task(f);
14+
}
15+
queue.execute_tasks();
16+
17+
return counter;
18+
}
19+
20+
TEST_CASE("Task Queue") {
21+
SECTION("no threads") {
22+
REQUIRE(atomic_add(0, 0) == 0);
23+
REQUIRE(atomic_add(0, 1) == 0);
24+
}
25+
SECTION("one thread") {
26+
REQUIRE(atomic_add(1, 0) == 0);
27+
REQUIRE(atomic_add(1, 1) == 1);
28+
}
29+
SECTION("multiple threads") {
30+
REQUIRE(atomic_add(2, 2) == 2);
31+
REQUIRE(atomic_add(2, 8) == 8);
32+
REQUIRE(atomic_add(64, 16) == 16);
33+
}
34+
}

0 commit comments

Comments
 (0)