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