@@ -17,7 +17,7 @@ use json::JsonValue;
17
17
use serde_json:: Value ;
18
18
19
19
#[ allow( dead_code) ]
20
- static BENCH_DATA : & ' static str = r#"{
20
+ static BENCH_DATA : & str = r#"{
21
21
"overflow": 9223372036854775808,
22
22
"widget": {
23
23
"debug": "on",
@@ -73,27 +73,44 @@ fn ajson_selector(json: &str) {
73
73
black_box (
74
74
ajson:: get ( json, "widget.[image.src,text.data]" )
75
75
. unwrap ( )
76
- . to_vec ( ) ,
76
+ . unwrap ( )
77
+ . as_vec ( ) ,
77
78
) ;
78
79
}
79
80
80
81
fn ajson_multi_query ( json : & str ) {
81
82
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 ( ) ,
84
85
] ) ;
85
86
}
86
87
87
88
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 ( ) ) ;
92
108
// ajson::get(json, "widget.text").as_map();
93
109
black_box (
94
110
ajson:: get ( json, "widget.menu.#(sub_item>7)#.title" )
95
111
. unwrap ( )
96
- . to_vec ( ) ,
112
+ . unwrap ( )
113
+ . as_vec ( ) ,
97
114
) ;
98
115
// ajson::get(json, "widget.menu.[1.title,2.options]").as_array();
99
116
}
@@ -111,11 +128,12 @@ fn json_rust_bench(data: &str) {
111
128
// let text = &serde_json::from_str::<Value>(BENCH_DATA).unwrap()["widget"]["text"] ;
112
129
113
130
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
+ ) ;
119
137
}
120
138
121
139
fn serde_json_bench ( json : & str ) {
@@ -238,22 +256,19 @@ fn serde_json_derive_bench(json: &str) {
238
256
}
239
257
240
258
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 ( ) ) ;
247
264
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
+ ) ;
257
272
} ;
258
273
}
259
274
@@ -285,27 +300,27 @@ fn criterion_benchmark(c: &mut Criterion) {
285
300
c. bench_function ( "ajson benchmark" , |b| {
286
301
b. iter ( || ajson_bench ( black_box ( BENCH_DATA ) ) )
287
302
} ) ;
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
+ // });
294
309
c. bench_function ( "ajson selector" , |b| {
295
310
b. iter ( || ajson_selector ( black_box ( BENCH_DATA ) ) )
296
311
} ) ;
297
312
c. bench_function ( "ajson multi query" , |b| {
298
313
b. iter ( || ajson_multi_query ( black_box ( BENCH_DATA ) ) )
299
314
} ) ;
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
+ // });
309
324
}
310
325
311
326
criterion_group ! ( benches, criterion_benchmark) ;
0 commit comments