Skip to content

Commit

Permalink
add benches for find slicing
Browse files Browse the repository at this point in the history
equal bench with reuse     time:   [510.30 ns 512.16 ns 514.26 ns]
equal bench without reuse  time:   [21.436 µs 21.456 µs 21.479 µs]
regex bench with reuse     time:   [58.875 µs 58.925 µs 58.975 µs]
regex bench without reuse  time:   [85.324 µs 85.416 µs 85.517 µs]
JsonPathInst generation    time:   [23.988 µs 24.019 µs 24.052 µs]
  • Loading branch information
xMAC94x committed May 17, 2024
1 parent 46d145b commit e85553c
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 0 deletions.
9 changes: 9 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,12 @@ thiserror = "1.0.50"

[dev-dependencies]
lazy_static = "1.0"
criterion = "0.5.1"

[[bench]]
name = "regex"
harness = false

[[bench]]
name = "equal"
harness = false
41 changes: 41 additions & 0 deletions benches/equal.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
use criterion::{criterion_group, criterion_main, Criterion};
use jsonpath_rust::{JsonPathInst, JsonPathQuery};
use serde_json::json;
use std::str::FromStr;

struct SearchData {
json: serde_json::Value,
path: JsonPathInst,
}

const PATH: &'static str = "$.[?(@.author == 'abcd(Rees)')]";

fn equal_perf_test_with_reuse(cfg: &SearchData) {
let _v = jsonpath_rust::find(&cfg.path, &cfg.json);
}

fn equal_perf_test_without_reuse() {
let json = Box::new(json!({
"author":"abcd(Rees)",
}));

let _v = json.path(PATH).expect("the path is correct");
}

pub fn criterion_benchmark(c: &mut Criterion) {
let data = SearchData {
json: json!({
"author":"abcd(Rees)",
}),
path: JsonPathInst::from_str(PATH).unwrap(),
};
c.bench_function("equal bench with reuse", |b| {
b.iter(|| equal_perf_test_with_reuse(&data))
});
c.bench_function("equal bench without reuse", |b| {
b.iter(|| equal_perf_test_without_reuse())
});
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);
48 changes: 48 additions & 0 deletions benches/regex.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
use criterion::{criterion_group, criterion_main, Criterion};
use jsonpath_rust::{JsonPathInst, JsonPathQuery};
use serde_json::json;
use std::str::FromStr;

struct SearchData {
json: serde_json::Value,
path: JsonPathInst,
}

const PATH: &'static str = "$.[?(@.author ~= '.*(?i)d\\(Rees\\)')]";

fn regex_perf_test_with_reuse(cfg: &SearchData) {
let _v = jsonpath_rust::find(&cfg.path, &cfg.json);
}

fn regex_perf_test_without_reuse() {
let json = Box::new(json!({
"author":"abcd(Rees)",
}));

let _v = json.path(PATH).expect("the path is correct");
}

fn json_path_inst_compiling() {
let _v = JsonPathInst::from_str(PATH).unwrap();
}

pub fn criterion_benchmark(c: &mut Criterion) {
let data = SearchData {
json: json!({
"author":"abcd(Rees)",
}),
path: JsonPathInst::from_str(PATH).unwrap(),
};
c.bench_function("regex bench with reuse", |b| {
b.iter(|| regex_perf_test_with_reuse(&data))
});
c.bench_function("regex bench without reuse", |b| {
b.iter(|| regex_perf_test_without_reuse())
});
c.bench_function("JsonPathInst generation", |b| {
b.iter(|| json_path_inst_compiling())
});
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);

0 comments on commit e85553c

Please sign in to comment.