Skip to content

Commit b909e09

Browse files
committed
add parse_varint iter benchmark
1 parent 1e38ca6 commit b909e09

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

Diff for: benches/varint_parse.rs

+26-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
extern crate protobuf_iter;
2-
use protobuf_iter::{Packed, PackedVarint};
2+
use protobuf_iter::{Packed, PackedVarint, PackedIter};
33

44
fn parse_varint(data: &[u8]) {
55
let _ = PackedVarint::parse(data).unwrap();
@@ -13,6 +13,31 @@ use criterion::Criterion;
1313
fn criterion_benchmark(c: &mut Criterion) {
1414
c.bench_function("parse_varint 1", |b| b.iter(|| parse_varint(&[0b0000_0001])));
1515
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+
}));
1641
}
1742

1843
criterion_group!(benches, criterion_benchmark);

0 commit comments

Comments
 (0)