GCC Code Coverage Report


Directory: src/gate/
File: src/gate/encode/tests/gateencode_cpp_test/test_hashes.cpp
Date: 2025-12-12 23:40:09
Exec Total Coverage
Lines: 95 95 100.0%
Functions: 22 22 100.0%
Branches: 114 276 41.3%

Line Branch Exec Source
1 #include "gate/tests.hpp"
2 #include "gate/encode/crchash.hpp"
3 #include "gate/encode/md5hash.hpp"
4 #include "gate/encode/sha1hash.hpp"
5 #include "gate/encode/sha256hash.hpp"
6 #include "gate/streams.hpp"
7
8 using namespace gate;
9 using namespace gate::enc;
10
11 static StaticString const content = "There are two types of people in the world: those with a gun, and those who dig.";
12
13 18 template<class T> void test_hash(T& h, String const& text)
14 {
15 // create hash from string
16
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 h.reset();
17
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 h.update(text);
18
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
36 String hash1 = h.computeResult();
19
20 // create hash from stream
21
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 h.reset();
22
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
36 StringStream ss(text);
23
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 h.update(ss);
24
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
36 String hash2 = h.computeResult();
25
26 // create hash from byte buffer
27
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 h.reset();
28 18 gate::size_t mid_pos = text.length() / 2;
29
1/2
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
18 h.update(text.c_str(), mid_pos);
30
1/2
✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
18 h.update(text.c_str() + mid_pos, text.length() - mid_pos);
31
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
36 String hash3 = h.computeResult();
32
33 // all hashes must be equal:
34
4/12
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
18 GATEXX_TEST_CHECK_EQUAL(hash1, hash2);
35
4/12
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
18 GATEXX_TEST_CHECK_EQUAL(hash1, hash3);
36 18 }
37
38 8 template<class T> void test_hash_static(String const& text)
39 {
40
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
16 String hash1 = T::compute(text);
41
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
16 StringStream ss(text);
42
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
16 String hash2 = T::compute(ss);
43
1/2
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
16 String hash3 = T::compute(text.c_str(), text.length());
44
45 // all hashes must be equal:
46
4/12
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
8 GATEXX_TEST_CHECK_EQUAL(hash1, hash2);
47
4/12
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
8 GATEXX_TEST_CHECK_EQUAL(hash1, hash3);
48 8 }
49
50 5 static void test_hash_builder(IHashBuilder& builder)
51 {
52 10 String h1, h2, h3, h4;
53 {
54
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder.reset();
55
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder << content;
56
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder >> h1;
57 }
58 {
59
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
10 StringStream ss(content);
60
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder.reset();
61
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder << ss;
62
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder >> h2;
63 }
64 {
65
1/2
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
10 Array<char> arr(content.c_str(), content.length());
66
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder.reset();
67
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder << arr;
68
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 Blob blob;
69
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder >> blob;
70
1/2
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
5 h3 = String(static_cast<char const*>(blob.data()), blob.length());
71 }
72 {
73
1/2
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
10 Blob blob(content.c_str(), content.length());
74
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder.reset();
75
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder << blob;
76
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 StringStream ss;
77
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 builder >> ss;
78
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 h4 = ss.toString();
79 }
80
4/12
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 5 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 5 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
5 GATEXX_TEST_CHECK_EQUAL(h1, h2);
81
4/12
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 5 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 5 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
5 GATEXX_TEST_CHECK_EQUAL(h1, h3);
82
4/12
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 5 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 5 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
5 GATEXX_TEST_CHECK_EQUAL(h1, h4);
83 5 }
84
85
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(Crc)
86 {
87 {
88
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Crc16Hash h(Crc16Hash::Crc16_MODBUS);
89
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
90
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_static<Crc16Hash>(content);
91 }
92 {
93
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Crc16Hash h(Crc16Hash::Crc16_ARC);
94
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
95 }
96 {
97
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Crc16Hash h(Crc16Hash::Crc16_CCITT_FALSE);
98
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
99 }
100 {
101
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Crc16Hash h(Crc16Hash::Crc16_KERMIT);
102
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
103 }
104 {
105
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Crc16Hash h(Crc16Hash::Crc16_XMODEM);
106
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
107 }
108
109 {
110
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Crc32Hash h;
111
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
112 }
113
114 {
115
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 StringStream ss(content);
116
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 String const h1 = Crc32Hash::compute(content);
117
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 String const h2 = Crc32Hash::compute(ss);
118
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
4 String const h3 = Crc32Hash::compute(static_cast<void const*>(content.c_str()), content.length());
119
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_EQUAL(h1, h2);
120
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_EQUAL(h1, h3);
121 }
122
123 {
124
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Crc32HashBuilder builder;
125
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_builder(builder);
126 }
127
128 {
129
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Crc16HashBuilder builder;
130
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_builder(builder);
131 }
132 2 }
133
134
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(MD5)
135 {
136
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Md5Hash h;
137
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
138
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_static<Md5Hash>(content);
139
140
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Md5HashBuilder builder;
141
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_builder(builder);
142 2 }
143
144
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(SHA1)
145 {
146
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Sha1Hash h;
147
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
148
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_static<Sha1Hash>(content);
149
150
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Sha1HashBuilder builder;
151
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_builder(builder);
152 2 }
153
154
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(SHA256)
155 {
156
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Sha256Hash h;
157
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash(h, content);
158
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_static<Sha256Hash>(content);
159
160
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Sha256HashBuilder builder;
161
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_hash_builder(builder);
162 2 }
163