1 // Copyright (c) 2023 Huawei Device Co., Ltd.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 //     http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 //! Benchmarks for the json deserialization
15 
16 #![feature(test)]
17 
18 mod task_helpers;
19 
20 #[cfg(test)]
21 mod serialize_cmp {
22     extern crate test;
23     use crate::task_helpers::*;
24     use test::Bencher;
25 
26     use serde_json::Value;
27     use std::str::FromStr;
28     use ylong_json::JsonValue;
29 
30     #[bench]
null_deserialize_perf_ylong_json(b: &mut Bencher)31     fn null_deserialize_perf_ylong_json(b: &mut Bencher) {
32         b.iter(|| {
33             for _ in 0..LOOPS_NUM {
34                 let _value = JsonValue::from_str(NULL_EXAMPLE).unwrap();
35             }
36         });
37     }
38 
39     #[bench]
boolean_deserialize_perf_ylong_json(b: &mut Bencher)40     fn boolean_deserialize_perf_ylong_json(b: &mut Bencher) {
41         b.iter(|| {
42             for _ in 0..LOOPS_NUM {
43                 let _value = JsonValue::from_str(BOOLEAN_EXAMPLE).unwrap();
44             }
45         });
46     }
47 
48     #[bench]
number_deserialize_perf_ylong_json(b: &mut Bencher)49     fn number_deserialize_perf_ylong_json(b: &mut Bencher) {
50         b.iter(|| {
51             for _ in 0..LOOPS_NUM {
52                 let _value = JsonValue::from_str(NUMBER_EXAMPLE).unwrap();
53             }
54         });
55     }
56 
57     #[bench]
string_deserialize_perf_ylong_json(b: &mut Bencher)58     fn string_deserialize_perf_ylong_json(b: &mut Bencher) {
59         b.iter(|| {
60             for _ in 0..LOOPS_NUM {
61                 let _value = JsonValue::from_str(STRING_EXAMPLE).unwrap();
62             }
63         });
64     }
65 
66     #[bench]
array_deserialize_perf_ylong_json(b: &mut Bencher)67     fn array_deserialize_perf_ylong_json(b: &mut Bencher) {
68         b.iter(|| {
69             for _ in 0..LOOPS_NUM {
70                 let _value = JsonValue::from_str(ARRAY_EXAMPLE).unwrap();
71             }
72         });
73     }
74 
75     #[bench]
object_deserialize_perf_ylong_json(b: &mut Bencher)76     fn object_deserialize_perf_ylong_json(b: &mut Bencher) {
77         b.iter(|| {
78             for _ in 0..LOOPS_NUM {
79                 let _value = JsonValue::from_str(OBJECT_EXAMPLE).unwrap();
80             }
81         });
82     }
83 
84     #[bench]
exp1_deserialize_perf_ylong_json(b: &mut Bencher)85     fn exp1_deserialize_perf_ylong_json(b: &mut Bencher) {
86         b.iter(|| {
87             for _ in 0..LOOPS_NUM {
88                 let _value = JsonValue::from_str(RFC7159_EXAMPLE1).unwrap();
89             }
90         });
91     }
92 
93     #[bench]
exp2_deserialize_perf_ylong_json(b: &mut Bencher)94     fn exp2_deserialize_perf_ylong_json(b: &mut Bencher) {
95         b.iter(|| {
96             for _ in 0..LOOPS_NUM {
97                 let _value = JsonValue::from_str(RFC7159_EXAMPLE2).unwrap();
98             }
99         });
100     }
101 
102     #[bench]
exp3_deserialize_perf_ylong_json(b: &mut Bencher)103     fn exp3_deserialize_perf_ylong_json(b: &mut Bencher) {
104         b.iter(|| {
105             for _ in 0..LOOPS_NUM {
106                 let _value = JsonValue::from_str(JSON_PARSE_TEST).unwrap();
107             }
108         });
109     }
110 
111     #[bench]
exp4_deserialize_perf_ylong_json(b: &mut Bencher)112     fn exp4_deserialize_perf_ylong_json(b: &mut Bencher) {
113         b.iter(|| {
114             for _ in 0..LOOPS_NUM {
115                 let _value = JsonValue::from_str(LONG_KEY_VALUE).unwrap();
116             }
117         });
118     }
119 
120     #[bench]
null_deserialize_perf_serde_json(b: &mut Bencher)121     fn null_deserialize_perf_serde_json(b: &mut Bencher) {
122         b.iter(|| {
123             for _ in 0..LOOPS_NUM {
124                 let _value: Value = serde_json::from_str(NULL_EXAMPLE).unwrap();
125             }
126         });
127     }
128 
129     #[bench]
boolean_deserialize_perf_serde_json(b: &mut Bencher)130     fn boolean_deserialize_perf_serde_json(b: &mut Bencher) {
131         b.iter(|| {
132             for _ in 0..LOOPS_NUM {
133                 let _value: Value = serde_json::from_str(BOOLEAN_EXAMPLE).unwrap();
134             }
135         });
136     }
137 
138     #[bench]
number_deserialize_perf_serde_json(b: &mut Bencher)139     fn number_deserialize_perf_serde_json(b: &mut Bencher) {
140         b.iter(|| {
141             for _ in 0..LOOPS_NUM {
142                 let _value: Value = serde_json::from_str(NUMBER_EXAMPLE).unwrap();
143             }
144         });
145     }
146 
147     #[bench]
string_deserialize_perf_serde_json(b: &mut Bencher)148     fn string_deserialize_perf_serde_json(b: &mut Bencher) {
149         b.iter(|| {
150             for _ in 0..LOOPS_NUM {
151                 let _value: Value = serde_json::from_str(STRING_EXAMPLE).unwrap();
152             }
153         });
154     }
155 
156     #[bench]
array_deserialize_perf_serde_json(b: &mut Bencher)157     fn array_deserialize_perf_serde_json(b: &mut Bencher) {
158         b.iter(|| {
159             for _ in 0..LOOPS_NUM {
160                 let _value: Value = serde_json::from_str(ARRAY_EXAMPLE).unwrap();
161             }
162         });
163     }
164 
165     #[bench]
object_deserialize_perf_serde_json(b: &mut Bencher)166     fn object_deserialize_perf_serde_json(b: &mut Bencher) {
167         b.iter(|| {
168             for _ in 0..LOOPS_NUM {
169                 let _value: Value = serde_json::from_str(OBJECT_EXAMPLE).unwrap();
170             }
171         });
172     }
173 
174     #[bench]
exp1_deserialize_perf_serde_json(b: &mut Bencher)175     fn exp1_deserialize_perf_serde_json(b: &mut Bencher) {
176         b.iter(|| {
177             for _ in 0..LOOPS_NUM {
178                 let _value: Value = serde_json::from_str(RFC7159_EXAMPLE1).unwrap();
179             }
180         });
181     }
182 
183     #[bench]
exp2_deserialize_perf_serde_json(b: &mut Bencher)184     fn exp2_deserialize_perf_serde_json(b: &mut Bencher) {
185         b.iter(|| {
186             for _ in 0..LOOPS_NUM {
187                 let _value: Value = serde_json::from_str(RFC7159_EXAMPLE2).unwrap();
188             }
189         });
190     }
191 
192     #[bench]
exp3_deserialize_perf_serde_json(b: &mut Bencher)193     fn exp3_deserialize_perf_serde_json(b: &mut Bencher) {
194         b.iter(|| {
195             for _ in 0..LOOPS_NUM {
196                 let _value: Value = serde_json::from_str(JSON_PARSE_TEST).unwrap();
197             }
198         });
199     }
200 
201     #[bench]
exp4_deserialize_perf_serde_json(b: &mut Bencher)202     fn exp4_deserialize_perf_serde_json(b: &mut Bencher) {
203         b.iter(|| {
204             for _ in 0..LOOPS_NUM {
205                 let _value: Value = serde_json::from_str(LONG_KEY_VALUE).unwrap();
206             }
207         });
208     }
209 }
210