GCC Code Coverage Report


Directory: src/gate/
File: src/gate/io/tests/gateio_cpp_test/test_pipe.cpp
Date: 2026-08-06 22:46:24
Exec Total Coverage
Lines: 87 87 100.0%
Functions: 12 12 100.0%
Branches: 137 394 34.8%

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.
4 Pipe anon;
33
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 const Pipe copy(anon);
34
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 anon = copy;
35 }
36 2 }
37 static char const pipe_test_content[] = "Hello";
38 static gate_size_t const pipe_test_content_len = 5;
39
40
41 1 static void write_data_to_pipe(Pipe* ptr)
42 {
43 1 gate::size_t pos = 0;
44
45
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 while (pos < pipe_test_content_len)
46 {
47 1 gate::size_t written = 0;
48
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(
49 written = ptr->write(&pipe_test_content[pos], pipe_test_content_len - pos)
50 );
51 1 pos += written;
52 }
53 1 }
54
55 1 static void read_data_from_pipe(Pipe* ptr)
56 {
57 char buffer[256];
58 1 gate::size_t pos = 0;
59
60
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 while (pos < sizeof(buffer))
61 {
62 1 gate::size_t received = 0;
63
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(
64 received = ptr->read(&buffer[pos], sizeof(buffer) - pos)
65 );
66 1 pos += received;
67
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (pos >= pipe_test_content_len)
68 {
69 1 break;
70 }
71 }
72
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);
73
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));
74 1 }
75
76 1 static void run_pipe_threads_test()
77 {
78 2 String pipeName;
79
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Pipe writer_pipe(pipeName, Pipe::OpenMode_Create);
80
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Pipe reader_pipe(pipeName, Pipe::OpenMode_Read);
81
82
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread reader_thread;
83
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread writer_thread;
84
85
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(reader_thread.startFunc(&read_data_from_pipe, &reader_pipe));
86
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(writer_thread.startFunc(&write_data_to_pipe, &writer_pipe));
87
88
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 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
1 GATEXX_TEST_CHECK_NOTHROW(reader_thread.join());
89
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 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
1 GATEXX_TEST_CHECK_NOTHROW(writer_thread.join());
90 1 }
91
92
93 1 static void write_data_to_pipestream(Stream* ptr)
94 {
95 1 gate::size_t pos = 0;
96
97
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 while (pos < pipe_test_content_len)
98 {
99 1 gate::size_t written = 0;
100
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(
101 written = ptr->write(&pipe_test_content[pos], pipe_test_content_len - pos)
102 );
103 1 pos += written;
104 }
105 1 ptr->flush();
106 1 }
107
108 1 static void read_data_from_pipestream(Stream* ptr)
109 {
110 char buffer[256];
111 1 gate::size_t pos = 0;
112
113
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 while (pos < sizeof(buffer))
114 {
115 1 gate::size_t received = 0;
116
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(
117 received = ptr->read(&buffer[pos], sizeof(buffer) - pos)
118 );
119 1 pos += received;
120
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (pos >= pipe_test_content_len)
121 {
122 1 break;
123 }
124 }
125
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);
126
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));
127 1 }
128
129 1 static void run_pipestream_threads_test()
130 {
131 {
132 2 String pipeName;
133
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Stream pipeServer = Pipe::openStream(pipeName);
134
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Stream pipeClient = Pipe::openStream(pipeName, Pipe::OpenMode_Read);
135
136 {
137 2 Stream pipeServerCopy(pipeServer);
138
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 pipeServerCopy.getInterfaceName();
139 char buffer[32];
140
5/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 GATEXX_TEST_CHECK_THROW(pipeServerCopy.peek(buffer, sizeof(buffer)));
141 }
142
143
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread reader_thread;
144
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread writer_thread;
145
146
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(reader_thread.startFunc(&read_data_from_pipestream, &pipeClient));
147
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(writer_thread.startFunc(&write_data_to_pipestream, &pipeServer));
148
149
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(reader_thread.join());
150
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(writer_thread.join());
151 }
152
153 1 }
154
155
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)
156 {
157
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 if (ThisThread::supportedModel() == ThisThread::Model_Native)
158 {
159 2 run_pipe_threads_test();
160 2 run_pipestream_threads_test();
161 }
162 2 }
163
164