fast-hex/benches/bench.rs

36 lines
2.1 KiB
Rust

#![feature(generic_const_exprs)]
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use fast_hex::*;
const ASCII_BYTES: &[u8; 16] = b"Donald J. Trump!";
const HEX_BYTES: &[u8; ASCII_BYTES.len() * 2] = b"446F6E616C64204A2E205472756D7021";
const ASCII_BYTES_LONG: &[u8; 256] = b"Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!Donald J. Trump!";
const HEX_BYTES_LONG: &[u8; ASCII_BYTES_LONG.len() * 2] = b"446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021446F6E616C64204A2E205472756D7021";
fn benchmark<const N: usize>(bytes: &[u8; N * 2]) -> impl FnOnce(&mut Criterion) -> () + '_
where
[(); N * 2]:
{
|c| {
c.bench_function("sized", |b| b.iter(|| hex_bytes::<N>(black_box(bytes))));
c.bench_function("dyn unsafe", |b| b.iter(|| hex_bytes_dyn_unsafe(black_box(bytes))));
c.bench_function("dyn unsafe for", |b| b.iter(|| hex_bytes_dyn_unsafe_for(black_box(bytes))));
c.bench_function("dyn unsafe iter", |b| b.iter(|| hex_bytes_dyn_unsafe_iter(black_box(bytes))));
c.bench_function("dyn non-niched", |b| b.iter(|| hex_bytes_dyn(black_box(bytes))));
c.bench_function("dyn niched", |b| b.iter(|| hex_bytes_dyn_niched(black_box(bytes))));
}
}
pub fn bench_16(c: &mut Criterion) {
benchmark::<{ ASCII_BYTES.len() }>(HEX_BYTES)(c)
}
pub fn bench_256(c: &mut Criterion) {
benchmark::<{ ASCII_BYTES_LONG.len() }>(HEX_BYTES_LONG)(c)
}
criterion_group!(benches, bench_16, bench_256);
criterion_main!(benches);