diff options
| author | Stein Somers <git@steinsomers.be> | 2020-02-03 12:50:49 +0100 |
|---|---|---|
| committer | Stein Somers <git@steinsomers.be> | 2020-02-08 11:10:05 +0100 |
| commit | b685985ea40ab1faa8cb888bf001779e44a8c716 (patch) | |
| tree | 6c66c737be29d2f075129e20ef4aef9a6f35e39a | |
| parent | bae3d0dfc716ccbe511455275b77ccb3b5b8437b (diff) | |
| download | rust-b685985ea40ab1faa8cb888bf001779e44a8c716.tar.gz rust-b685985ea40ab1faa8cb888bf001779e44a8c716.zip | |
Refine and extend benchmarks of mutable BTreeSet methods
| -rw-r--r-- | src/liballoc/benches/btree/set.rs | 101 |
1 files changed, 85 insertions, 16 deletions
diff --git a/src/liballoc/benches/btree/set.rs b/src/liballoc/benches/btree/set.rs index d7c1d95a452..d9e75ab7fa4 100644 --- a/src/liballoc/benches/btree/set.rs +++ b/src/liballoc/benches/btree/set.rs @@ -50,43 +50,112 @@ macro_rules! set_bench { }; } -const BUILD_SET_SIZE: usize = 100; +#[bench] +pub fn clone_100(b: &mut Bencher) { + let src = pos(100); + b.iter(|| src.clone()) +} #[bench] -pub fn build_and_clear(b: &mut Bencher) { - b.iter(|| pos(BUILD_SET_SIZE).clear()) +pub fn clone_100_and_clear(b: &mut Bencher) { + let src = pos(100); + b.iter(|| src.clone().clear()) } #[bench] -pub fn build_and_drop(b: &mut Bencher) { - b.iter(|| pos(BUILD_SET_SIZE)) +pub fn clone_100_and_into_iter(b: &mut Bencher) { + let src = pos(100); + b.iter(|| src.clone().into_iter().count()) } #[bench] -pub fn build_and_into_iter(b: &mut Bencher) { - b.iter(|| pos(BUILD_SET_SIZE).into_iter().count()) +pub fn clone_100_and_pop_all(b: &mut Bencher) { + let src = pos(100); + b.iter(|| { + let mut set = src.clone(); + while set.pop_first().is_some() {} + set + }); } #[bench] -pub fn build_and_pop_all(b: &mut Bencher) { +pub fn clone_100_and_remove_all(b: &mut Bencher) { + let src = pos(100); b.iter(|| { - let mut s = pos(BUILD_SET_SIZE); - while s.pop_first().is_some() {} - s + let mut set = src.clone(); + while let Some(elt) = set.iter().copied().next() { + set.remove(&elt); + } + set }); } #[bench] -pub fn build_and_remove_all(b: &mut Bencher) { +pub fn clone_100_and_remove_half(b: &mut Bencher) { + let src = pos(100); b.iter(|| { - let mut s = pos(BUILD_SET_SIZE); - while let Some(elt) = s.iter().copied().next() { - s.remove(&elt); + let mut set = src.clone(); + for i in (2..=100 as i32).step_by(2) { + set.remove(&i); } - s + assert_eq!(set.len(), 100 / 2); + set + }) +} + +#[bench] +pub fn clone_10k(b: &mut Bencher) { + let src = pos(10_000); + b.iter(|| src.clone()) +} + +#[bench] +pub fn clone_10k_and_clear(b: &mut Bencher) { + let src = pos(10_000); + b.iter(|| src.clone().clear()) +} + +#[bench] +pub fn clone_10k_and_into_iter(b: &mut Bencher) { + let src = pos(10_000); + b.iter(|| src.clone().into_iter().count()) +} + +#[bench] +pub fn clone_10k_and_pop_all(b: &mut Bencher) { + let src = pos(10_000); + b.iter(|| { + let mut set = src.clone(); + while set.pop_first().is_some() {} + set + }); +} + +#[bench] +pub fn clone_10k_and_remove_all(b: &mut Bencher) { + let src = pos(10_000); + b.iter(|| { + let mut set = src.clone(); + while let Some(elt) = set.iter().copied().next() { + set.remove(&elt); + } + set }); } +#[bench] +pub fn clone_10k_and_remove_half(b: &mut Bencher) { + let src = pos(10_000); + b.iter(|| { + let mut set = src.clone(); + for i in (2..=10_000 as i32).step_by(2) { + set.remove(&i); + } + assert_eq!(set.len(), 10_000 / 2); + set + }) +} + set_bench! {intersection_100_neg_vs_100_pos, intersection, count, [neg(100), pos(100)]} set_bench! {intersection_100_neg_vs_10k_pos, intersection, count, [neg(100), pos(10_000)]} set_bench! {intersection_100_pos_vs_100_neg, intersection, count, [pos(100), neg(100)]} |
