Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
chunk_compression_test.cpp File Reference
#include "chunk_compression.hpp"
#include "gtest/gtest.h"
+ Include dependency graph for chunk_compression_test.cpp:

Go to the source code of this file.

Classes

class  ChunkCompressorTest
 

Functions

 TEST_F (ChunkCompressorTest, AllSameElements)
 
 TEST_F (ChunkCompressorTest, CompressionRatio)
 
 TEST_F (ChunkCompressorTest, DeltaEdgeCases)
 
 TEST_F (ChunkCompressorTest, DeltaEncoding)
 
 TEST_F (ChunkCompressorTest, DeltaRoundTrip)
 
 TEST_F (ChunkCompressorTest, EmptyCompression)
 
 TEST_F (ChunkCompressorTest, LargeNumbers)
 
 TEST_F (ChunkCompressorTest, MixedPatterns)
 
 TEST_F (ChunkCompressorTest, RunLengthEdgeCases)
 
 TEST_F (ChunkCompressorTest, RunLengthEncoding)
 
 TEST_F (ChunkCompressorTest, SingleElementCompression)
 

Function Documentation

◆ TEST_F() [1/11]

TEST_F ( ChunkCompressorTest  ,
AllSameElements   
)

Definition at line 53 of file chunk_compression_test.cpp.

53 {
54 auto rle = ChunkCompressor<int>::run_length_encode(same_data);
55 EXPECT_EQ(rle.size(), 1);
56}
static std::vector< std::pair< T, size_t > > run_length_encode(const std::vector< T > &chunk)
Run-length encode a chunk.

References chunk_compression::ChunkCompressor< T >::run_length_encode().

◆ TEST_F() [2/11]

TEST_F ( ChunkCompressorTest  ,
CompressionRatio   
)

Definition at line 146 of file chunk_compression_test.cpp.

146 {
147 // Create a highly compressible sequence
148 std::vector<int> compressible(100, 42);
149 auto rle = ChunkCompressor<int>::run_length_encode(compressible);
150 EXPECT_EQ(rle.size(), 1);
151 EXPECT_EQ(rle[0].second, 100);
152
153 // Create a sequence with poor compression
154 std::vector<int> incompressible;
155 for (int i = 0; i < 100; ++i) {
156 incompressible.push_back(i);
157 }
158 auto rle_incomp = ChunkCompressor<int>::run_length_encode(incompressible);
159 EXPECT_EQ(rle_incomp.size(), 100);
160}

References chunk_compression::ChunkCompressor< T >::run_length_encode().

◆ TEST_F() [3/11]

TEST_F ( ChunkCompressorTest  ,
DeltaEdgeCases   
)

Definition at line 75 of file chunk_compression_test.cpp.

75 {
76 // Test constant sequence
77 std::vector<int> constant(5, 7);
78 auto encoded_constant = ChunkCompressor<int>::delta_encode(constant);
79 EXPECT_EQ(encoded_constant[0], 7);
80 for (size_t i = 1; i < encoded_constant.size(); ++i) {
81 EXPECT_EQ(encoded_constant[i], 0);
82 }
83
84 // Test decreasing sequence
85 std::vector<int> decreasing = {10, 8, 6, 4, 2};
86 auto encoded_decreasing = ChunkCompressor<int>::delta_encode(decreasing);
87 EXPECT_EQ(encoded_decreasing[0], 10);
88 for (size_t i = 1; i < encoded_decreasing.size(); ++i) {
89 EXPECT_EQ(encoded_decreasing[i], -2);
90 }
91}
static std::vector< T > delta_encode(const std::vector< T > &chunk)
Delta encode a chunk.

References chunk_compression::ChunkCompressor< T >::delta_encode().

◆ TEST_F() [4/11]

TEST_F ( ChunkCompressorTest  ,
DeltaEncoding   
)

Definition at line 31 of file chunk_compression_test.cpp.

31 {
32 std::vector<int> data = {10, 12, 15, 19, 24};
33 auto encoded = ChunkCompressor<int>::delta_encode(data);
34 auto decoded = ChunkCompressor<int>::delta_decode(encoded);
35
36 EXPECT_EQ(encoded, (std::vector<int>{10, 2, 3, 4, 5}));
37 EXPECT_EQ(decoded, data);
38}
static std::vector< T > delta_decode(const std::vector< T > &chunk)
Delta decode a chunk.

References chunk_compression::ChunkCompressor< T >::delta_decode(), and chunk_compression::ChunkCompressor< T >::delta_encode().

◆ TEST_F() [5/11]

TEST_F ( ChunkCompressorTest  ,
DeltaRoundTrip   
)

Definition at line 93 of file chunk_compression_test.cpp.

93 {
94 // Test various sequences
95 std::vector<std::vector<int>> test_sequences = {
96 {1, 1, 1, 1}, // Constant
97 {1, 2, 3, 4, 5}, // Linear increasing
98 {5, 4, 3, 2, 1}, // Linear decreasing
99 {1, 3, 6, 10, 15}, // Quadratic
100 {-2, -1, 0, 1, 2} // Negative to positive
101 };
102
103 for (const auto& sequence : test_sequences) {
104 auto encoded = ChunkCompressor<int>::delta_encode(sequence);
105 auto decoded = ChunkCompressor<int>::delta_decode(encoded);
106 EXPECT_EQ(decoded, sequence) << "Failed for sequence starting with " << sequence[0];
107 }
108}

References chunk_compression::ChunkCompressor< T >::delta_decode(), and chunk_compression::ChunkCompressor< T >::delta_encode().

◆ TEST_F() [6/11]

TEST_F ( ChunkCompressorTest  ,
EmptyCompression   
)

Definition at line 40 of file chunk_compression_test.cpp.

40 {
41 EXPECT_TRUE(ChunkCompressor<int>::run_length_encode(empty_data).empty());
42 EXPECT_TRUE(ChunkCompressor<int>::delta_encode(empty_data).empty());
43}
Compression strategies for chunk data.

◆ TEST_F() [7/11]

TEST_F ( ChunkCompressorTest  ,
LargeNumbers   
)

Definition at line 110 of file chunk_compression_test.cpp.

110 {
111 std::vector<int> large_nums = {1000000, 1000001, 1000002, 1000003};
112
113 // Test RLE with large numbers
114 auto rle = ChunkCompressor<int>::run_length_encode(large_nums);
115 EXPECT_EQ(rle.size(), 4);
116 for (size_t i = 0; i < rle.size(); ++i) {
117 EXPECT_EQ(rle[i].first, 1000000 + i);
118 EXPECT_EQ(rle[i].second, 1);
119 }
120
121 // Test delta encoding with large numbers
122 auto delta = ChunkCompressor<int>::delta_encode(large_nums);
123 EXPECT_EQ(delta[0], 1000000);
124 for (size_t i = 1; i < delta.size(); ++i) {
125 EXPECT_EQ(delta[i], 1);
126 }
127}

References chunk_compression::ChunkCompressor< T >::delta_encode(), and chunk_compression::ChunkCompressor< T >::run_length_encode().

◆ TEST_F() [8/11]

TEST_F ( ChunkCompressorTest  ,
MixedPatterns   
)

Definition at line 129 of file chunk_compression_test.cpp.

129 {
130 std::vector<int> mixed = {1, 1, 1, 2, 3, 3, 4, 4, 4, 4};
131
132 // Test RLE with mixed patterns
134 EXPECT_EQ(rle.size(), 4);
135 EXPECT_EQ(rle[0], (std::pair<int, size_t>{1, 3}));
136 EXPECT_EQ(rle[1], (std::pair<int, size_t>{2, 1}));
137 EXPECT_EQ(rle[2], (std::pair<int, size_t>{3, 2}));
138 EXPECT_EQ(rle[3], (std::pair<int, size_t>{4, 4}));
139
140 // Test delta encoding with mixed patterns
141 auto delta = ChunkCompressor<int>::delta_encode(mixed);
142 auto decoded = ChunkCompressor<int>::delta_decode(delta);
143 EXPECT_EQ(decoded, mixed);
144}

References chunk_compression::ChunkCompressor< T >::delta_decode(), chunk_compression::ChunkCompressor< T >::delta_encode(), and chunk_compression::ChunkCompressor< T >::run_length_encode().

◆ TEST_F() [9/11]

TEST_F ( ChunkCompressorTest  ,
RunLengthEdgeCases   
)

Definition at line 58 of file chunk_compression_test.cpp.

58 {
59 // Test alternating values
60 std::vector<int> alternating = {1, 2, 1, 2, 1, 2};
61 auto encoded = ChunkCompressor<int>::run_length_encode(alternating);
62 EXPECT_EQ(encoded.size(), 6);
63 for (size_t i = 0; i < encoded.size(); ++i) {
64 EXPECT_EQ(encoded[i].first, (i % 2) + 1);
65 EXPECT_EQ(encoded[i].second, 1);
66 }
67
68 // Test single repeated value
69 std::vector<int> repeated(5, 42);
70 auto encoded_repeated = ChunkCompressor<int>::run_length_encode(repeated);
71 EXPECT_EQ(encoded_repeated.size(), 1);
72 EXPECT_EQ(encoded_repeated[0], (std::pair<int, size_t>{42, 5}));
73}

References chunk_compression::ChunkCompressor< T >::run_length_encode().

◆ TEST_F() [10/11]

TEST_F ( ChunkCompressorTest  ,
RunLengthEncoding   
)

Definition at line 21 of file chunk_compression_test.cpp.

21 {
22 auto encoded = ChunkCompressor<int>::run_length_encode(test_data);
23
24 EXPECT_EQ(encoded.size(), 4);
25 EXPECT_EQ(encoded[0], (std::pair<int, size_t>{1, 3}));
26 EXPECT_EQ(encoded[1], (std::pair<int, size_t>{2, 2}));
27 EXPECT_EQ(encoded[2], (std::pair<int, size_t>{3, 1}));
28 EXPECT_EQ(encoded[3], (std::pair<int, size_t>{4, 4}));
29}

References chunk_compression::ChunkCompressor< T >::run_length_encode().

◆ TEST_F() [11/11]

TEST_F ( ChunkCompressorTest  ,
SingleElementCompression   
)

Definition at line 45 of file chunk_compression_test.cpp.

45 {
46 auto rle = ChunkCompressor<int>::run_length_encode(single_data);
47 EXPECT_EQ(rle.size(), 1);
48
49 auto delta = ChunkCompressor<int>::delta_encode(single_data);
50 EXPECT_EQ(delta.size(), 1);
51}

References chunk_compression::ChunkCompressor< T >::delta_encode(), and chunk_compression::ChunkCompressor< T >::run_length_encode().