Skip to content

Commit e33b3e6

Browse files
Verify Compressor::compress parallel execution with robust tests (#385)
- Renamed `test_parallel_compression_roundtrip` to `test_parallel_deflate_1mb` for clarity. - Added `test_parallel_deflate_boundary` to test the 256KB threshold trigger. - Added `test_parallel_deflate_large` (10MB) to verify scalability. - Added `test_parallel_zlib_large` and `test_parallel_gzip_large` (5MB) to cover format wrappers. - Added `test_parallel_insufficient_space` to verify error propagation in parallel mode. These tests ensure that the parallel execution path, which activates for inputs > 256KB, functions correctly across different formats and handles edge cases like buffer limits properly. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
1 parent d15ac05 commit e33b3e6

1 file changed

Lines changed: 95 additions & 1 deletion

File tree

tests/parallel_test.rs

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use libdeflate::{Compressor, Decompressor};
22

33
#[test]
4-
fn test_parallel_compression_roundtrip() {
4+
fn test_parallel_deflate_1mb() {
55
let size = 1024 * 1024;
66
let mut data = Vec::with_capacity(size);
77
for i in 0..size {
@@ -18,3 +18,97 @@ fn test_parallel_compression_roundtrip() {
1818

1919
assert_eq!(decompressed, data);
2020
}
21+
22+
#[test]
23+
fn test_parallel_deflate_boundary() {
24+
// 256KB + 1 byte
25+
let size = 256 * 1024 + 1;
26+
let mut data = Vec::with_capacity(size);
27+
for i in 0..size {
28+
data.push((i % 256) as u8);
29+
}
30+
31+
let mut compressor = Compressor::new(6).unwrap();
32+
let mut decompressor = Decompressor::new();
33+
34+
let compressed = compressor.compress_deflate(&data).unwrap();
35+
assert!(compressed.len() > 0);
36+
37+
let decompressed = decompressor.decompress_deflate(&compressed, size).unwrap();
38+
assert_eq!(decompressed, data);
39+
}
40+
41+
#[test]
42+
fn test_parallel_deflate_large() {
43+
// 10MB
44+
let size = 10 * 1024 * 1024;
45+
let mut data = Vec::with_capacity(size);
46+
for i in 0..size {
47+
data.push((i % 256) as u8);
48+
}
49+
50+
let mut compressor = Compressor::new(6).unwrap();
51+
let mut decompressor = Decompressor::new();
52+
53+
let compressed = compressor.compress_deflate(&data).unwrap();
54+
assert!(compressed.len() > 0);
55+
56+
let decompressed = decompressor.decompress_deflate(&compressed, size).unwrap();
57+
assert_eq!(decompressed, data);
58+
}
59+
60+
#[test]
61+
fn test_parallel_zlib_large() {
62+
let size = 5 * 1024 * 1024;
63+
let mut data = Vec::with_capacity(size);
64+
for i in 0..size {
65+
data.push((i.wrapping_mul(3) % 251) as u8);
66+
}
67+
68+
let mut compressor = Compressor::new(6).unwrap();
69+
let mut decompressor = Decompressor::new();
70+
71+
let compressed = compressor.compress_zlib(&data).unwrap();
72+
assert!(compressed.len() > 0);
73+
74+
let decompressed = decompressor.decompress_zlib(&compressed, size).unwrap();
75+
assert_eq!(decompressed, data);
76+
}
77+
78+
#[test]
79+
fn test_parallel_gzip_large() {
80+
let size = 5 * 1024 * 1024;
81+
let mut data = Vec::with_capacity(size);
82+
for i in 0..size {
83+
data.push((i.wrapping_mul(7) % 251) as u8);
84+
}
85+
86+
let mut compressor = Compressor::new(6).unwrap();
87+
let mut decompressor = Decompressor::new();
88+
89+
let compressed = compressor.compress_gzip(&data).unwrap();
90+
assert!(compressed.len() > 0);
91+
92+
let decompressed = decompressor.decompress_gzip(&compressed, size).unwrap();
93+
assert_eq!(decompressed, data);
94+
}
95+
96+
#[test]
97+
fn test_parallel_insufficient_space() {
98+
let size = 1024 * 1024; // 1MB, triggers parallel
99+
let mut data = Vec::with_capacity(size);
100+
for i in 0..size {
101+
data.push((i % 256) as u8);
102+
}
103+
104+
let mut compressor = Compressor::new(6).unwrap();
105+
106+
// Provide a buffer that is too small
107+
let mut output = vec![0u8; 100]; // Definitely too small
108+
109+
let result = compressor.compress_deflate_into(&data, &mut output);
110+
assert!(result.is_err());
111+
// We expect "Insufficient space" or similar error
112+
let err = result.unwrap_err();
113+
assert!(err.to_string().contains("Insufficient space") || err.to_string().contains("Compression failed"));
114+
}

0 commit comments

Comments
 (0)