1 use criterion::{criterion_group, criterion_main, Criterion};
2 use rustc_hex::{FromHex, ToHex};
3
4 const DATA: &[u8] = include_bytes!("../src/lib.rs");
5
bench_encode(c: &mut Criterion)6 fn bench_encode(c: &mut Criterion) {
7 c.bench_function("hex_encode", |b| b.iter(|| hex::encode(DATA)));
8
9 c.bench_function("rustc_hex_encode", |b| b.iter(|| DATA.to_hex::<String>()));
10
11 c.bench_function("faster_hex_encode", |b| {
12 b.iter(|| faster_hex::hex_string(DATA).unwrap())
13 });
14
15 c.bench_function("faster_hex_encode_fallback", |b| {
16 b.iter(|| {
17 let mut dst = vec![0; DATA.len() * 2];
18 faster_hex::hex_encode_fallback(DATA, &mut dst);
19 dst
20 })
21 });
22 }
23
bench_decode(c: &mut Criterion)24 fn bench_decode(c: &mut Criterion) {
25 c.bench_function("hex_decode", |b| {
26 let hex = hex::encode(DATA);
27 b.iter(|| hex::decode(&hex).unwrap())
28 });
29
30 c.bench_function("rustc_hex_decode", |b| {
31 let hex = DATA.to_hex::<String>();
32 b.iter(|| hex.from_hex::<Vec<u8>>().unwrap())
33 });
34
35 c.bench_function("faster_hex_decode", move |b| {
36 let hex = faster_hex::hex_string(DATA).unwrap();
37 let len = DATA.len();
38 let mut dst = vec![0; len];
39
40 b.iter(|| faster_hex::hex_decode(hex.as_bytes(), &mut dst).unwrap())
41 });
42
43 c.bench_function("faster_hex_decode_unchecked", |b| {
44 let hex = faster_hex::hex_string(DATA).unwrap();
45 let len = DATA.len();
46 let mut dst = vec![0; len];
47
48 b.iter(|| faster_hex::hex_decode_unchecked(hex.as_bytes(), &mut dst))
49 });
50
51 c.bench_function("faster_hex_decode_fallback", |b| {
52 let hex = faster_hex::hex_string(DATA).unwrap();
53 let len = DATA.len();
54 let mut dst = vec![0; len];
55
56 b.iter(|| faster_hex::hex_decode_fallback(hex.as_bytes(), &mut dst))
57 });
58 }
59
60 criterion_group!(benches, bench_encode, bench_decode);
61 criterion_main!(benches);
62