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