-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbitpack_test.cpp
More file actions
63 lines (55 loc) · 1.61 KB
/
bitpack_test.cpp
File metadata and controls
63 lines (55 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <random>
#include <vector>
#include "bitpack.h"
constexpr int NumValues = 1024;
constexpr int Padding = 64;
template <int NumDistinct>
void Compress(uint32_t num_values, const uint32_t *input, uint8_t *output)
{
auto compress_fn = BitpackCompress[NumDistinct];
const uint32_t *end = input + num_values;
while(input < end)
compress_fn(&input, &output);
}
template <int NumDistinct>
void Decompress(uint32_t num_values, const uint8_t *input, uint32_t *output)
{
auto decompress_fn = BitpackDecompress[NumDistinct];
const uint32_t *end = output + num_values;
while(output < end)
decompress_fn(&input, &output);
}
template <int NumDistinct>
void Test()
{
Test<NumDistinct - 1>();
std::random_device r;
std::default_random_engine e(r());
std::uniform_int_distribution<> dist(0, NumDistinct - 1);
std::vector<uint32_t> vals(NumValues + Padding);
std::vector<uint32_t> decompressed(NumValues + Padding);
for(auto &a : vals)
a = dist(e);
std::vector<uint8_t> compressed(NumValues * sizeof(uint32_t) + Padding);
Compress<NumDistinct>(NumValues, vals.data(), compressed.data());
Decompress<NumDistinct>(NumValues, compressed.data(), decompressed.data());
for(size_t i = 0; i < NumValues; i++)
{
if(vals[i] != decompressed[i])
{
printf("Bitpack Test %d failed at index %d (%d != %d)\n", NumDistinct, i, vals[i], decompressed[i]);
return;
}
}
printf("Bitpack Test %d succeeded!\n", NumDistinct);
}
template <>
void Test<1>()
{
return;
}
int main()
{
Test<256>();
return 0;
}