-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbatch_processing.rs
More file actions
52 lines (42 loc) · 1.62 KB
/
batch_processing.rs
File metadata and controls
52 lines (42 loc) · 1.62 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
use libdeflate::batch::{BatchCompressor, BatchDecompressor};
use std::time::Instant;
fn main() {
let data1 = b"Hello world. This is the first string.".repeat(100);
let data2 = b"Another string for batch processing.".repeat(100);
let data3 = b"Short string.".to_vec();
let data4 = vec![b'A'; 10000];
let inputs = vec![
data1.as_slice(),
data2.as_slice(),
data3.as_slice(),
data4.as_slice(),
];
println!("Batch compressing {} items...", inputs.len());
let start = Instant::now();
let compressor = BatchCompressor::new(6);
let compressed_data = compressor.compress_batch(&inputs);
let duration = start.elapsed();
println!("Compression took: {:?}", duration);
for (i, data) in compressed_data.iter().enumerate() {
println!(
"Item {}: Original size: {}, Compressed size: {}",
i,
inputs[i].len(),
data.len()
);
}
println!("Batch decompressing...");
let decompressor = BatchDecompressor::new();
let max_sizes: Vec<usize> = inputs.iter().map(|i| i.len()).collect();
let compressed_refs: Vec<&[u8]> = compressed_data.iter().map(|v| v.as_slice()).collect();
let decompressed_results = decompressor.decompress_batch(&compressed_refs, &max_sizes);
for (i, result) in decompressed_results.iter().enumerate() {
match result {
Some(data) => {
assert_eq!(data.as_slice(), inputs[i]);
println!("Item {}: Decompression successful.", i);
}
None => println!("Item {}: Decompression failed!", i),
}
}
}