GCC Code Coverage Report


Directory: src/gate/
File: src/gate/encode/tests/gateencode_cpp_test/test_compression.cpp
Date: 2025-09-14 13:10:38
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 char const content_text[] =
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 static String const content = String::createStaticFrom(content_text);
35
36 6 static void transcode_data_streams(Stream& instream, Stream& outstream)
37 {
38 char buffer[128];
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(Stream::transferViaBuffer(instream, outstream, buffer, sizeof(buffer)));
40
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());
41 6 }
42
43 template<class ENCODER, class DECODER>
44 6 void test_encoder_decoder()
45 {
46
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
12 StringStream plainData(content);
47
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
12 StringStream encodedData;
48
49
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(
50 Stream encoder = ENCODER::create(encodedData);
51 transcode_data_streams(plainData, encoder);
52 );
53
54
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
12 StringStream decodedData;
55
56
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(
57 Stream decoder = DECODER::create(encodedData);
58 transcode_data_streams(decoder, decodedData);
59 );
60
61
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
12 String decodedText = decodedData.toString();
62
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);
63
64 6 }
65
66 #if !defined(GATE_ENCODE_NO_ADVANCED_COMPRESSION) && defined(GATE_EXTLIB_BZIP2)
67
68
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)
69 {
70 2 test_encoder_decoder<Bzip2Encoder, Bzip2Decoder>();
71 2 }
72
73 #endif
74
75 #if !defined(GATE_ENCODE_NO_ADVANCED_COMPRESSION) && defined(GATE_EXTLIB_LZMA)
76
77 GATEXX_TEST_UNIT(Xz)
78 {
79 test_encoder_decoder<XzEncoder, XzDecoder>();
80 }
81
82 #endif
83
84
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)
85 {
86 2 test_encoder_decoder<ZlibEncoder, ZlibDecoder>();
87
88 2 test_encoder_decoder<GZipEncoder, GZipDecoder>();
89 2 }
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(Zip)
92 {
93
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MemFileStream zip_output;
94 {
95
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ZipWriter writer(zip_output);
96
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ZipEntry entry;
97
98
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");
99
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 entry.setSize(content.size());
100
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 entry.setAttributes(File::Attrib_File);
101
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 entry.setAccessBits(File::Access_AllRead | File::Access_AllWrite);
102
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());
103
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 writer.add(entry, content.c_str());
104
105
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");
106
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 writer.add(entry, content.c_str());
107
108
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 writer.flush();
109 }
110
111 {
112
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MemFileStream zip_input = zip_output.share();
113
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ZipReader reader(zip_input);
114
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ZipEntry entry = reader.getFirstEntry();
115
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");
116
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());
117
118
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const bool_t secondEntryFound = reader.getNextEntry(entry);
119
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);
120
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");
121
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());
122 }
123
124 {
125
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MemFileStream zip_input = zip_output.share();
126
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ZipReader reader(zip_input);
127
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");
128
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");
129
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());
130
131
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 StringStream extractedData;
132
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 reader.extractContent(extractedData);
133
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());
134 }
135
136 {
137
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MemFileStream zip_input = zip_output.share();
138
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ZipReader reader(zip_input);
139
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");
140
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");
141
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());
142
143
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 StringStream extractedData;
144
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 reader.extractContent(extractedData);
145
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());
146 }
147
148 2 }
149