Skip to content

Commit 723dcdf

Browse files
committed
add benchmarks for drain and splice
This shows that splice has to be optimized
1 parent c5e3081 commit 723dcdf

2 files changed

Lines changed: 94 additions & 0 deletions

File tree

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ default = ["std", "atomic_append"]
1616
std = []
1717
atomic_append = []
1818

19+
[dev-dependencies]
20+
xmacro = "0.2.0"

benches/compare_std_vec.rs

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,95 @@ fn test_regular_vec_create(b: &mut Bencher) {
126126
// acc
127127
// });
128128
// }
129+
130+
#[cfg(feature = "std")]
131+
mod stdbench {
132+
use super::*;
133+
use std::ops::{Range, RangeBounds};
134+
use xmacro::xmacro;
135+
136+
xmacro! {
137+
$[
138+
benchfunc: type:
139+
hv_drain_bench (HeaderVec::<(), _>)
140+
vec_drain_bench (Vec)
141+
]
142+
143+
fn $benchfunc<T, R>(b: &mut Bencher, init: &[T], range: R)
144+
where
145+
T: Clone + Default,
146+
R: RangeBounds<usize> + Clone,
147+
{
148+
b.iter(|| {
149+
let mut v = $type::from(init);
150+
v.drain(range.clone());
151+
v
152+
});
153+
}
154+
}
155+
156+
xmacro! {
157+
$[
158+
bench: init: range:
159+
middle [123; 1000] (100..500)
160+
begin [123; 1000] (..500)
161+
end [123; 1000] (100..)
162+
]
163+
164+
#[bench]
165+
fn $+test_hv_drain_$bench(b: &mut Bencher) {
166+
hv_drain_bench(b, &$init, $range);
167+
}
168+
169+
#[bench]
170+
fn $+test_vec_drain_$bench(b: &mut Bencher) {
171+
vec_drain_bench(b, &$init, $range);
172+
}
173+
}
174+
175+
xmacro! {
176+
$[
177+
benchfunc: type:
178+
hv_splice_bench (HeaderVec::<(), _>)
179+
vec_splice_bench (Vec)
180+
]
181+
182+
fn $benchfunc<T, R, I>(b: &mut Bencher, init: &[T], range: R, replace_with: I)
183+
where
184+
T: Clone + Default,
185+
R: RangeBounds<usize> + Clone,
186+
I: IntoIterator<Item = T> + Clone,
187+
{
188+
b.iter(|| {
189+
let mut v = $type::from(init);
190+
v.splice(range.clone(), replace_with.clone());
191+
v
192+
});
193+
}
194+
}
195+
196+
xmacro! {
197+
$[
198+
bench: init: range: replace_with:
199+
nop [123; 1000] (0..0) []
200+
insert [123; 1000] (100..100) [123;500]
201+
remove [123; 1000] (100..600) []
202+
middle_shorter [123; 1000] (400..500) [234;50]
203+
middle_longer [123; 1000] (400..500) [345;200]
204+
middle_same [123; 1000] (400..500) [456;100]
205+
end_shorter [123; 1000] (900..) [234;50]
206+
end_longer [123; 1000] (900..) [345;200]
207+
end_same [123; 1000] (900..) [456;100]
208+
]
209+
210+
#[bench]
211+
fn $+test_hv_splice_$bench(b: &mut Bencher) {
212+
hv_splice_bench(b, &$init, $range, $replace_with)
213+
}
214+
215+
#[bench]
216+
fn $+test_vec_splice_$bench(b: &mut Bencher) {
217+
vec_splice_bench(b, &$init, $range, $replace_with)
218+
}
219+
}
220+
}

0 commit comments

Comments
 (0)