#![feature(test)] extern crate test; use scroll::{Cread, Pread, LE}; use test::black_box; #[bench] fn bench_parallel_cread_with(b: &mut test::Bencher) { use rayon::prelude::*; let vec = vec![0u8; 1_000_000]; let nums = vec![0usize; 500_000]; b.iter(|| { let data = black_box(&vec[..]); nums.par_iter().for_each(|offset| { let _: u16 = black_box(data.cread_with(*offset, LE)); }); }); b.bytes = vec.len() as u64; } #[bench] fn bench_cread_vec(b: &mut test::Bencher) { let vec = vec![0u8; 1_000_000]; b.iter(|| { let data = black_box(&vec[..]); for val in data.chunks(2) { let _: u16 = black_box(val.cread_with(0, LE)); } }); b.bytes = vec.len() as u64; } #[bench] fn bench_cread(b: &mut test::Bencher) { const NITER: i32 = 100_000; b.iter(|| { for _ in 1..NITER { let data = black_box([1, 2]); let _: u16 = black_box(data.cread(0)); } }); b.bytes = 2 * NITER as u64; } #[bench] fn bench_pread_ctx_vec(b: &mut test::Bencher) { let vec = vec![0u8; 1_000_000]; b.iter(|| { let data = black_box(&vec[..]); for val in data.chunks(2) { let _: Result = black_box(val.pread(0)); } }); b.bytes = vec.len() as u64; } #[bench] fn bench_pread_with_unwrap(b: &mut test::Bencher) { const NITER: i32 = 100_000; b.iter(|| { for _ in 1..NITER { let data: &[u8] = &black_box([1, 2]); let _: u16 = black_box(data.pread_with(0, LE).unwrap()); } }); b.bytes = 2 * NITER as u64; } #[bench] fn bench_pread_vec(b: &mut test::Bencher) { let vec = vec![0u8; 1_000_000]; b.iter(|| { let data = black_box(&vec[..]); for val in data.chunks(2) { let _: Result = black_box(val.pread_with(0, LE)); } }); b.bytes = vec.len() as u64; } #[bench] fn bench_pread_unwrap(b: &mut test::Bencher) { const NITER: i32 = 100_000; b.iter(|| { for _ in 1..NITER { let data = black_box([1, 2]); let _: u16 = black_box(data.pread(0)).unwrap(); } }); b.bytes = 2 * NITER as u64; } #[bench] fn bench_gread_vec(b: &mut test::Bencher) { let vec = vec![0u8; 1_000_000]; b.iter(|| { let data = black_box(&vec[..]); for val in data.chunks(2) { let mut offset = 0; let _: Result = black_box(val.gread(&mut offset)); } }); b.bytes = vec.len() as u64; } #[bench] fn bench_gread_unwrap(b: &mut test::Bencher) { const NITER: i32 = 100_000; b.iter(|| { for _ in 1..NITER { let data = black_box([1, 2]); let mut offset = 0; let _: u16 = black_box(data.gread_with(&mut offset, LE).unwrap()); } }); b.bytes = 2 * NITER as u64; } #[bench] fn bench_parallel_pread_with(b: &mut test::Bencher) { use rayon::prelude::*; let vec = vec![0u8; 1_000_000]; let nums = vec![0usize; 500_000]; b.iter(|| { let data = black_box(&vec[..]); nums.par_iter().for_each(|offset| { let _: Result = black_box(data.pread_with(*offset, LE)); }); }); b.bytes = vec.len() as u64; } #[bench] fn bench_byteorder_vec(b: &mut test::Bencher) { use byteorder::ReadBytesExt; let vec = vec![0u8; 1_000_000]; b.iter(|| { let data = black_box(&vec[..]); for mut val in data.chunks(2) { let _: Result = black_box(val.read_u16::()); } }); b.bytes = vec.len() as u64; } #[bench] fn bench_byteorder(b: &mut test::Bencher) { use byteorder::ByteOrder; const NITER: i32 = 100_000; b.iter(|| { for _ in 1..NITER { let data = black_box([1, 2]); let _: u16 = black_box(byteorder::LittleEndian::read_u16(&data)); } }); b.bytes = 2 * NITER as u64; }