summaryrefslogtreecommitdiff
path: root/vendor/weezl/benches/msb8.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/weezl/benches/msb8.rs')
-rw-r--r--vendor/weezl/benches/msb8.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/vendor/weezl/benches/msb8.rs b/vendor/weezl/benches/msb8.rs
new file mode 100644
index 0000000..a7e5dc5
--- /dev/null
+++ b/vendor/weezl/benches/msb8.rs
@@ -0,0 +1,54 @@
+extern crate criterion;
+extern crate weezl;
+
+use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
+use std::fs;
+use weezl::{decode::Decoder, BitOrder, LzwStatus};
+
+pub fn criterion_benchmark(c: &mut Criterion, file: &str) {
+ let data = fs::read(file).expect("Benchmark input not found");
+ let mut group = c.benchmark_group("msb-8");
+ let id = BenchmarkId::new(file, data.len());
+ let mut outbuf = vec![0; 1 << 26]; // 64MB, what wuff uses..
+ let mut decode_once = |data: &[u8]| {
+ let mut decoder = Decoder::new(BitOrder::Msb, 8);
+ let mut written = 0;
+ let outbuf = outbuf.as_mut_slice();
+ let mut data = data;
+ loop {
+ let result = decoder.decode_bytes(data, &mut outbuf[..]);
+ let done = result.status.expect("Error");
+ data = &data[result.consumed_in..];
+ written += result.consumed_out;
+ black_box(&outbuf[..result.consumed_out]);
+ if let LzwStatus::Done = done {
+ break;
+ }
+ if let LzwStatus::NoProgress = done {
+ panic!("Need to make progress");
+ }
+ }
+ written
+ };
+ group.throughput(Throughput::Bytes(decode_once(&data) as u64));
+ group.bench_with_input(id, &data, |b, data| {
+ b.iter(|| {
+ decode_once(data);
+ })
+ });
+}
+
+pub fn bench_toml(c: &mut Criterion) {
+ criterion_benchmark(c, "benches/Cargo-8-msb.lzw");
+}
+
+pub fn bench_binary(c: &mut Criterion) {
+ criterion_benchmark(c, "benches/binary-8-msb.lzw");
+}
+
+pub fn bench_lib(c: &mut Criterion) {
+ criterion_benchmark(c, "benches/lib-8-msb.lzw");
+}
+
+criterion_group!(benches, bench_toml, bench_binary, bench_lib);
+criterion_main!(benches);