From 291eb90ed1eaabf0e02987de9c3c76d1b85b6a53 Mon Sep 17 00:00:00 2001 From: Jef Date: Thu, 17 May 2018 16:28:57 +0200 Subject: [PATCH] Add benchmarks for Vec to compare to SmallVec --- benches/bench.rs | 96 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/benches/bench.rs b/benches/bench.rs index 9ffbb46..7196176 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -130,3 +130,99 @@ fn bench_macro_from_list(b: &mut Bencher) { vec }); } +#[bench] +fn bench_push_vec(b: &mut Bencher) { + #[inline(never)] + fn push_noinline(vec: &mut Vec, x: u64) { + vec.push(x) + } + + b.iter(|| { + let mut vec: Vec = Vec::with_capacity(16); + for x in 0..100 { + push_noinline(&mut vec, x); + } + vec + }); +} + +#[bench] +fn bench_insert_vec(b: &mut Bencher) { + #[inline(never)] + fn insert_noinline(vec: &mut Vec, x: u64) { + vec.insert(0, x) + } + + b.iter(|| { + let mut vec: Vec = Vec::with_capacity(16); + for x in 0..100 { + insert_noinline(&mut vec, x); + } + vec + }); +} + +#[bench] +fn bench_extend_vec(b: &mut Bencher) { + b.iter(|| { + let mut vec: Vec = Vec::with_capacity(16); + vec.extend(0..100); + vec + }); +} + +#[bench] +fn bench_from_slice_vec(b: &mut Bencher) { + let v: Vec = (0..100).collect(); + b.iter(|| { + let vec: Vec = Vec::from(&v[..]); + vec + }); +} + +#[bench] +fn bench_extend_from_slice_vec(b: &mut Bencher) { + let v: Vec = (0..100).collect(); + b.iter(|| { + let mut vec: Vec = Vec::with_capacity(16); + vec.extend_from_slice(&v); + vec + }); +} + +#[bench] +fn bench_pushpop_vec(b: &mut Bencher) { + #[inline(never)] + fn pushpop_noinline(vec: &mut Vec, x: u64) { + vec.push(x); + vec.pop(); + } + + b.iter(|| { + let mut vec: Vec = Vec::with_capacity(16); + for x in 0..100 { + pushpop_noinline(&mut vec, x); + } + vec + }); +} + +#[bench] +fn bench_macro_from_elem_vec(b: &mut Bencher) { + b.iter(|| { + let vec: Vec = vec![42; 100]; + vec + }); +} + +#[bench] +fn bench_macro_from_list_vec(b: &mut Bencher) { + b.iter(|| { + let vec: Vec = vec![ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 24, 32, 36, 0x40, 0x80, + 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000, 0x40000, + 0x80000, 0x100000 + ]; + vec + }); +}