@@ -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,43 @@ 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_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
+
59
90
set_bench ! { intersection_100_neg_vs_100_pos, intersection, count, [ neg( 100 ) , pos( 100 ) ] }
60
91
set_bench ! { intersection_100_neg_vs_10k_pos, intersection, count, [ neg( 100 ) , pos( 10_000 ) ] }
61
92
set_bench ! { intersection_100_pos_vs_100_neg, intersection, count, [ pos( 100 ) , neg( 100 ) ] }
0 commit comments