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