GCC Code Coverage Report


Directory: src/gate/
File: src/gate/io/tests/gateio_cpp_test/test_pipe.cpp
Date: 2025-09-14 13:10:38
Exec Total Coverage
Lines: 44 44 100.0%
Functions: 9 9 100.0%
Branches: 62 168 36.9%

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 4 String pipeName;
11
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Pipe p(pipeName, Pipe::OpenMode_Create);
12
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());
13
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());
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.canWrite());
15
16
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Pipe p2(pipeName, Pipe::OpenMode_Read);
17
18
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());
19
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());
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.dataAvailable() == false);
21 2 }
22
23 static char const pipe_test_content[] = "Hello";
24 static gate_size_t const pipe_test_content_len = 5;
25
26
27 1 static void write_data_to_pipe(Pipe* ptr)
28 {
29 1 gate::size_t pos = 0;
30
31
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 while (pos < pipe_test_content_len)
32 {
33 1 gate::size_t written = 0;
34
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(
35 written = ptr->write(&pipe_test_content[pos], pipe_test_content_len - pos)
36 );
37 1 pos += written;
38 }
39 1 }
40
41 1 static void read_data_from_pipe(Pipe* ptr)
42 {
43 char buffer[1024];
44 1 gate::size_t pos = 0;
45
46
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 while (pos < sizeof(buffer))
47 {
48 1 gate::size_t received = 0;
49
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(
50 received = ptr->read(&buffer[pos], sizeof(buffer) - pos)
51 );
52 1 pos += received;
53
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if (pos >= pipe_test_content_len)
54 {
55 1 break;
56 }
57 }
58
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);
59
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));
60 1 }
61
62 1 static void run_pipe_threads_test()
63 {
64 2 String pipeName;
65
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Pipe writer_pipe(pipeName, Pipe::OpenMode_Create);
66
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Pipe reader_pipe(pipeName, Pipe::OpenMode_Read);
67
68
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread reader_thread;
69
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread writer_thread;
70
71
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 reader_thread.startFunc(&read_data_from_pipe, &reader_pipe);
72
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 writer_thread.startFunc(&write_data_to_pipe, &writer_pipe);
73
74
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 reader_thread.join();
75
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 writer_thread.join();
76 1 }
77
78
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)
79 {
80
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 if (Thread::supportedModel() == Thread::Model_Native)
81 {
82 2 run_pipe_threads_test();
83 }
84 2 }
85