| #![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<u16, _> = 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<u16, _> = 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<u16, _> = 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<u16, _> = 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<u16, _> = black_box(val.read_u16::<byteorder::LittleEndian>()); |
| } |
| }); |
| 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; |
| } |