]> git.proxmox.com Git - rustc.git/blame - vendor/winnow/examples/json/bench.rs
New upstream version 1.73.0+dfsg1
[rustc.git] / vendor / winnow / examples / json / bench.rs
CommitLineData
add651ee 1use winnow::prelude::*;
49aad941
FG
2use winnow::Partial;
3
4mod json;
5mod parser;
6mod parser_dispatch;
7mod parser_partial;
8
9fn json_bench(c: &mut criterion::Criterion) {
10 let data = [("small", SMALL), ("canada", CANADA)];
11 let mut group = c.benchmark_group("json");
12 for (name, sample) in data {
13 let len = sample.len();
14 group.throughput(criterion::Throughput::Bytes(len as u64));
15
16 group.bench_with_input(criterion::BenchmarkId::new("basic", name), &len, |b, _| {
add651ee 17 type Error<'i> = winnow::error::InputError<parser::Stream<'i>>;
49aad941 18
add651ee
FG
19 b.iter(|| parser::json::<Error>.parse_peek(sample).unwrap());
20 });
21 group.bench_with_input(criterion::BenchmarkId::new("unit", name), &len, |b, _| {
22 type Error<'i> = ();
23
24 b.iter(|| parser::json::<Error>.parse_peek(sample).unwrap());
49aad941
FG
25 });
26 group.bench_with_input(
add651ee 27 criterion::BenchmarkId::new("context", name),
49aad941
FG
28 &len,
29 |b, _| {
add651ee 30 type Error<'i> = winnow::error::ContextError<parser::Stream<'i>>;
49aad941 31
add651ee 32 b.iter(|| parser::json::<Error>.parse_peek(sample).unwrap());
49aad941
FG
33 },
34 );
35 group.bench_with_input(
36 criterion::BenchmarkId::new("dispatch", name),
37 &len,
38 |b, _| {
add651ee 39 type Error<'i> = winnow::error::InputError<parser_dispatch::Stream<'i>>;
49aad941 40
add651ee 41 b.iter(|| parser_dispatch::json::<Error>.parse_peek(sample).unwrap());
49aad941
FG
42 },
43 );
44 group.bench_with_input(
45 criterion::BenchmarkId::new("streaming", name),
46 &len,
47 |b, _| {
add651ee 48 type Error<'i> = winnow::error::InputError<parser_partial::Stream<'i>>;
49aad941 49
add651ee
FG
50 b.iter(|| {
51 parser_partial::json::<Error>
52 .parse_peek(Partial::new(sample))
53 .unwrap()
54 });
49aad941
FG
55 },
56 );
57 }
58 group.finish();
59}
60
61const SMALL: &str = " { \"a\"\t: 42,
62 \"b\": [ \"x\", \"y\", 12 ,\"\\u2014\", \"\\uD83D\\uDE10\"] ,
63 \"c\": { \"hello\" : \"world\"
64 }
65 } ";
66
67const CANADA: &str = include_str!("../../third_party/nativejson-benchmark/data/canada.json");
68
69criterion::criterion_group!(benches, json_bench,);
70criterion::criterion_main!(benches);