use std::sync::Arc;
use criterion::{criterion_group, criterion_main, Criterion};
const BIG_RANGE: core::ops::Range<usize> = 0..(1500 * 10);
const MEDIUM_RANGE: core::ops::Range<usize> = 0..(1500 * 3);
fn bench_array_concat(c: &mut Criterion) {
let mut group = c.benchmark_group("Concat lists");
let medium_data_vec: Vec<u8> = MEDIUM_RANGE.into_iter().map(|val| val as u8).collect();
let medium_data_arc: Arc<Vec<u8>> = Arc::new(medium_data_vec.clone());
let medium_data_vec: Vec<u8> = MEDIUM_RANGE.into_iter().map(|val| val as u8).collect();
group.bench_with_input(
" medium_data / vec![slice.to_vec(), arc.to_vec()].concat()",
medium_data_vec.as_slice(),
|b, slice| {
b.iter(|| {
vec![slice.to_vec(), medium_data_arc.to_vec()].concat();
})
},
);
let big_data_vec: Vec<u8> = BIG_RANGE.into_iter().map(|val| val as u8).collect();
let big_data_arc: Arc<Vec<u8>> = Arc::new(big_data_vec.clone());
let big_data_vec: Vec<u8> = BIG_RANGE.into_iter().map(|val| val as u8).collect();
group.bench_with_input(
" big_data / vec![slice.to_vec(), arc.to_vec()].concat()",
big_data_vec.as_slice(),
|b, slice| {
b.iter(|| {
vec![slice.to_vec(), big_data_arc.to_vec()].concat();
})
},
);
let medium_data_vec: Vec<u8> = MEDIUM_RANGE.into_iter().map(|val| val as u8).collect();
let medium_data_arc: Arc<Vec<u8>> = Arc::new(medium_data_vec.clone());
let medium_data_slice: &[u8] = &MEDIUM_RANGE
.into_iter()
.map(|val| val as u8)
.collect::<Vec<u8>>();
group.bench_function(
" medium_data / vec![slice_a, arc.as_slice()].concat()",
|b| {
b.iter(|| {
vec![medium_data_slice, medium_data_arc.as_slice()].concat();
})
},
);
let big_data_vec: Vec<u8> = BIG_RANGE.into_iter().map(|val| val as u8).collect();
let big_data_arc: Arc<Vec<u8>> = Arc::new(big_data_vec.clone());
let big_data_slice: &[u8] = &BIG_RANGE
.into_iter()
.map(|val| val as u8)
.collect::<Vec<_>>();
group.bench_function(" big_data / vec![slice_a, arc.as_slice()].concat()", |b| {
b.iter(|| {
vec![big_data_slice, big_data_arc.as_slice()].concat();
})
});
let medium_data_array: [u8; 1500 * 3] = [1; 1500 * 3];
let medium_data_arc: Arc<Vec<u8>> = Arc::new(medium_data_vec.clone());
group.bench_function(
" medium_data / [array.as_ref(), arc.as_slice()].concat()",
|b| {
b.iter(|| {
let _vec = [medium_data_array.as_ref(), medium_data_arc.as_slice()].concat();
})
},
);
let big_data_array: [u8; 1500 * 10] = [1; 1500 * 10];
let big_data_arc: Arc<Vec<u8>> = Arc::new(big_data_vec.clone());
group.bench_function(
" big_data / [array.as_ref(), arc.as_slice()].concat()",
|b| {
b.iter(|| {
let _vec = [big_data_array.as_ref(), big_data_arc.as_slice()].concat();
})
},
);
group.finish();
}
criterion_group!(benches, bench_array_concat);
criterion_main!(benches);