@@ -50,43 +50,112 @@ macro_rules! set_bench {
5050 } ;
5151}
5252
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+ }
5458
5559#[ 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 ( ) )
5863}
5964
6065#[ 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 ( ) )
6369}
6470
6571#[ 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+ } ) ;
6879}
6980
7081#[ 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 ) ;
7284 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
7690 } ) ;
7791}
7892
7993#[ 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 ) ;
8196 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 ) ;
85100 }
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
87143 } ) ;
88144}
89145
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+
90159set_bench ! { intersection_100_neg_vs_100_pos, intersection, count, [ neg( 100 ) , pos( 100 ) ] }
91160set_bench ! { intersection_100_neg_vs_10k_pos, intersection, count, [ neg( 100 ) , pos( 10_000 ) ] }
92161set_bench ! { intersection_100_pos_vs_100_neg, intersection, count, [ pos( 100 ) , neg( 100 ) ] }
0 commit comments