Skip to content

Commit 3dcdecc

Browse files
committed
add Rust new alternatives using rust-lang/rust#65637
1 parent fe2fe18 commit 3dcdecc

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

src/main.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![feature(map_first_last)]
2+
13
pub mod stats;
24
use stats::SampleStatistics;
35

@@ -26,6 +28,19 @@ fn btree_take_next_back(s: &mut BTreeSet<i32>) -> Option<i32> {
2628
s.take(&elt)
2729
}
2830

31+
fn btree_take_first(s: &mut BTreeSet<i32>) -> Option<i32> {
32+
let elt = s.first().copied();
33+
elt.and_then(|e| s.take(&e))
34+
}
35+
36+
fn btree_pop_first(s: &mut BTreeSet<i32>) -> Option<i32> {
37+
s.pop_first()
38+
}
39+
40+
fn btree_pop_last(s: &mut BTreeSet<i32>) -> Option<i32> {
41+
s.pop_last()
42+
}
43+
2944
fn hash_take_next(s: &mut HashSet<i32>) -> Option<i32> {
3045
let elt = s.iter().next().copied()?;
3146
s.take(&elt)
@@ -86,9 +101,12 @@ macro_rules! bench_set {
86101
};
87102
}
88103

89-
bench_set!(bench_btree_take_next_back, btree_take_next_back, BTreeSet);
90104
bench_set!(bench_btree_remove_next, btree_remove_next, BTreeSet);
91105
bench_set!(bench_btree_take_next, btree_take_next, BTreeSet);
106+
bench_set!(bench_btree_take_next_back, btree_take_next_back, BTreeSet);
107+
bench_set!(bench_btree_take_first, btree_take_first, BTreeSet);
108+
bench_set!(bench_btree_pop_first, btree_pop_first, BTreeSet);
109+
bench_set!(bench_btree_pop_last, btree_pop_last, BTreeSet);
92110
bench_set!(bench_hash_remove_next, hash_remove_next, HashSet);
93111
bench_set!(bench_hash_take_next, hash_take_next, HashSet);
94112
bench_set!(bench_hash_retain, hash_retain, HashSet);
@@ -103,6 +121,9 @@ fn main() {
103121
bench_btree_remove_next(&mut stats, n);
104122
bench_btree_take_next(&mut stats, n);
105123
bench_btree_take_next_back(&mut stats, n);
124+
bench_btree_take_first(&mut stats, n);
125+
bench_btree_pop_first(&mut stats, n);
126+
bench_btree_pop_last(&mut stats, n);
106127
bench_hash_remove_next(&mut stats, n);
107128
bench_hash_take_next(&mut stats, n);
108129
if n <= 50_000 {
@@ -113,11 +134,17 @@ fn main() {
113134
bench_btree_remove_next(&mut stats, n);
114135
bench_btree_take_next(&mut stats, n);
115136
bench_btree_take_next_back(&mut stats, n);
137+
bench_btree_take_first(&mut stats, n);
138+
bench_btree_pop_first(&mut stats, n);
139+
bench_btree_pop_last(&mut stats, n);
116140
}
117141
for n in (1_000_000..=5_000_000).step_by(1_000_000) {
118142
bench_btree_remove_next(&mut stats, n);
119143
bench_btree_take_next(&mut stats, n);
120144
bench_btree_take_next_back(&mut stats, n);
145+
bench_btree_take_first(&mut stats, n);
146+
bench_btree_pop_first(&mut stats, n);
147+
bench_btree_pop_last(&mut stats, n);
121148
}
122149
}
123150
println!(" done!");

0 commit comments

Comments
 (0)