11#![ cfg( not( tarpaulin) ) ]
22use criterion:: { black_box, criterion_group, criterion_main, Bencher , Criterion } ;
3- use ringbuffer:: { AllocRingBuffer , ConstGenericRingBuffer , RingBufferExt } ;
3+ use ringbuffer:: { AllocRingBuffer , ConstGenericRingBuffer , RingBufferExt , RingBufferWrite } ;
44
55fn benchmark_push < T : RingBufferExt < i32 > , F : Fn ( ) -> T > ( b : & mut Bencher , new : F ) {
66 b. iter ( || {
77 let mut rb = new ( ) ;
88
99 for i in 0 ..1_000_000 {
10- rb. push ( i)
10+ black_box ( rb. push ( i) ) ;
1111 }
1212
1313 rb
@@ -19,23 +19,23 @@ fn benchmark_push_dequeue<T: RingBufferExt<i32>, F: Fn() -> T>(b: &mut Bencher,
1919 let mut rb = new ( ) ;
2020
2121 for _i in 0 ..100_000 {
22- rb. push ( 1 ) ;
23- rb. push ( 2 ) ;
22+ black_box ( rb. push ( 1 ) ) ;
23+ black_box ( rb. push ( 2 ) ) ;
2424
25- assert_eq ! ( rb. dequeue( ) , Some ( 1 ) ) ;
26- assert_eq ! ( rb. dequeue( ) , Some ( 2 ) ) ;
25+ assert_eq ! ( black_box ( rb. dequeue( ) ) , Some ( 1 ) ) ;
26+ assert_eq ! ( black_box ( rb. dequeue( ) ) , Some ( 2 ) ) ;
2727
28- rb. push ( 1 ) ;
29- rb. push ( 2 ) ;
28+ black_box ( rb. push ( 1 ) ) ;
29+ black_box ( rb. push ( 2 ) ) ;
3030
31- assert_eq ! ( rb. dequeue( ) , Some ( 1 ) ) ;
32- assert_eq ! ( rb. dequeue( ) , Some ( 2 ) ) ;
31+ assert_eq ! ( black_box ( rb. dequeue( ) ) , Some ( 1 ) ) ;
32+ assert_eq ! ( black_box ( rb. dequeue( ) ) , Some ( 2 ) ) ;
3333
34- rb. push ( 1 ) ;
35- rb. push ( 2 ) ;
34+ black_box ( rb. push ( 1 ) ) ;
35+ black_box ( rb. push ( 2 ) ) ;
3636
37- assert_eq ! ( rb. get( -1 ) , Some ( & 2 ) ) ;
38- assert_eq ! ( rb. get( -2 ) , Some ( & 1 ) ) ;
37+ assert_eq ! ( black_box ( rb. get( -1 ) ) , Some ( & 2 ) ) ;
38+ assert_eq ! ( black_box ( rb. get( -2 ) ) , Some ( & 1 ) ) ;
3939 }
4040
4141 rb
@@ -47,7 +47,7 @@ fn benchmark_various<T: RingBufferExt<i32>, F: Fn() -> T>(b: &mut Bencher, new:
4747 let mut rb = new ( ) ;
4848
4949 for i in 0 ..100_000 {
50- rb. push ( i) ;
50+ black_box ( rb. push ( i) ) ;
5151 black_box ( rb. get ( -1 ) ) ;
5252 }
5353
@@ -63,6 +63,13 @@ macro_rules! generate_benches {
6363 } ) ) ;
6464 ) *
6565 } ;
66+ ( non_power_two, $c: tt, $rb: tt, $ty: tt, $fn: tt, $bmfunc: tt, $( $i: tt) ,* ) => {
67+ $(
68+ $c. bench_function( & format!( "{} {} 1M capacity not power of two {}" , stringify!( $rb) , stringify!( $bmfunc) , stringify!( $i) ) , |b| $bmfunc( b, || {
69+ $rb:: <$ty, _>:: $fn( $i)
70+ } ) ) ;
71+ ) *
72+ } ;
6673
6774 ( typed, $c: tt, $rb: tt, $ty: tt, $fn: tt, $bmfunc: tt, $( $i: tt) ,* ) => {
6875 $(
@@ -73,9 +80,19 @@ macro_rules! generate_benches {
7380 } ;
7481}
7582
76- fn criterion_benchmark ( c : & mut Criterion ) {
77- c. with_plots ( ) ;
83+ fn benchmark_non_power_of_two < const L : usize > ( b : & mut Bencher ) {
84+ b. iter ( || {
85+ let mut rb = AllocRingBuffer :: with_capacity_non_power_of_two ( L ) ;
7886
87+ for i in 0 ..1_000_000 {
88+ black_box ( rb. push ( i) ) ;
89+ }
90+
91+ rb
92+ } )
93+ }
94+
95+ fn criterion_benchmark ( c : & mut Criterion ) {
7996 // TODO: Improve benchmarks
8097 // * What are representative operations
8198 // * Make sure it's accurate
@@ -153,6 +170,20 @@ fn criterion_benchmark(c: &mut Criterion) {
153170 4096 ,
154171 8192
155172 ] ;
173+ generate_benches ! [
174+ non_power_two,
175+ c,
176+ AllocRingBuffer ,
177+ i32 ,
178+ with_capacity_non_power_of_two,
179+ benchmark_various,
180+ 16 ,
181+ 17 ,
182+ 1024 ,
183+ 4096 ,
184+ 8192 ,
185+ 8195
186+ ] ;
156187}
157188
158189criterion_group ! ( benches, criterion_benchmark) ;
0 commit comments