Skip to content

Commit b7028f4

Browse files
authored
Merge pull request #14 from importcjj/v0.3
V0.3
2 parents a5b7bc4 + aa05152 commit b7028f4

19 files changed

+1719
-1862
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
/target
22
**/*.rs.bk
3-
Cargo.lock
3+
Cargo.lock
4+
perf.data
5+
perf.data.old
6+
flamegraph.svg

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ matrix:
1111

1212
cache: cargo
1313
script:
14-
- cargo build --verbose --all
15-
- cargo test --verbose --all
14+
- cargo build --verbose --all --features=wild
15+
- cargo test --verbose --all --features=wild
1616
- cargo bench

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,12 @@ include = ["Cargo.toml", "src/**/*.rs", "README.md", "LICENSE-MIT"]
1313
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1414
autobenches = false
1515

16+
[features]
17+
default = []
18+
wild = ["regex"]
19+
1620
[dependencies]
17-
regex = "1"
21+
regex = { version = "1", optional = true }
1822

1923
[dev-dependencies]
2024
criterion = "0.2"

benches/ajson_benchmark.rs

Lines changed: 59 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use json::JsonValue;
1717
use serde_json::Value;
1818

1919
#[allow(dead_code)]
20-
static BENCH_DATA: &'static str = r#"{
20+
static BENCH_DATA: &str = r#"{
2121
"overflow": 9223372036854775808,
2222
"widget": {
2323
"debug": "on",
@@ -73,27 +73,44 @@ fn ajson_selector(json: &str) {
7373
black_box(
7474
ajson::get(json, "widget.[image.src,text.data]")
7575
.unwrap()
76-
.to_vec(),
76+
.unwrap()
77+
.as_vec(),
7778
);
7879
}
7980

8081
fn ajson_multi_query(json: &str) {
8182
black_box([
82-
ajson::get(json, "widget.image.src"),
83-
ajson::get(json, "widget.text.data"),
83+
ajson::get(json, "widget.image.src").unwrap(),
84+
ajson::get(json, "widget.text.data").unwrap(),
8485
]);
8586
}
8687

8788
fn ajson_bench(json: &str) {
88-
black_box(ajson::get(json, "widget.window.name").unwrap().as_str());
89-
black_box(ajson::get(json, "widget.image.hOffset").unwrap().to_f64());
90-
black_box(ajson::get(json, "widget.text.onMouseUp").unwrap().as_str());
91-
black_box(ajson::get(json, "widget.debug").unwrap().as_str());
89+
black_box(
90+
ajson::get(json, "widget.window.name")
91+
.unwrap()
92+
.unwrap()
93+
.as_str(),
94+
);
95+
black_box(
96+
ajson::get(json, "widget.image.hOffset")
97+
.unwrap()
98+
.unwrap()
99+
.as_f64(),
100+
);
101+
black_box(
102+
ajson::get(json, "widget.text.onMouseUp")
103+
.unwrap()
104+
.unwrap()
105+
.as_str(),
106+
);
107+
black_box(ajson::get(json, "widget.debug").unwrap().unwrap().as_str());
92108
// ajson::get(json, "widget.text").as_map();
93109
black_box(
94110
ajson::get(json, "widget.menu.#(sub_item>7)#.title")
95111
.unwrap()
96-
.to_vec(),
112+
.unwrap()
113+
.as_vec(),
97114
);
98115
// ajson::get(json, "widget.menu.[1.title,2.options]").as_array();
99116
}
@@ -111,11 +128,12 @@ fn json_rust_bench(data: &str) {
111128
// let text = &serde_json::from_str::<Value>(BENCH_DATA).unwrap()["widget"]["text"] ;
112129

113130
let menu = &json::parse(data).unwrap()["widget"]["menu"];
114-
let _v: Vec<&JsonValue> = black_box(menu
115-
.members()
116-
.filter(|x| x["sub_item"].as_i64().unwrap() > 5)
117-
.map(|x| &x["title"])
118-
.collect());
131+
let _v: Vec<&JsonValue> = black_box(
132+
menu.members()
133+
.filter(|x| x["sub_item"].as_i64().unwrap() > 5)
134+
.map(|x| &x["title"])
135+
.collect(),
136+
);
119137
}
120138

121139
fn serde_json_bench(json: &str) {
@@ -238,22 +256,19 @@ fn serde_json_derive_bench(json: &str) {
238256
}
239257

240258
fn nom_json_bench(json: &str) {
241-
match nom_json::root::<(&str, ErrorKind)>(json) {
242-
Ok((_, value)) => {
243-
black_box(&value["widget"]["window"]["name"].as_str());
244-
black_box(&value["widget"]["image"]["hOffset"]);
245-
black_box(&value["widget"]["text"]["onMouseUp"].as_str());
246-
black_box(&value["widget"]["debug"].as_str());
259+
if let Ok((_, value)) = nom_json::root::<(&str, ErrorKind)>(json) {
260+
black_box(&value["widget"]["window"]["name"].as_str());
261+
black_box(&value["widget"]["image"]["hOffset"]);
262+
black_box(&value["widget"]["text"]["onMouseUp"].as_str());
263+
black_box(&value["widget"]["debug"].as_str());
247264

248-
let menu = &value["widget"]["menu"];
249-
let _v: Vec<&nom_json::JsonValue> = black_box(
250-
menu.members()
251-
.filter(|x| x["sub_item"].to_f64() > 5.0)
252-
.map(|x| &x["title"])
253-
.collect(),
254-
);
255-
}
256-
_ => (),
265+
let menu = &value["widget"]["menu"];
266+
let _v: Vec<&nom_json::JsonValue> = black_box(
267+
menu.members()
268+
.filter(|x| x["sub_item"].to_f64() > 5.0)
269+
.map(|x| &x["title"])
270+
.collect(),
271+
);
257272
};
258273
}
259274

@@ -285,27 +300,27 @@ fn criterion_benchmark(c: &mut Criterion) {
285300
c.bench_function("ajson benchmark", |b| {
286301
b.iter(|| ajson_bench(black_box(BENCH_DATA)))
287302
});
288-
c.bench_function("serde_json benchmark", |b| {
289-
b.iter(|| serde_json_bench(black_box(BENCH_DATA)))
290-
});
291-
c.bench_function("json-rust benchmark", |b| {
292-
b.iter(|| json_rust_bench(black_box(BENCH_DATA)))
293-
});
303+
//c.bench_function("serde_json benchmark", |b| {
304+
// b.iter(|| serde_json_bench(black_box(BENCH_DATA)))
305+
//});
306+
//c.bench_function("json-rust benchmark", |b| {
307+
// b.iter(|| json_rust_bench(black_box(BENCH_DATA)))
308+
//});
294309
c.bench_function("ajson selector", |b| {
295310
b.iter(|| ajson_selector(black_box(BENCH_DATA)))
296311
});
297312
c.bench_function("ajson multi query", |b| {
298313
b.iter(|| ajson_multi_query(black_box(BENCH_DATA)))
299314
});
300-
c.bench_function("serde derive", |b| {
301-
b.iter(|| serde_json_derive_bench(black_box(BENCH_DATA)))
302-
});
303-
c.bench_function("serde derive multi query", |b| {
304-
b.iter(|| serde_json_derive_multi_query(black_box(BENCH_DATA)))
305-
});
306-
c.bench_function("nom json bench", |b| {
307-
b.iter(|| nom_json_bench(black_box(BENCH_DATA)))
308-
});
315+
//c.bench_function("serde derive", |b| {
316+
// b.iter(|| serde_json_derive_bench(black_box(BENCH_DATA)))
317+
//});
318+
//c.bench_function("serde derive multi query", |b| {
319+
// b.iter(|| serde_json_derive_multi_query(black_box(BENCH_DATA)))
320+
//});
321+
//c.bench_function("nom json bench", |b| {
322+
// b.iter(|| nom_json_bench(black_box(BENCH_DATA)))
323+
//});
309324
}
310325

311326
criterion_group!(benches, criterion_benchmark);

0 commit comments

Comments
 (0)