preserves/implementations/rust/benches/codec.rs

88 lines
3.2 KiB
Rust

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_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 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();
c.bench_function("encode samples.bin", |b| b.iter(|| {
let mut bs = vec![];
encoder::Encoder::new(&mut bs).write(&v).unwrap();
bs
}));
}
pub fn bench_de(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("deserialize samples.bin", |b| b.iter(
|| de::from_bytes::<TestCases>(&bs[..]).unwrap()));
}
pub fn bench_ser(c: &mut Criterion) {
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
let v: TestCases = de::from_read(&mut fh).unwrap();
c.bench_function("serialize samples.bin", |b| b.iter(|| {
let mut bs = vec![];
ser::to_writer(&mut bs, &v).unwrap();
bs
}));
}
pub fn bench_decoder_de(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-then-deserialize samples.bin", |b| b.iter(
|| value::de::from_value::<TestCases>(&decoder::from_bytes(&bs[..]).demand_next().unwrap()).unwrap()));
}
pub fn bench_ser_encoder(c: &mut Criterion) {
let mut fh = std::fs::File::open("../../tests/samples.bin").unwrap();
let v: TestCases = de::from_read(&mut fh).unwrap();
c.bench_function("serialize-then-encode samples.bin", |b| b.iter(|| {
let mut bs = vec![];
encoder::Encoder::new(&mut bs).write(&value::ser::to_value(&v)).unwrap();
bs
}));
}
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);