@@ -126,3 +126,95 @@ fn test_regular_vec_create(b: &mut Bencher) {
126126// acc
127127// });
128128// }
129+
130+ #[ cfg( feature = "std" ) ]
131+ mod stdbench {
132+ use super :: * ;
133+ use std:: ops:: { Range , RangeBounds } ;
134+ use xmacro:: xmacro;
135+
136+ xmacro ! {
137+ $[
138+ benchfunc: type :
139+ hv_drain_bench ( HeaderVec :: <( ) , _>)
140+ vec_drain_bench ( Vec )
141+ ]
142+
143+ fn $benchfunc<T , R >( b: & mut Bencher , init: & [ T ] , range: R )
144+ where
145+ T : Clone + Default ,
146+ R : RangeBounds <usize > + Clone ,
147+ {
148+ b. iter( || {
149+ let mut v = $type :: from( init) ;
150+ v. drain( range. clone( ) ) ;
151+ v
152+ } ) ;
153+ }
154+ }
155+
156+ xmacro ! {
157+ $[
158+ bench: init: range:
159+ middle [ 123 ; 1000 ] ( 100 ..500 )
160+ begin [ 123 ; 1000 ] ( ..500 )
161+ end [ 123 ; 1000 ] ( 100 ..)
162+ ]
163+
164+ #[ bench]
165+ fn $+test_hv_drain_$bench( b: & mut Bencher ) {
166+ hv_drain_bench( b, & $init, $range) ;
167+ }
168+
169+ #[ bench]
170+ fn $+test_vec_drain_$bench( b: & mut Bencher ) {
171+ vec_drain_bench( b, & $init, $range) ;
172+ }
173+ }
174+
175+ xmacro ! {
176+ $[
177+ benchfunc: type :
178+ hv_splice_bench ( HeaderVec :: <( ) , _>)
179+ vec_splice_bench ( Vec )
180+ ]
181+
182+ fn $benchfunc<T , R , I >( b: & mut Bencher , init: & [ T ] , range: R , replace_with: I )
183+ where
184+ T : Clone + Default ,
185+ R : RangeBounds <usize > + Clone ,
186+ I : IntoIterator <Item = T > + Clone ,
187+ {
188+ b. iter( || {
189+ let mut v = $type :: from( init) ;
190+ v. splice( range. clone( ) , replace_with. clone( ) ) ;
191+ v
192+ } ) ;
193+ }
194+ }
195+
196+ xmacro ! {
197+ $[
198+ bench: init: range: replace_with:
199+ nop [ 123 ; 1000 ] ( 0 ..0 ) [ ]
200+ insert [ 123 ; 1000 ] ( 100 ..100 ) [ 123 ; 500 ]
201+ remove [ 123 ; 1000 ] ( 100 ..600 ) [ ]
202+ middle_shorter [ 123 ; 1000 ] ( 400 ..500 ) [ 234 ; 50 ]
203+ middle_longer [ 123 ; 1000 ] ( 400 ..500 ) [ 345 ; 200 ]
204+ middle_same [ 123 ; 1000 ] ( 400 ..500 ) [ 456 ; 100 ]
205+ end_shorter [ 123 ; 1000 ] ( 900 ..) [ 234 ; 50 ]
206+ end_longer [ 123 ; 1000 ] ( 900 ..) [ 345 ; 200 ]
207+ end_same [ 123 ; 1000 ] ( 900 ..) [ 456 ; 100 ]
208+ ]
209+
210+ #[ bench]
211+ fn $+test_hv_splice_$bench( b: & mut Bencher ) {
212+ hv_splice_bench( b, & $init, $range, $replace_with)
213+ }
214+
215+ #[ bench]
216+ fn $+test_vec_splice_$bench( b: & mut Bencher ) {
217+ vec_splice_bench( b, & $init, $range, $replace_with)
218+ }
219+ }
220+ }
0 commit comments