File tree 1 file changed +26
-1
lines changed
1 file changed +26
-1
lines changed Original file line number Diff line number Diff line change 1
1
extern crate protobuf_iter;
2
- use protobuf_iter:: { Packed , PackedVarint } ;
2
+ use protobuf_iter:: { Packed , PackedVarint , PackedIter } ;
3
3
4
4
fn parse_varint ( data : & [ u8 ] ) {
5
5
let _ = PackedVarint :: parse ( data) . unwrap ( ) ;
@@ -13,6 +13,31 @@ use criterion::Criterion;
13
13
fn criterion_benchmark ( c : & mut Criterion ) {
14
14
c. bench_function ( "parse_varint 1" , |b| b. iter ( || parse_varint ( & [ 0b0000_0001 ] ) ) ) ;
15
15
c. bench_function ( "parse_varint 300" , |b| b. iter ( || parse_varint ( & [ 0b1010_1100 , 0b0000_0010 ] ) ) ) ;
16
+
17
+ let mut buf = Vec :: < u8 > :: new ( ) ;
18
+ for i in 0 ..131073u32 {
19
+ let mut n = i;
20
+ let mut bytes = 0 ;
21
+ while bytes < 1 || n != 0 {
22
+ let b = n as u8 & 0b0111_1111 ;
23
+ n >>= 7 ;
24
+ let flag = if n != 0 {
25
+ 0b1000_0000
26
+ } else {
27
+ 0
28
+ } ;
29
+ buf. push ( flag | b) ;
30
+ bytes += 1 ;
31
+ }
32
+ }
33
+ c. bench_function ( "parse_varint iter" , move |b| b. iter (
34
+ || {
35
+ let mut iter: PackedIter < ' _ , PackedVarint , u32 > = PackedIter :: new ( & buf) ;
36
+ for i in 0 ..131073u32 {
37
+ assert_eq ! ( Some ( i) , iter. next( ) ) ;
38
+ }
39
+ assert_eq ! ( None , iter. next( ) ) ;
40
+ } ) ) ;
16
41
}
17
42
18
43
criterion_group ! ( benches, criterion_benchmark) ;
You can’t perform that action at this time.
0 commit comments