1
+ #![ feature( map_first_last) ]
2
+
1
3
pub mod stats;
2
4
use stats:: SampleStatistics ;
3
5
@@ -26,6 +28,19 @@ fn btree_take_next_back(s: &mut BTreeSet<i32>) -> Option<i32> {
26
28
s. take ( & elt)
27
29
}
28
30
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
+
29
44
fn hash_take_next ( s : & mut HashSet < i32 > ) -> Option < i32 > {
30
45
let elt = s. iter ( ) . next ( ) . copied ( ) ?;
31
46
s. take ( & elt)
@@ -86,9 +101,12 @@ macro_rules! bench_set {
86
101
} ;
87
102
}
88
103
89
- bench_set ! ( bench_btree_take_next_back, btree_take_next_back, BTreeSet ) ;
90
104
bench_set ! ( bench_btree_remove_next, btree_remove_next, BTreeSet ) ;
91
105
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 ) ;
92
110
bench_set ! ( bench_hash_remove_next, hash_remove_next, HashSet ) ;
93
111
bench_set ! ( bench_hash_take_next, hash_take_next, HashSet ) ;
94
112
bench_set ! ( bench_hash_retain, hash_retain, HashSet ) ;
@@ -103,6 +121,9 @@ fn main() {
103
121
bench_btree_remove_next ( & mut stats, n) ;
104
122
bench_btree_take_next ( & mut stats, n) ;
105
123
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) ;
106
127
bench_hash_remove_next ( & mut stats, n) ;
107
128
bench_hash_take_next ( & mut stats, n) ;
108
129
if n <= 50_000 {
@@ -113,11 +134,17 @@ fn main() {
113
134
bench_btree_remove_next ( & mut stats, n) ;
114
135
bench_btree_take_next ( & mut stats, n) ;
115
136
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) ;
116
140
}
117
141
for n in ( 1_000_000 ..=5_000_000 ) . step_by ( 1_000_000 ) {
118
142
bench_btree_remove_next ( & mut stats, n) ;
119
143
bench_btree_take_next ( & mut stats, n) ;
120
144
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) ;
121
148
}
122
149
}
123
150
println ! ( " done!" ) ;
0 commit comments