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>11fn 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)28fn 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