#![feature(test)] #![warn(rust_2018_idioms)] extern crate test; use bytes::Bytes; use test::Bencher; #[bench] fn deref_unique(b: &mut Bencher) { let buf = Bytes::from(vec![0; 1024]); b.iter(|| { for _ in 0..1024 { test::black_box(&buf[..]); } }) } #[bench] fn deref_shared(b: &mut Bencher) { let buf = Bytes::from(vec![0; 1024]); let _b2 = buf.clone(); b.iter(|| { for _ in 0..1024 { test::black_box(&buf[..]); } }) } #[bench] fn deref_static(b: &mut Bencher) { let buf = Bytes::from_static(b"hello world"); b.iter(|| { for _ in 0..1024 { test::black_box(&buf[..]); } }) } #[bench] fn clone_static(b: &mut Bencher) { let bytes = Bytes::from_static("hello world 1234567890 and have a good byte 0987654321".as_bytes()); b.iter(|| { for _ in 0..1024 { test::black_box(test::black_box(&bytes).clone()); } }) } #[bench] fn clone_shared(b: &mut Bencher) { let bytes = Bytes::from(b"hello world 1234567890 and have a good byte 0987654321".to_vec()); b.iter(|| { for _ in 0..1024 { test::black_box(test::black_box(&bytes).clone()); } }) } #[bench] fn clone_arc_vec(b: &mut Bencher) { use std::sync::Arc; let bytes = Arc::new(b"hello world 1234567890 and have a good byte 0987654321".to_vec()); b.iter(|| { for _ in 0..1024 { test::black_box(test::black_box(&bytes).clone()); } }) } #[bench] fn from_long_slice(b: &mut Bencher) { let data = [0u8; 128]; b.bytes = data.len() as u64; b.iter(|| { let buf = Bytes::copy_from_slice(&data[..]); test::black_box(buf); }) } #[bench] fn slice_empty(b: &mut Bencher) { b.iter(|| { // `clone` is to convert to ARC let b = Bytes::from(vec![17; 1024]).clone(); for i in 0..1000 { test::black_box(b.slice(i % 100..i % 100)); } }) } #[bench] fn slice_short_from_arc(b: &mut Bencher) { b.iter(|| { // `clone` is to convert to ARC let b = Bytes::from(vec![17; 1024]).clone(); for i in 0..1000 { test::black_box(b.slice(1..2 + i % 10)); } }) } #[bench] fn split_off_and_drop(b: &mut Bencher) { b.iter(|| { for _ in 0..1024 { let v = vec![10; 200]; let mut b = Bytes::from(v); test::black_box(b.split_off(100)); test::black_box(b); } }) }