GCC Code Coverage Report


Directory: src/gate/
File: src/gate/encode/tests/gateencode_cpp_test/test_compression.cpp
Date: 2025-09-22 22:57:09
Exec Total Coverage
Lines: 59 59 100.0%
Functions: 13 13 100.0%
Branches: 121 323 37.5%

Line Branch Exec Source
1 #include "gate/tests.hpp"
2 #include "gate/encode/zlibstreams.hpp"
3 #include "gate/encode/zipstreams.hpp"
4
5 #if !defined(GATE_ENCODE_NO_ADVANCED_COMPRESSION)
6 #include "gate/encode/bzip2streams.hpp"
7 #include "gate/encode/xzstreams.hpp"
8 #endif
9
10 using namespace gate;
11 using namespace gate::enc;
12
13 static StaticString const content =
14 "What is Lorem Ipsum? "
15 "Lorem Ipsum is simply dummy text of the printing and typesetting industry. "
16 "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, "
17 "when an unknown printer took a galley of type and scrambled it to make a type "
18 "specimen book. It has survived not only five centuries, but also the leap into "
19 "electronic typesetting, remaining essentially unchanged. It was popularised "
20 "in the 1960s with the release of Letraset sheets containing Lorem Ipsum "
21 "passages, and more recently with desktop publishing software like "
22 "Aldus PageMaker including versions of Lorem Ipsum."
23 "Why do we use it? "
24 "It is a long established fact that a reader will be distracted by the "
25 "readable content of a page when looking at its layout. The point of using "
26 "Lorem Ipsum is that it has a more-or-less normal distribution of letters, "
27 "as opposed to using 'Content here, content here', making it look like readable "
28 "English. Many desktop publishing packages and web page editors now use "
29 "Lorem Ipsum as their default model text, and a search for 'lorem ipsum' "
30 "will uncover many web sites still in their infancy. Various versions have "
31 "evolved over the years, sometimes by accident, sometimes on purpose "
32 "(injected humour and the like)."
33 ;
34
35 6 static void transcode_data_streams(Stream& instream, Stream& outstream)
36 {
37 char buffer[128];
38
4/14
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 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.
6 GATEXX_TEST_CHECK_NOTHROW(Stream::transferViaBuffer(instream, outstream, buffer, sizeof(buffer)));
39
4/14
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 6 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.
6 GATEXX_TEST_CHECK_NOTHROW(outstream.flush());
40 6 }
41
42 template<class ENCODER, class DECODER>
43 6 void test_encoder_decoder()
44 {
45
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
12 StringStream plainData(content);
46
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
12 StringStream encodedData;
47
48
5/16
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
6 GATEXX_TEST_CHECK_NOTHROW(
49 Stream encoder = ENCODER::create(encodedData);
50 transcode_data_streams(plainData, encoder);
51 );
52
53
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
12 StringStream decodedData;
54
55
5/16
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 14 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
6 GATEXX_TEST_CHECK_NOTHROW(
56 Stream decoder = DECODER::create(encodedData);
57 transcode_data_streams(decoder, decodedData);
58 );
59
60
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
12 String decodedText = decodedData.toString();
61
4/12
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
6 GATEXX_TEST_CHECK_EQUAL(content, decodedText);
62
63 6 }
64
65 #if !defined(GATE_ENCODE_NO_ADVANCED_COMPRESSION) && defined(GATE_EXTLIB_BZIP2)
66
67
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(Bzip2)
68 {
69 2 test_encoder_decoder<Bzip2Encoder, Bzip2Decoder>();
70 2 }
71
72 #endif
73
74 #if !defined(GATE_ENCODE_NO_ADVANCED_COMPRESSION) && defined(GATE_EXTLIB_LZMA)
75
76 GATEXX_TEST_UNIT(Xz)
77 {
78 test_encoder_decoder<XzEncoder, XzDecoder>();
79 }
80
81 #endif
82
83
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(Zlib)
84 {
85 2 test_encoder_decoder<ZlibEncoder, ZlibDecoder>();
86
87 2 test_encoder_decoder<GZipEncoder, GZipDecoder>();
88 2 }
89
90
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(Zip)
91 {
92
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MemFileStream zip_output;
93 {
94
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ZipWriter writer(zip_output);
95
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ZipEntry entry;
96
97
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 entry.setPath("/test.txt");
98
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 entry.setSize(content.size());
99
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 entry.setAttributes(File::Attrib_File);
100
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 entry.setAccessBits(File::Access_AllRead | File::Access_AllWrite);
101
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 entry.setModifiedDate(Time::now());
102
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 writer.add(entry, content.c_str());
103
104
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 entry.setPath("/test2.txt");
105
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 writer.add(entry, content.c_str());
106
107
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 writer.flush();
108 }
109
110 {
111
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MemFileStream zip_input = zip_output.share();
112
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ZipReader reader(zip_input);
113
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ZipEntry entry = reader.getFirstEntry();
114
6/16
✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
2 GATEXX_TEST_CHECK_EQUAL(entry.getPath(), "/test.txt");
115
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 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
2 GATEXX_TEST_CHECK_EQUAL(entry.getSize(), content.size());
116
117
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const bool_t secondEntryFound = reader.getNextEntry(entry);
118
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.
2 GATEXX_TEST_CHECK(secondEntryFound);
119
6/16
✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
2 GATEXX_TEST_CHECK_EQUAL(entry.getPath(), "/test2.txt");
120
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 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
2 GATEXX_TEST_CHECK_EQUAL(entry.getSize(), content.size());
121 }
122
123 {
124
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MemFileStream zip_input = zip_output.share();
125
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ZipReader reader(zip_input);
126
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 ZipEntry entry = reader.findEntry("/test.txt");
127
6/16
✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
2 GATEXX_TEST_CHECK_EQUAL(entry.getPath(), "/test.txt");
128
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 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
2 GATEXX_TEST_CHECK_EQUAL(entry.getSize(), content.size());
129
130
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 StringStream extractedData;
131
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 reader.extractContent(extractedData);
132
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 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
2 GATEXX_TEST_CHECK_EQUAL(content, extractedData.toView());
133 }
134
135 {
136
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MemFileStream zip_input = zip_output.share();
137
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ZipReader reader(zip_input);
138
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 ZipEntry entry = reader.findEntry("/test2.txt");
139
6/16
✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
2 GATEXX_TEST_CHECK_EQUAL(entry.getPath(), "/test2.txt");
140
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 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
2 GATEXX_TEST_CHECK_EQUAL(entry.getSize(), content.size());
141
142
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 StringStream extractedData;
143
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 reader.extractContent(extractedData);
144
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 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
2 GATEXX_TEST_CHECK_EQUAL(content, extractedData.toView());
145 }
146
147 2 }
148