File tree Expand file tree Collapse file tree 2 files changed +67
-0
lines changed Expand file tree Collapse file tree 2 files changed +67
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments