Skip to content

Commit b685985

Browse files
committed
Refine and extend benchmarks of mutable BTreeSet methods
1 parent bae3d0d commit b685985

File tree

1 file changed

+85
-16
lines changed
  • src/liballoc/benches/btree

1 file changed

+85
-16
lines changed

src/liballoc/benches/btree/set.rs

+85-16
Original file line numberDiff line numberDiff line change
@@ -50,43 +50,112 @@ macro_rules! set_bench {
5050
};
5151
}
5252

53-
const BUILD_SET_SIZE: usize = 100;
53+
#[bench]
54+
pub fn clone_100(b: &mut Bencher) {
55+
let src = pos(100);
56+
b.iter(|| src.clone())
57+
}
5458

5559
#[bench]
56-
pub fn build_and_clear(b: &mut Bencher) {
57-
b.iter(|| pos(BUILD_SET_SIZE).clear())
60+
pub fn clone_100_and_clear(b: &mut Bencher) {
61+
let src = pos(100);
62+
b.iter(|| src.clone().clear())
5863
}
5964

6065
#[bench]
61-
pub fn build_and_drop(b: &mut Bencher) {
62-
b.iter(|| pos(BUILD_SET_SIZE))
66+
pub fn clone_100_and_into_iter(b: &mut Bencher) {
67+
let src = pos(100);
68+
b.iter(|| src.clone().into_iter().count())
6369
}
6470

6571
#[bench]
66-
pub fn build_and_into_iter(b: &mut Bencher) {
67-
b.iter(|| pos(BUILD_SET_SIZE).into_iter().count())
72+
pub fn clone_100_and_pop_all(b: &mut Bencher) {
73+
let src = pos(100);
74+
b.iter(|| {
75+
let mut set = src.clone();
76+
while set.pop_first().is_some() {}
77+
set
78+
});
6879
}
6980

7081
#[bench]
71-
pub fn build_and_pop_all(b: &mut Bencher) {
82+
pub fn clone_100_and_remove_all(b: &mut Bencher) {
83+
let src = pos(100);
7284
b.iter(|| {
73-
let mut s = pos(BUILD_SET_SIZE);
74-
while s.pop_first().is_some() {}
75-
s
85+
let mut set = src.clone();
86+
while let Some(elt) = set.iter().copied().next() {
87+
set.remove(&elt);
88+
}
89+
set
7690
});
7791
}
7892

7993
#[bench]
80-
pub fn build_and_remove_all(b: &mut Bencher) {
94+
pub fn clone_100_and_remove_half(b: &mut Bencher) {
95+
let src = pos(100);
8196
b.iter(|| {
82-
let mut s = pos(BUILD_SET_SIZE);
83-
while let Some(elt) = s.iter().copied().next() {
84-
s.remove(&elt);
97+
let mut set = src.clone();
98+
for i in (2..=100 as i32).step_by(2) {
99+
set.remove(&i);
85100
}
86-
s
101+
assert_eq!(set.len(), 100 / 2);
102+
set
103+
})
104+
}
105+
106+
#[bench]
107+
pub fn clone_10k(b: &mut Bencher) {
108+
let src = pos(10_000);
109+
b.iter(|| src.clone())
110+
}
111+
112+
#[bench]
113+
pub fn clone_10k_and_clear(b: &mut Bencher) {
114+
let src = pos(10_000);
115+
b.iter(|| src.clone().clear())
116+
}
117+
118+
#[bench]
119+
pub fn clone_10k_and_into_iter(b: &mut Bencher) {
120+
let src = pos(10_000);
121+
b.iter(|| src.clone().into_iter().count())
122+
}
123+
124+
#[bench]
125+
pub fn clone_10k_and_pop_all(b: &mut Bencher) {
126+
let src = pos(10_000);
127+
b.iter(|| {
128+
let mut set = src.clone();
129+
while set.pop_first().is_some() {}
130+
set
131+
});
132+
}
133+
134+
#[bench]
135+
pub fn clone_10k_and_remove_all(b: &mut Bencher) {
136+
let src = pos(10_000);
137+
b.iter(|| {
138+
let mut set = src.clone();
139+
while let Some(elt) = set.iter().copied().next() {
140+
set.remove(&elt);
141+
}
142+
set
87143
});
88144
}
89145

146+
#[bench]
147+
pub fn clone_10k_and_remove_half(b: &mut Bencher) {
148+
let src = pos(10_000);
149+
b.iter(|| {
150+
let mut set = src.clone();
151+
for i in (2..=10_000 as i32).step_by(2) {
152+
set.remove(&i);
153+
}
154+
assert_eq!(set.len(), 10_000 / 2);
155+
set
156+
})
157+
}
158+
90159
set_bench! {intersection_100_neg_vs_100_pos, intersection, count, [neg(100), pos(100)]}
91160
set_bench! {intersection_100_neg_vs_10k_pos, intersection, count, [neg(100), pos(10_000)]}
92161
set_bench! {intersection_100_pos_vs_100_neg, intersection, count, [pos(100), neg(100)]}

0 commit comments

Comments
 (0)