]>
Commit | Line | Data |
---|---|---|
add651ee | 1 | use winnow::prelude::*; |
49aad941 FG |
2 | use winnow::Partial; |
3 | ||
4 | mod json; | |
5 | mod parser; | |
6 | mod parser_dispatch; | |
7 | mod parser_partial; | |
8 | ||
9 | fn 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 | ||
61 | const SMALL: &str = " { \"a\"\t: 42, | |
62 | \"b\": [ \"x\", \"y\", 12 ,\"\\u2014\", \"\\uD83D\\uDE10\"] , | |
63 | \"c\": { \"hello\" : \"world\" | |
64 | } | |
65 | } "; | |
66 | ||
67 | const CANADA: &str = include_str!("../../third_party/nativejson-benchmark/data/canada.json"); | |
68 | ||
69 | criterion::criterion_group!(benches, json_bench,); | |
70 | criterion::criterion_main!(benches); |