1 use winnow::combinator::repeat;
2 use winnow::prelude::*;
3 
4 mod parser;
5 mod parser_str;
6 
bench_ini(c: &mut criterion::Criterion)7 fn bench_ini(c: &mut criterion::Criterion) {
8     let str = "[owner]
9 name=John Doe
10 organization=Acme Widgets Inc.
11 
12 [database]
13 server=192.0.2.62
14 port=143
15 file=payroll.dat
16 \0";
17 
18     let mut group = c.benchmark_group("ini");
19     group.throughput(criterion::Throughput::Bytes(str.len() as u64));
20     group.bench_function(criterion::BenchmarkId::new("bytes", str.len()), |b| {
21         b.iter(|| parser::categories.parse_peek(str.as_bytes()).unwrap());
22     });
23     group.bench_function(criterion::BenchmarkId::new("str", str.len()), |b| {
24         b.iter(|| parser_str::categories.parse_peek(str).unwrap())
25     });
26 }
27 
bench_ini_keys_and_values(c: &mut criterion::Criterion)28 fn bench_ini_keys_and_values(c: &mut criterion::Criterion) {
29     let str = "server=192.0.2.62
30 port=143
31 file=payroll.dat
32 \0";
33 
34     fn acc<'s>(i: &mut parser::Stream<'s>) -> PResult<Vec<(&'s str, &'s str)>> {
35         repeat(0.., parser::key_value).parse_next(i)
36     }
37 
38     let mut group = c.benchmark_group("ini keys and values");
39     group.throughput(criterion::Throughput::Bytes(str.len() as u64));
40     group.bench_function(criterion::BenchmarkId::new("bytes", str.len()), |b| {
41         b.iter(|| acc.parse_peek(str.as_bytes()).unwrap());
42     });
43 }
44 
bench_ini_key_value(c: &mut criterion::Criterion)45 fn bench_ini_key_value(c: &mut criterion::Criterion) {
46     let str = "server=192.0.2.62\n";
47 
48     let mut group = c.benchmark_group("ini key value");
49     group.throughput(criterion::Throughput::Bytes(str.len() as u64));
50     group.bench_function(criterion::BenchmarkId::new("bytes", str.len()), |b| {
51         b.iter(|| parser::key_value.parse_peek(str.as_bytes()).unwrap());
52     });
53 }
54 
55 criterion::criterion_group!(
56     benches,
57     bench_ini,
58     bench_ini_keys_and_values,
59     bench_ini_key_value
60 );
61 criterion::criterion_main!(benches);
62