Skip to content

Commit 3ada8ae

Browse files
committed
Add more BTreeMap/BTreeSet benchmarks regarding iteration
1 parent 59c1db0 commit 3ada8ae

File tree

2 files changed

+69
-8
lines changed

2 files changed

+69
-8
lines changed

src/liballoc/benches/btree/map.rs

+30
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,36 @@ pub fn iter_100000(b: &mut Bencher) {
146146
bench_iter(b, 100000);
147147
}
148148

149+
fn bench_iter_mut(b: &mut Bencher, size: i32) {
150+
let mut map = BTreeMap::<i32, i32>::new();
151+
let mut rng = thread_rng();
152+
153+
for _ in 0..size {
154+
map.insert(rng.gen(), rng.gen());
155+
}
156+
157+
b.iter(|| {
158+
for kv in map.iter_mut() {
159+
black_box(kv);
160+
}
161+
});
162+
}
163+
164+
#[bench]
165+
pub fn iter_mut_20(b: &mut Bencher) {
166+
bench_iter_mut(b, 20);
167+
}
168+
169+
#[bench]
170+
pub fn iter_mut_1000(b: &mut Bencher) {
171+
bench_iter_mut(b, 1000);
172+
}
173+
174+
#[bench]
175+
pub fn iter_mut_100000(b: &mut Bencher) {
176+
bench_iter_mut(b, 100000);
177+
}
178+
149179
fn bench_first_and_last(b: &mut Bencher, size: i32) {
150180
let map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();
151181
b.iter(|| {

src/liballoc/benches/btree/set.rs

+39-8
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,13 @@ fn random(n: usize) -> BTreeSet<usize> {
1414
}
1515

1616
fn neg(n: usize) -> BTreeSet<i32> {
17-
let mut set = BTreeSet::new();
18-
for i in -(n as i32)..=-1 {
19-
set.insert(i);
20-
}
17+
let set: BTreeSet<i32> = (-(n as i32)..=-1).collect();
2118
assert_eq!(set.len(), n);
2219
set
2320
}
2421

2522
fn pos(n: usize) -> BTreeSet<i32> {
26-
let mut set = BTreeSet::new();
27-
for i in 1..=(n as i32) {
28-
set.insert(i);
29-
}
23+
let set: BTreeSet<i32> = (1..=(n as i32)).collect();
3024
assert_eq!(set.len(), n);
3125
set
3226
}
@@ -56,6 +50,43 @@ macro_rules! set_bench {
5650
};
5751
}
5852

53+
const BUILD_SET_SIZE: usize = 100;
54+
55+
#[bench]
56+
pub fn build_and_clear(b: &mut Bencher) {
57+
b.iter(|| pos(BUILD_SET_SIZE).clear())
58+
}
59+
60+
#[bench]
61+
pub fn build_and_drop(b: &mut Bencher) {
62+
b.iter(|| pos(BUILD_SET_SIZE))
63+
}
64+
65+
#[bench]
66+
pub fn build_and_into_iter(b: &mut Bencher) {
67+
b.iter(|| pos(BUILD_SET_SIZE).into_iter().count())
68+
}
69+
70+
#[bench]
71+
pub fn build_and_pop_all(b: &mut Bencher) {
72+
b.iter(|| {
73+
let mut s = pos(BUILD_SET_SIZE);
74+
while s.pop_first().is_some() {}
75+
s
76+
});
77+
}
78+
79+
#[bench]
80+
pub fn build_and_remove_all(b: &mut Bencher) {
81+
b.iter(|| {
82+
let mut s = pos(BUILD_SET_SIZE);
83+
while let Some(elt) = s.iter().copied().next() {
84+
s.remove(&elt);
85+
}
86+
s
87+
});
88+
}
89+
5990
set_bench! {intersection_100_neg_vs_100_pos, intersection, count, [neg(100), pos(100)]}
6091
set_bench! {intersection_100_neg_vs_10k_pos, intersection, count, [neg(100), pos(10_000)]}
6192
set_bench! {intersection_100_pos_vs_100_neg, intersection, count, [pos(100), neg(100)]}

0 commit comments

Comments
 (0)