Skip to content

Commit 5127cba

Browse files
committed
add new bench
1 parent e86372a commit 5127cba

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ regex = "1"
3131
name = "bench_compare"
3232
harness = false
3333

34+
[[bench]]
35+
name = "bench_deserialize"
36+
harness = false
37+
3438
[[example]]
3539
crate-type = ["bin"]
3640
path = "examples/json5-doublequote-fixer/src/main.rs"

benches/bench_deserialize.rs

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// Warning. You will need a lot of memory to run this bench
2+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
3+
4+
use json5;
5+
use serde::{Deserialize, Serialize};
6+
use json_five;
7+
8+
#[derive(Debug, Clone, Serialize, Deserialize)]
9+
struct MyStruct {
10+
items: Vec<String>,
11+
}
12+
fn create_test_struct(num_items: u64) -> MyStruct {
13+
let mut items = Vec::new();
14+
15+
for i in 0..num_items {
16+
items.push(format!("{:0100}", i))
17+
}
18+
19+
MyStruct { items }
20+
}
21+
22+
fn bench_struct_sizes(c: &mut Criterion) {
23+
let test_sizes = vec![10, 100, 1000, 10000, 100000, 1000000u64];
24+
25+
26+
for test_size in test_sizes.iter() {
27+
let test_struct = create_test_struct(*test_size);
28+
let serialized = json_five::to_string(&test_struct).unwrap();
29+
let mut deserialize_group = c.benchmark_group(format!("deserialize (size {test_size})"));
30+
if *test_size > 1000 {
31+
deserialize_group.sample_size(10);
32+
}
33+
deserialize_group.bench_function(&format!("json-five"), |b| {
34+
b.iter(|| {
35+
let json_deserialized: MyStruct = json_five::from_str(black_box(&serialized)).unwrap();
36+
black_box(json_deserialized)
37+
});
38+
});
39+
40+
deserialize_group.bench_function(&format!("serde_json"), |b| {
41+
b.iter(|| {
42+
let parsed: MyStruct = serde_json::from_str(black_box(&serialized)).unwrap();
43+
black_box(parsed);
44+
});
45+
});
46+
47+
deserialize_group.bench_function(&format!("json5"), |b| {
48+
b.iter(|| {
49+
let json5_deserialized: MyStruct = json5::from_str(black_box(&serialized)).unwrap();
50+
black_box(json5_deserialized);
51+
});
52+
});
53+
54+
}
55+
56+
for test_size in test_sizes {
57+
let test_struct = create_test_struct(test_size);
58+
let mut serialize_group = c.benchmark_group(format!("serialize (size {test_size})"));
59+
if test_size > 1000 {
60+
serialize_group.sample_size(10);
61+
}
62+
serialize_group.bench_function(&format!("json-five"), |b| {
63+
b.iter(|| {
64+
let result = json_five::to_string(black_box(&test_struct)).unwrap();
65+
black_box(result)
66+
});
67+
});
68+
69+
serialize_group.bench_function(&format!("serde_json"), |b| {
70+
b.iter(|| {
71+
let result = serde_json::to_string(black_box(&test_struct)).unwrap();
72+
black_box(result);
73+
});
74+
});
75+
76+
serialize_group.bench_function(&format!("json5"), |b| {
77+
b.iter(|| {
78+
let result = json5::to_string(black_box(&test_struct)).unwrap();
79+
black_box(result);
80+
});
81+
});
82+
}
83+
}
84+
85+
criterion_group!(parser_benches, bench_struct_sizes);
86+
criterion_main!(parser_benches);

0 commit comments

Comments
 (0)