@@ -50,43 +50,112 @@ macro_rules! set_bench {
50
50
} ;
51
51
}
52
52
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
+ }
54
58
55
59
#[ 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 ( ) )
58
63
}
59
64
60
65
#[ 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 ( ) )
63
69
}
64
70
65
71
#[ 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
+ } ) ;
68
79
}
69
80
70
81
#[ 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 ) ;
72
84
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
76
90
} ) ;
77
91
}
78
92
79
93
#[ 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 ) ;
81
96
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 ) ;
85
100
}
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
87
143
} ) ;
88
144
}
89
145
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
+
90
159
set_bench ! { intersection_100_neg_vs_100_pos, intersection, count, [ neg( 100 ) , pos( 100 ) ] }
91
160
set_bench ! { intersection_100_neg_vs_10k_pos, intersection, count, [ neg( 100 ) , pos( 10_000 ) ] }
92
161
set_bench ! { intersection_100_pos_vs_100_neg, intersection, count, [ pos( 100 ) , neg( 100 ) ] }
0 commit comments