diff --git a/implementations/rust/benches/codec.rs b/implementations/rust/benches/codec.rs index eceb905..795ffe2 100644 --- a/implementations/rust/benches/codec.rs +++ b/implementations/rust/benches/codec.rs @@ -2,19 +2,37 @@ use criterion::{criterion_group, criterion_main, Criterion}; use preserves::value::{self, decoder, encoder}; use preserves::{de, ser}; use std::io::Read; +use std::io::BufReader; +use std::io::{Seek, SeekFrom}; #[path = "../tests/samples/mod.rs"] mod samples; use samples::TestCases; -pub fn bench_decoder(c: &mut Criterion) { +pub fn bench_decoder_bytes(c: &mut Criterion) { let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap(); let mut bs = vec![]; fh.read_to_end(&mut bs).ok(); - c.bench_function("decode samples.bin", |b| b.iter( + c.bench_function("decode samples.bin via bytes", |b| b.iter( || decoder::from_bytes(&bs[..]).demand_next().unwrap())); } +pub fn bench_decoder_file(c: &mut Criterion) { + let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap(); + c.bench_function("decode samples.bin via file", |b| b.iter(|| { + fh.seek(SeekFrom::Start(0)).ok(); + decoder::from_read(&mut fh).demand_next().unwrap() + })); +} + +pub fn bench_decoder_buffered_file(c: &mut Criterion) { + let mut fh = BufReader::new(std::fs::File::open("../../tests/samples.bin").unwrap()); + c.bench_function("decode samples.bin via buffered file", |b| b.iter(|| { + fh.seek(SeekFrom::Start(0)).ok(); + decoder::from_read(&mut fh).demand_next().unwrap() + })); +} + pub fn bench_encoder(c: &mut Criterion) { let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap(); let v = decoder::from_read(&mut fh).demand_next().unwrap(); @@ -61,7 +79,9 @@ pub fn bench_ser_encoder(c: &mut Criterion) { })); } -criterion_group!(codec, bench_decoder, bench_encoder); +criterion_group!(codec, + bench_decoder_bytes, bench_decoder_file, bench_decoder_buffered_file, + bench_encoder); criterion_group!(serde, bench_de, bench_ser); criterion_group!(codec_then_serde, bench_decoder_de, bench_ser_encoder); criterion_main!(codec, serde, codec_then_serde);