1 use bencher::{benchmark_group, benchmark_main};
2 
3 use std::io::{Cursor, Write};
4 
5 use bencher::Bencher;
6 use zip::{ZipArchive, ZipWriter};
7 
8 const FILE_COUNT: usize = 15_000;
9 const FILE_SIZE: usize = 1024;
10 
generate_random_archive(count_files: usize, file_size: usize) -> Vec<u8>11 fn generate_random_archive(count_files: usize, file_size: usize) -> Vec<u8> {
12     let data = Vec::new();
13     let mut writer = ZipWriter::new(Cursor::new(data));
14     let options =
15         zip::write::FileOptions::default().compression_method(zip::CompressionMethod::Stored);
16 
17     let bytes = vec![0u8; file_size];
18 
19     for i in 0..count_files {
20         let name = format!("file_deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef_{i}.dat");
21         writer.start_file(name, options).unwrap();
22         writer.write_all(&bytes).unwrap();
23     }
24 
25     writer.finish().unwrap().into_inner()
26 }
27 
read_metadata(bench: &mut Bencher)28 fn read_metadata(bench: &mut Bencher) {
29     let bytes = generate_random_archive(FILE_COUNT, FILE_SIZE);
30 
31     bench.iter(|| {
32         let archive = ZipArchive::new(Cursor::new(bytes.as_slice())).unwrap();
33         archive.len()
34     });
35 }
36 
37 benchmark_group!(benches, read_metadata);
38 benchmark_main!(benches);
39