@@ -14,19 +14,13 @@ fn random(n: usize) -> BTreeSet<usize> {
14
14
}
15
15
16
16
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 ( ) ;
21
18
assert_eq ! ( set. len( ) , n) ;
22
19
set
23
20
}
24
21
25
22
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 ( ) ;
30
24
assert_eq ! ( set. len( ) , n) ;
31
25
set
32
26
}
@@ -56,6 +50,54 @@ macro_rules! set_bench {
56
50
} ;
57
51
}
58
52
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_drain ( b : & mut Bencher ) {
62
+ b. iter ( || pos ( BUILD_SET_SIZE ) . drain ( ) . count ( ) )
63
+ }
64
+
65
+ #[ bench]
66
+ pub fn build_and_drop ( b : & mut Bencher ) {
67
+ b. iter ( || pos ( BUILD_SET_SIZE ) )
68
+ }
69
+
70
+ #[ bench]
71
+ pub fn build_and_into_iter ( b : & mut Bencher ) {
72
+ b. iter ( || pos ( BUILD_SET_SIZE ) . into_iter ( ) . count ( ) )
73
+ }
74
+
75
+ #[ bench]
76
+ pub fn build_and_pop_all ( b : & mut Bencher ) {
77
+ b. iter ( || {
78
+ let mut s = pos ( BUILD_SET_SIZE ) ;
79
+ while s. pop_first ( ) . is_some ( ) {
80
+ }
81
+ s
82
+ } ) ;
83
+ }
84
+
85
+ #[ bench]
86
+ pub fn build_and_remove_all ( b : & mut Bencher ) {
87
+ b. iter ( || {
88
+ let mut s = pos ( BUILD_SET_SIZE ) ;
89
+ while let Some ( elt) = s. iter ( ) . copied ( ) . next ( ) {
90
+ s. remove ( & elt) ;
91
+ }
92
+ s
93
+ } ) ;
94
+ }
95
+
96
+ #[ bench]
97
+ pub fn build_and_retain_nothing ( b : & mut Bencher ) {
98
+ b. iter ( || pos ( BUILD_SET_SIZE ) . retain ( |_| false ) )
99
+ }
100
+
59
101
set_bench ! { intersection_100_neg_vs_100_pos, intersection, count, [ neg( 100 ) , pos( 100 ) ] }
60
102
set_bench ! { intersection_100_neg_vs_10k_pos, intersection, count, [ neg( 100 ) , pos( 10_000 ) ] }
61
103
set_bench ! { intersection_100_pos_vs_100_neg, intersection, count, [ pos( 100 ) , neg( 100 ) ] }
0 commit comments