1
- #![ feature( test) ]
2
- extern crate test;
3
1
extern crate memmap;
4
2
extern crate mmap_bitvec;
3
+ extern crate criterion;
5
4
6
5
use std:: fs:: OpenOptions ;
7
6
use std:: mem:: transmute;
@@ -10,6 +9,8 @@ use std::ops::Range;
10
9
use memmap:: { MmapMut , MmapOptions } ;
11
10
use mmap_bitvec:: { BitVector , MmapBitVec } ;
12
11
12
+ use criterion:: { black_box, criterion_group, criterion_main, Criterion } ;
13
+
13
14
type BitVecSlice = u64 ;
14
15
const BIT_VEC_SLICE_SIZE : u8 = 64 ;
15
16
const FILENAME : & str = "./bfield.mmap" ;
@@ -102,8 +103,7 @@ fn get_range(mmap: &MmapMut, size: usize, r: Range<usize>) -> BitVecSlice {
102
103
v & ( BitVecSlice :: max_value ( ) >> ( BIT_VEC_SLICE_SIZE - new_size) )
103
104
}
104
105
105
- #[ bench]
106
- fn bench_get_range_simplified ( bench : & mut test:: Bencher ) {
106
+ fn bench_get_range_simplified ( ) {
107
107
let file = OpenOptions :: new ( )
108
108
. read ( true )
109
109
. write ( true )
@@ -114,17 +114,14 @@ fn bench_get_range_simplified(bench: &mut test::Bencher) {
114
114
115
115
let mut r = 0 ;
116
116
let mut i = 1 ;
117
- bench. iter ( || {
118
- for _ in 0 ..100000 {
119
- let l = i % ( size - 64 ) ;
120
- r += get_range_simplified ( & mmap, size, l) . count_ones ( ) ;
121
- i = next_random ( i) ;
122
- }
123
- } )
117
+ for _ in 0 ..100000 {
118
+ let l = i % ( size - 64 ) ;
119
+ r += get_range_simplified ( & mmap, size, l) . count_ones ( ) ;
120
+ i = next_random ( i) ;
121
+ }
124
122
}
125
123
126
- #[ bench]
127
- fn bench_get_range ( bench : & mut test:: Bencher ) {
124
+ fn bench_get_range ( ) {
128
125
let file = OpenOptions :: new ( )
129
126
. read ( true )
130
127
. write ( true )
@@ -135,25 +132,29 @@ fn bench_get_range(bench: &mut test::Bencher) {
135
132
136
133
let mut r = 0 ;
137
134
let mut i = 1 ;
138
- bench. iter ( || {
139
- for _ in 0 ..100000 {
140
- let l = i % ( size - 64 ) ;
141
- r += get_range ( & mmap, size, l..l + 64 ) . count_ones ( ) ;
142
- i = next_random ( i) ;
143
- }
144
- } )
135
+ for _ in 0 ..100000 {
136
+ let l = i % ( size - 64 ) ;
137
+ r += get_range ( & mmap, size, l..l + 64 ) . count_ones ( ) ;
138
+ i = next_random ( i) ;
139
+ }
145
140
}
146
141
147
- #[ bench]
148
- fn bench_get_range_actual ( bench : & mut test:: Bencher ) {
142
+ fn bench_get_range_actual ( ) {
149
143
let bitvec = MmapBitVec :: open_no_header ( FILENAME , 0 ) . unwrap ( ) ;
150
144
let mut r = 0 ;
151
145
let mut i = 1 ;
152
- bench. iter ( || {
153
- for _ in 0 ..100000 {
154
- let l = i % ( bitvec. size ( ) - 64 ) ;
155
- r += bitvec. get_range ( l..l + 64 ) . count_ones ( ) ;
156
- i = next_random ( i) ;
157
- }
158
- } )
146
+ for _ in 0 ..100000 {
147
+ let l = i % ( bitvec. size ( ) - 64 ) ;
148
+ r += bitvec. get_range ( l..l + 64 ) . count_ones ( ) ;
149
+ i = next_random ( i) ;
150
+ }
159
151
}
152
+
153
+ fn criterion_benchmark ( c : & mut Criterion ) {
154
+ c. bench_function ( "get_range_actual" , |b| b. iter ( || bench_get_range_actual ( ) ) ) ;
155
+ c. bench_function ( "get_range_simplified" , |b| b. iter ( || bench_get_range_simplified ( ) ) ) ;
156
+ c. bench_function ( "get_range" , |b| b. iter ( || bench_get_range ( ) ) ) ;
157
+ }
158
+
159
+ criterion_group ! ( benches, criterion_benchmark) ;
160
+ criterion_main ! ( benches) ;
0 commit comments