GCC Code Coverage Report


Directory: src/gate/
File: src/gate/io/tests/gateio_cpp_test/test_pipe.cpp
Date: 2026-02-03 22:06:38
Exec Total Coverage
Lines: 51 51 100.0%
Functions: 9 9 100.0%
Branches: 79 224 35.3%

Line Branch Exec Source
1 #include "gate/tests.hpp"
2 #include "gate/io/pipes.hpp"
3 #include "gate/threading.hpp"
4
5 using namespace gate;
6 using namespace gate::io;
7
8
2/7
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
6 GATEXX_TEST_UNIT(Pipe)
9 {
10 {
11 4 String pipeName;
12
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Pipe p(pipeName, Pipe::OpenMode_Create);
13
4/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
2 GATEXX_TEST_CHECK(!pipeName.empty());
14
5/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
2 GATEXX_TEST_CHECK(p.canRead());
15
5/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
2 GATEXX_TEST_CHECK(p.canWrite());
16
4/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
2 GATEXX_TEST_CHECK(p.c_impl() != NULL);
17
18
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Pipe p2(pipeName, Pipe::OpenMode_Read);
19
20
5/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
2 GATEXX_TEST_CHECK(p2.canRead());
21
5/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
2 GATEXX_TEST_CHECK(!p2.canWrite());
22
5/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
2 GATEXX_TEST_CHECK(p2.dataAvailable() == false);
23
24 4 String strRead;
25
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
2 GATEXX_TEST_CHECK_NOTHROW(strRead = p.exportRead());
26 4 String strWrite;
27
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
2 GATEXX_TEST_CHECK_NOTHROW(strWrite = p.exportWrite());
28
4/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
2 GATEXX_TEST_CHECK_NOTHROW(Pipe importer(&strRead, &strWrite));
29 }
30
31 {
32
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Pipe anon;
33 }
34 2 }
35
36 static char const pipe_test_content[] = "Hello";
37 static gate_size_t const pipe_test_content_len = 5;
38
39
40 1 static void write_data_to_pipe(Pipe* ptr)
41 {
42 1 gate::size_t pos = 0;
43
44
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 while (pos < pipe_test_content_len)
45 {
46 1 gate::size_t written = 0;
47
2/8
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
1 GATEXX_TEST_REQUIRE_NOTHROW(
48 written = ptr->write(&pipe_test_content[pos], pipe_test_content_len - pos)
49 );
50 1 pos += written;
51 }
52 1 }
53
54 1 static void read_data_from_pipe(Pipe* ptr)
55 {
56 char buffer[1024];
57 1 gate::size_t pos = 0;
58
59
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 while (pos < sizeof(buffer))
60 {
61 1 gate::size_t received = 0;
62
4/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
1 GATEXX_TEST_REQUIRE_NOTHROW(
63 received = ptr->read(&buffer[pos], sizeof(buffer) - pos)
64 );
65 1 pos += received;
66
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (pos >= pipe_test_content_len)
67 {
68 1 break;
69 }
70 }
71
4/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
1 GATEXX_TEST_CHECK(pos == pipe_test_content_len);
72
4/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
1 GATEXX_TEST_CHECK(0 == Mem::compare(buffer, pipe_test_content, pipe_test_content_len));
73 1 }
74
75 1 static void run_pipe_threads_test()
76 {
77 2 String pipeName;
78
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Pipe writer_pipe(pipeName, Pipe::OpenMode_Create);
79
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Pipe reader_pipe(pipeName, Pipe::OpenMode_Read);
80
81
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread reader_thread;
82
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread writer_thread;
83
84
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 reader_thread.startFunc(&read_data_from_pipe, &reader_pipe);
85
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 writer_thread.startFunc(&write_data_to_pipe, &writer_pipe);
86
87
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 reader_thread.join();
88
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 writer_thread.join();
89 1 }
90
91
2/7
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
6 GATEXX_TEST_UNIT(PipeThreads)
92 {
93
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 if (Thread::supportedModel() == Thread::Model_Native)
94 {
95 2 run_pipe_threads_test();
96 }
97 2 }
98