mod common;
use std::hint::black_box;
use std::io::{self, BufReader};
use std::time::Duration;
use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
fn bench(c: &mut Criterion) {
for w in common::workloads() {
let plain = common::encode(&w);
let compressed = common::encode_zstd(&w);
let mut group = c.benchmark_group(format!("star/{}", w.name));
group
.throughput(Throughput::Bytes(w.bytes()))
.sample_size(20)
.warm_up_time(Duration::from_secs(1))
.measurement_time(Duration::from_secs(4));
group.bench_function(BenchmarkId::new("write", "vec"), |b| {
let mut out = Vec::with_capacity(plain.len());
b.iter(|| {
out.clear();
common::write(&mut out, black_box(&w));
black_box(out.len())
})
});
group.bench_function(BenchmarkId::new("write", "zstd"), |b| {
b.iter(|| {
let mut out = zstd::Encoder::new(io::sink(), common::ZSTD_LEVEL).unwrap();
common::write(&mut out, black_box(&w));
out.finish().unwrap()
})
});
group.bench_function(BenchmarkId::new("read", "slice"), |b| {
b.iter(|| common::read(black_box(&plain[..])))
});
group.bench_function(BenchmarkId::new("read", "owned"), |b| {
b.iter(|| common::read_owned(black_box(&plain[..])))
});
group.bench_function(BenchmarkId::new("read", "zstd"), |b| {
b.iter(|| {
let decoder = zstd::Decoder::new(black_box(&compressed[..])).unwrap();
common::read(BufReader::new(decoder))
})
});
group.finish();
}
}
criterion_group!(benches, bench);
criterion_main!(benches);