//! `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 { (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; }