38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
use bencher::{benchmark_group, benchmark_main};
|
|
|
|
use std::io::{Cursor, Write};
|
|
|
|
use bencher::Bencher;
|
|
use zip_next::{ZipArchive, ZipWriter};
|
|
|
|
const FILE_COUNT: usize = 15_000;
|
|
const FILE_SIZE: usize = 1024;
|
|
|
|
fn generate_random_archive(count_files: usize, file_size: usize) -> Vec<u8> {
|
|
let data = Vec::new();
|
|
let mut writer = ZipWriter::new(Cursor::new(data));
|
|
let options =
|
|
zip_next::write::FileOptions::default().compression_method(zip_next::CompressionMethod::Stored);
|
|
|
|
let bytes = vec![0u8; file_size];
|
|
|
|
for i in 0..count_files {
|
|
let name = format!("file_deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef_{i}.dat");
|
|
writer.start_file(name, options).unwrap();
|
|
writer.write_all(&bytes).unwrap();
|
|
}
|
|
|
|
writer.finish().unwrap().into_inner()
|
|
}
|
|
|
|
fn read_metadata(bench: &mut Bencher) {
|
|
let bytes = generate_random_archive(FILE_COUNT, FILE_SIZE);
|
|
|
|
bench.iter(|| {
|
|
let archive = ZipArchive::new(Cursor::new(bytes.as_slice())).unwrap();
|
|
archive.len()
|
|
});
|
|
}
|
|
|
|
benchmark_group!(benches, read_metadata);
|
|
benchmark_main!(benches);
|