Skip to content

Commit f82217d

Browse files
test equivalence of packing and unpacking single values and blocks
1 parent eb3200e commit f82217d

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

theta/test/bit_packing_test.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,54 @@ TEST_CASE("pack unpack blocks") {
8080
}
8181
}
8282

83+
TEST_CASE("pack bits unpack blocks") {
84+
uint64_t value = 0xaa55aa55aa55aa55ULL; // arbitrary starting value
85+
for (int m = 0; m < 10000; ++m) {
86+
for (uint8_t bits = 1; bits <= 63; ++bits) {
87+
const uint64_t mask = (1ULL << bits) - 1;
88+
std::vector<uint64_t> input(8, 0);
89+
for (int i = 0; i < 8; ++i) {
90+
input[i] = value & mask;
91+
value += IGOLDEN64;
92+
}
93+
std::vector<uint8_t> bytes(bits, 0);
94+
uint8_t offset = 0;
95+
uint8_t* ptr = bytes.data();
96+
for (int i = 0; i < 8; ++i) {
97+
offset = pack_bits(input[i], bits, ptr, offset);
98+
}
99+
std::vector<uint64_t> output(8, 0);
100+
unpack_bits_block8(output.data(), bytes.data(), bits);
101+
for (int i = 0; i < 8; ++i) {
102+
REQUIRE(input[i] == output[i]);
103+
}
104+
}
105+
}
106+
}
107+
108+
TEST_CASE("pack blocks unpack bits") {
109+
uint64_t value = 0xaa55aa55aa55aa55ULL; // arbitrary starting value
110+
for (int m = 0; m < 10000; ++m) {
111+
for (uint8_t bits = 1; bits <= 63; ++bits) {
112+
const uint64_t mask = (1ULL << bits) - 1;
113+
std::vector<uint64_t> input(8, 0);
114+
for (int i = 0; i < 8; ++i) {
115+
input[i] = value & mask;
116+
value += IGOLDEN64;
117+
}
118+
std::vector<uint8_t> bytes(bits, 0);
119+
pack_bits_block8(input.data(), bytes.data(), bits);
120+
std::vector<uint64_t> output(8, 0);
121+
uint8_t offset = 0;
122+
const uint8_t* cptr = bytes.data();
123+
for (int i = 0; i < 8; ++i) {
124+
offset = unpack_bits(output[i], bits, cptr, offset);
125+
}
126+
for (int i = 0; i < 8; ++i) {
127+
REQUIRE(input[i] == output[i]);
128+
}
129+
}
130+
}
131+
}
132+
83133
} /* namespace datasketches */

0 commit comments

Comments
 (0)