From 2b42b0219bbd0f5d2103a876b1217456d7f39d35 Mon Sep 17 00:00:00 2001 From: Sam Rijs Date: Wed, 7 Nov 2018 18:35:32 +1100 Subject: [PATCH] add read_entry benchmark --- Cargo.toml | 6 ++++++ benches/read_entry.rs | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 benches/read_entry.rs diff --git a/Cargo.toml b/Cargo.toml index 1346f2c5..95bc1471 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,8 +19,14 @@ bzip2 = { version = "0.3", optional = true } libflate = { version = "0.1.16", optional = true } [dev-dependencies] +bencher = "0.1" +rand = "0.4" walkdir = "1.0" [features] deflate = ["libflate"] default = ["bzip2", "deflate"] + +[[bench]] +name = "read_entry" +harness = false diff --git a/benches/read_entry.rs b/benches/read_entry.rs new file mode 100644 index 00000000..104e97c1 --- /dev/null +++ b/benches/read_entry.rs @@ -0,0 +1,46 @@ +#[macro_use] +extern crate bencher; +extern crate rand; +extern crate zip; + +use std::io::{Cursor, Read, Write}; + +use bencher::Bencher; +use rand::Rng; +use zip::{ZipArchive, ZipWriter}; + +fn generate_random_archive(size: usize) -> Vec { + let data = Vec::new(); + let mut writer = ZipWriter::new(Cursor::new(data)); + let options = zip::write::FileOptions::default() + .compression_method(zip::CompressionMethod::Stored); + + writer.start_file("random.dat", options).unwrap(); + let mut bytes = vec![0u8; size]; + rand::thread_rng().fill_bytes(&mut bytes); + writer.write_all(&bytes).unwrap(); + + writer.finish().unwrap().into_inner() +} + +fn read_entry(bench: &mut Bencher) { + let size = 1024 * 1024; + let bytes = generate_random_archive(size); + let mut archive = ZipArchive::new(Cursor::new(bytes.as_slice())).unwrap(); + + bench.iter(|| { + let mut file = archive.by_name("random.dat").unwrap(); + let mut buf = [0u8; 1024]; + loop { + let n = file.read(&mut buf).unwrap(); + if n == 0 { + break; + } + } + }); + + bench.bytes = size as u64; +} + +benchmark_group!(benches, read_entry); +benchmark_main!(benches);