1#include <base/system.h>
2
3#include <engine/shared/huffman.h>
4
5#include <gtest/gtest.h>
6
7TEST(Huffman, CompressionShouldNotChangeData)
8{
9 CHuffman Huffman;
10 Huffman.Init();
11
12 unsigned char aInput[64];
13 unsigned char aCompressed[2048];
14
15 mem_zero(block: aInput, size: sizeof(aInput));
16 mem_zero(block: aCompressed, size: sizeof(aCompressed));
17
18 int Size = Huffman.Compress(pInput: aInput, InputSize: sizeof(aInput), pOutput: aCompressed, OutputSize: sizeof(aCompressed));
19
20 unsigned char aDecompressed[2048];
21 Huffman.Decompress(pInput: aCompressed, InputSize: sizeof(aCompressed), pOutput: aDecompressed, OutputSize: sizeof(aDecompressed));
22
23 int match = mem_comp(a: aInput, b: aDecompressed, size: Size);
24 EXPECT_EQ(match, 0);
25}
26
27TEST(Huffman, CompressionCompatible)
28{
29 CHuffman Huffman;
30 Huffman.Init();
31
32 unsigned char aInput[64];
33 unsigned char aCompressed[2048];
34
35 mem_zero(block: aInput, size: sizeof(aInput));
36 mem_zero(block: aCompressed, size: sizeof(aCompressed));
37
38 // compress 1-7 followed by a bunch of nullbytes
39 for(int i = 0; i < 8; i++)
40 aInput[i] = i;
41
42 int Size = Huffman.Compress(pInput: aInput, InputSize: sizeof(aInput), pOutput: aCompressed, OutputSize: sizeof(aCompressed));
43
44 unsigned char aExpected[] = {0x51, 0x58, 0x78, 0x76, 0x1B, 0xB7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xc5, 0x0D};
45
46 int match = mem_comp(a: aCompressed, b: aExpected, size: Size);
47 EXPECT_EQ(match, 0) << "The compression is not compatible with older/other implementations anymore";
48 EXPECT_EQ(Size, 15);
49}
50