use criterion::{criterion_group, criterion_main, Criterion}; use preserves::value::{self, decoder, encoder}; use preserves::{de, ser}; use std::io::Read; #[path = "../tests/samples/mod.rs"] mod samples; use samples::TestCases; pub fn bench_decoder(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( || decoder::from_bytes(&bs[..]).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::(&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::(&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, 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);