62 lines
1.8 KiB
Rust
62 lines
1.8 KiB
Rust
use criterion::{criterion_group, criterion_main, Criterion};
|
|
use rustc_hex::{FromHex, ToHex};
|
|
|
|
const DATA: &[u8] = include_bytes!("../src/lib.rs");
|
|
|
|
fn bench_encode(c: &mut Criterion) {
|
|
c.bench_function("hex_encode", |b| b.iter(|| hex::encode(DATA)));
|
|
|
|
c.bench_function("rustc_hex_encode", |b| b.iter(|| DATA.to_hex::<String>()));
|
|
|
|
c.bench_function("faster_hex_encode", |b| {
|
|
b.iter(|| faster_hex::hex_string(DATA).unwrap())
|
|
});
|
|
|
|
c.bench_function("faster_hex_encode_fallback", |b| {
|
|
b.iter(|| {
|
|
let mut dst = vec![0; DATA.len() * 2];
|
|
faster_hex::hex_encode_fallback(DATA, &mut dst);
|
|
dst
|
|
})
|
|
});
|
|
}
|
|
|
|
fn bench_decode(c: &mut Criterion) {
|
|
c.bench_function("hex_decode", |b| {
|
|
let hex = hex::encode(DATA);
|
|
b.iter(|| hex::decode(&hex).unwrap())
|
|
});
|
|
|
|
c.bench_function("rustc_hex_decode", |b| {
|
|
let hex = DATA.to_hex::<String>();
|
|
b.iter(|| hex.from_hex::<Vec<u8>>().unwrap())
|
|
});
|
|
|
|
c.bench_function("faster_hex_decode", move |b| {
|
|
let hex = faster_hex::hex_string(DATA).unwrap();
|
|
let len = DATA.len();
|
|
let mut dst = vec![0; len];
|
|
|
|
b.iter(|| faster_hex::hex_decode(hex.as_bytes(), &mut dst).unwrap())
|
|
});
|
|
|
|
c.bench_function("faster_hex_decode_unchecked", |b| {
|
|
let hex = faster_hex::hex_string(DATA).unwrap();
|
|
let len = DATA.len();
|
|
let mut dst = vec![0; len];
|
|
|
|
b.iter(|| faster_hex::hex_decode_unchecked(hex.as_bytes(), &mut dst))
|
|
});
|
|
|
|
c.bench_function("faster_hex_decode_fallback", |b| {
|
|
let hex = faster_hex::hex_string(DATA).unwrap();
|
|
let len = DATA.len();
|
|
let mut dst = vec![0; len];
|
|
|
|
b.iter(|| faster_hex::hex_decode_fallback(hex.as_bytes(), &mut dst))
|
|
});
|
|
}
|
|
|
|
criterion_group!(benches, bench_encode, bench_decode);
|
|
criterion_main!(benches);
|