1 use criterion::{criterion_group, criterion_main, Criterion};
2 use jql::walker;
3 use serde_json::Value;
4
5 const DATA: &str = r#"{
6 "array": [1, 2, 3, 4 , 5 , 6, 7],
7 "flatten-array": [[[[["c", "a", "c"]]]], "g", [[["a", ["t"]]]]],
8 "props": { "a": { "b": { "c" : 777 } } },
9 "nested-filter": [
10 {
11 "laptop": {
12 "brand": "Apple"
13 }
14 },
15 {
16 "laptop": {
17 "brand": "Asus"
18 }
19 }
20 ]
21 }"#;
22
access_properties_benchmark(c: &mut Criterion)23 fn access_properties_benchmark(c: &mut Criterion) {
24 let json: Value = serde_json::from_str(DATA).unwrap();
25 let selector = Some(r#""props"."a"."b"."c""#);
26 c.bench_function("Access properties", move |b| {
27 b.iter(|| walker(&json, selector))
28 });
29 }
30
filter_array_benchmark(c: &mut Criterion)31 fn filter_array_benchmark(c: &mut Criterion) {
32 let json: Value = serde_json::from_str(DATA).unwrap();
33 let selector = Some(r#""nested-filter"|"laptop"|"brand""#);
34 c.bench_function("Filter an array", move |b| {
35 b.iter(|| walker(&json, selector))
36 });
37 }
38
flatten_array_benchmark(c: &mut Criterion)39 fn flatten_array_benchmark(c: &mut Criterion) {
40 let json: Value = serde_json::from_str(DATA).unwrap();
41 let selector = Some(r#".."flatten-array""#);
42 c.bench_function("Flatten an array", move |b| {
43 b.iter(|| walker(&json, selector))
44 });
45 }
46
range_array_benchmark(c: &mut Criterion)47 fn range_array_benchmark(c: &mut Criterion) {
48 let json: Value = serde_json::from_str(DATA).unwrap();
49 let selector = Some(r#""array".[5:3]"#);
50 c.bench_function("Get the range of an array", move |b| {
51 b.iter(|| walker(&json, selector))
52 });
53 }
54
group_benchmark(c: &mut Criterion)55 fn group_benchmark(c: &mut Criterion) {
56 let json: Value = serde_json::from_str(DATA).unwrap();
57 let selector = Some(r#""array","flatten-array","props""#);
58 c.bench_function("Get multiple groups", move |b| {
59 b.iter(|| walker(&json, selector))
60 });
61 }
62
63 criterion_group!(
64 benches,
65 access_properties_benchmark,
66 filter_array_benchmark,
67 flatten_array_benchmark,
68 range_array_benchmark,
69 group_benchmark
70 );
71
72 criterion_main!(benches);
73