]> git.proxmox.com Git - rustc.git/blob - vendor/zip/benches/read_entry.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / vendor / zip / benches / read_entry.rs
1 use bencher::{benchmark_group, benchmark_main};
2
3 use std::io::{Cursor, Read, Write};
4
5 use bencher::Bencher;
6 use getrandom::getrandom;
7 use zip::{ZipArchive, ZipWriter};
8
9 fn generate_random_archive(size: usize) -> Vec<u8> {
10 let data = Vec::new();
11 let mut writer = ZipWriter::new(Cursor::new(data));
12 let options =
13 zip::write::FileOptions::default().compression_method(zip::CompressionMethod::Stored);
14
15 writer.start_file("random.dat", options).unwrap();
16 let mut bytes = vec![0u8; size];
17 getrandom(&mut bytes).unwrap();
18 writer.write_all(&bytes).unwrap();
19
20 writer.finish().unwrap().into_inner()
21 }
22
23 fn read_entry(bench: &mut Bencher) {
24 let size = 1024 * 1024;
25 let bytes = generate_random_archive(size);
26 let mut archive = ZipArchive::new(Cursor::new(bytes.as_slice())).unwrap();
27
28 bench.iter(|| {
29 let mut file = archive.by_name("random.dat").unwrap();
30 let mut buf = [0u8; 1024];
31 loop {
32 let n = file.read(&mut buf).unwrap();
33 if n == 0 {
34 break;
35 }
36 }
37 });
38
39 bench.bytes = size as u64;
40 }
41
42 benchmark_group!(benches, read_entry);
43 benchmark_main!(benches);