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