63 lines
1.5 KiB
Rust
63 lines
1.5 KiB
Rust
//! `base64ct` benchmarks
|
|
|
|
#![feature(test)]
|
|
extern crate test;
|
|
|
|
use base64ct::{Base64Unpadded, Encoding};
|
|
use test::Bencher;
|
|
|
|
const B64_LEN: usize = 100_000;
|
|
const RAW_LEN: usize = (3 * B64_LEN) / 4;
|
|
|
|
#[inline(never)]
|
|
fn get_raw_data() -> Vec<u8> {
|
|
(0..RAW_LEN).map(|i| i as u8).collect()
|
|
}
|
|
|
|
#[inline(never)]
|
|
fn get_b64_data() -> String {
|
|
(0..B64_LEN)
|
|
.map(|i| match (i % 64) as u8 {
|
|
v @ 0..=25 => (v + b'A') as char,
|
|
v @ 26..=51 => (v - 26 + b'a') as char,
|
|
v @ 52..=61 => (v - 52 + b'0') as char,
|
|
62 => '+',
|
|
_ => '/',
|
|
})
|
|
.collect()
|
|
}
|
|
|
|
#[bench]
|
|
fn decode_bench(b: &mut Bencher) {
|
|
let b64_data = get_b64_data();
|
|
let mut buf = get_raw_data();
|
|
b.iter(|| {
|
|
let out = Base64Unpadded::decode(test::black_box(&b64_data), &mut buf).unwrap();
|
|
test::black_box(out);
|
|
});
|
|
b.bytes = RAW_LEN as u64;
|
|
}
|
|
|
|
#[bench]
|
|
fn decode_in_place_bench(b: &mut Bencher) {
|
|
let b64_data = get_b64_data().into_bytes();
|
|
let mut buf = b64_data.clone();
|
|
b.iter(|| {
|
|
buf.copy_from_slice(&b64_data[..]);
|
|
let out = Base64Unpadded::decode_in_place(&mut buf);
|
|
let _ = test::black_box(out);
|
|
});
|
|
b.bytes = RAW_LEN as u64;
|
|
}
|
|
|
|
#[bench]
|
|
fn encode_bench(b: &mut Bencher) {
|
|
let mut buf = get_b64_data().into_bytes();
|
|
let raw_data = get_raw_data();
|
|
b.iter(|| {
|
|
let out = Base64Unpadded::encode(test::black_box(&raw_data), &mut buf).unwrap();
|
|
test::black_box(out);
|
|
});
|
|
b.bytes = RAW_LEN as u64;
|
|
}
|