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 serialization
15a1d56debSopenharmony_ci
16a1d56debSopenharmony_ci#![feature(test)]
17a1d56debSopenharmony_ci
18a1d56debSopenharmony_cimod task_helpers;
19a1d56debSopenharmony_ci
20a1d56debSopenharmony_ci#[cfg(test)]
21a1d56debSopenharmony_cimod deserialize_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_serialize_perf_ylong_json(b: &mut Bencher) {
32a1d56debSopenharmony_ci        let value = JsonValue::from_str(NULL_EXAMPLE).unwrap();
33a1d56debSopenharmony_ci        b.iter(|| {
34a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
35a1d56debSopenharmony_ci                let _ = value.to_compact_string();
36a1d56debSopenharmony_ci            }
37a1d56debSopenharmony_ci        });
38a1d56debSopenharmony_ci    }
39a1d56debSopenharmony_ci
40a1d56debSopenharmony_ci    #[bench]
41a1d56debSopenharmony_ci    fn boolean_serialize_perf_ylong_json(b: &mut Bencher) {
42a1d56debSopenharmony_ci        let value = JsonValue::from_str(BOOLEAN_EXAMPLE).unwrap();
43a1d56debSopenharmony_ci        b.iter(|| {
44a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
45a1d56debSopenharmony_ci                let _ = value.to_compact_string();
46a1d56debSopenharmony_ci            }
47a1d56debSopenharmony_ci        });
48a1d56debSopenharmony_ci    }
49a1d56debSopenharmony_ci
50a1d56debSopenharmony_ci    #[bench]
51a1d56debSopenharmony_ci    fn number_serialize_perf_ylong_json(b: &mut Bencher) {
52a1d56debSopenharmony_ci        let value = JsonValue::from_str(NUMBER_EXAMPLE).unwrap();
53a1d56debSopenharmony_ci        b.iter(|| {
54a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
55a1d56debSopenharmony_ci                let _ = value.to_compact_string();
56a1d56debSopenharmony_ci            }
57a1d56debSopenharmony_ci        });
58a1d56debSopenharmony_ci    }
59a1d56debSopenharmony_ci
60a1d56debSopenharmony_ci    #[bench]
61a1d56debSopenharmony_ci    fn string_serialize_perf_ylong_json(b: &mut Bencher) {
62a1d56debSopenharmony_ci        let value = JsonValue::from_str(STRING_EXAMPLE).unwrap();
63a1d56debSopenharmony_ci        b.iter(|| {
64a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
65a1d56debSopenharmony_ci                let _ = value.to_compact_string();
66a1d56debSopenharmony_ci            }
67a1d56debSopenharmony_ci        });
68a1d56debSopenharmony_ci    }
69a1d56debSopenharmony_ci
70a1d56debSopenharmony_ci    #[bench]
71a1d56debSopenharmony_ci    fn array_serialize_perf_ylong_json(b: &mut Bencher) {
72a1d56debSopenharmony_ci        let value = JsonValue::from_str(ARRAY_EXAMPLE).unwrap();
73a1d56debSopenharmony_ci        b.iter(|| {
74a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
75a1d56debSopenharmony_ci                let _ = value.to_compact_string();
76a1d56debSopenharmony_ci            }
77a1d56debSopenharmony_ci        });
78a1d56debSopenharmony_ci    }
79a1d56debSopenharmony_ci
80a1d56debSopenharmony_ci    #[bench]
81a1d56debSopenharmony_ci    fn object_serialize_perf_ylong_json(b: &mut Bencher) {
82a1d56debSopenharmony_ci        let value = JsonValue::from_str(OBJECT_EXAMPLE).unwrap();
83a1d56debSopenharmony_ci        b.iter(|| {
84a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
85a1d56debSopenharmony_ci                let _ = value.to_compact_string();
86a1d56debSopenharmony_ci            }
87a1d56debSopenharmony_ci        });
88a1d56debSopenharmony_ci    }
89a1d56debSopenharmony_ci
90a1d56debSopenharmony_ci    #[bench]
91a1d56debSopenharmony_ci    fn exp1_serialize_perf_ylong_json(b: &mut Bencher) {
92a1d56debSopenharmony_ci        let value = JsonValue::from_str(RFC7159_EXAMPLE1).unwrap();
93a1d56debSopenharmony_ci        b.iter(|| {
94a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
95a1d56debSopenharmony_ci                let _ = value.to_compact_string();
96a1d56debSopenharmony_ci            }
97a1d56debSopenharmony_ci        });
98a1d56debSopenharmony_ci    }
99a1d56debSopenharmony_ci
100a1d56debSopenharmony_ci    #[bench]
101a1d56debSopenharmony_ci    fn exp2_serialize_perf_ylong_json(b: &mut Bencher) {
102a1d56debSopenharmony_ci        let value = JsonValue::from_str(RFC7159_EXAMPLE2).unwrap();
103a1d56debSopenharmony_ci        b.iter(|| {
104a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
105a1d56debSopenharmony_ci                let _ = value.to_compact_string();
106a1d56debSopenharmony_ci            }
107a1d56debSopenharmony_ci        });
108a1d56debSopenharmony_ci    }
109a1d56debSopenharmony_ci
110a1d56debSopenharmony_ci    #[bench]
111a1d56debSopenharmony_ci    fn exp3_serialize_perf_ylong_json(b: &mut Bencher) {
112a1d56debSopenharmony_ci        let value = JsonValue::from_str(JSON_PARSE_TEST).unwrap();
113a1d56debSopenharmony_ci        b.iter(|| {
114a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
115a1d56debSopenharmony_ci                let _ = value.to_compact_string();
116a1d56debSopenharmony_ci            }
117a1d56debSopenharmony_ci        });
118a1d56debSopenharmony_ci    }
119a1d56debSopenharmony_ci
120a1d56debSopenharmony_ci    #[bench]
121a1d56debSopenharmony_ci    fn exp4_serialize_perf_ylong_json(b: &mut Bencher) {
122a1d56debSopenharmony_ci        let value = JsonValue::from_str(LONG_KEY_VALUE).unwrap();
123a1d56debSopenharmony_ci        b.iter(|| {
124a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
125a1d56debSopenharmony_ci                let _ = value.to_compact_string();
126a1d56debSopenharmony_ci            }
127a1d56debSopenharmony_ci        });
128a1d56debSopenharmony_ci    }
129a1d56debSopenharmony_ci
130a1d56debSopenharmony_ci    #[bench]
131a1d56debSopenharmony_ci    fn null_serialize_perf_serde_json(b: &mut Bencher) {
132a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(NULL_EXAMPLE).unwrap();
133a1d56debSopenharmony_ci        b.iter(|| {
134a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
135a1d56debSopenharmony_ci                format!("{value}");
136a1d56debSopenharmony_ci            }
137a1d56debSopenharmony_ci        });
138a1d56debSopenharmony_ci    }
139a1d56debSopenharmony_ci
140a1d56debSopenharmony_ci    #[bench]
141a1d56debSopenharmony_ci    fn boolean_serialize_perf_serde_json(b: &mut Bencher) {
142a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(BOOLEAN_EXAMPLE).unwrap();
143a1d56debSopenharmony_ci        b.iter(|| {
144a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
145a1d56debSopenharmony_ci                format!("{value}");
146a1d56debSopenharmony_ci            }
147a1d56debSopenharmony_ci        });
148a1d56debSopenharmony_ci    }
149a1d56debSopenharmony_ci
150a1d56debSopenharmony_ci    #[bench]
151a1d56debSopenharmony_ci    fn number_serialize_perf_serde_json(b: &mut Bencher) {
152a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(NUMBER_EXAMPLE).unwrap();
153a1d56debSopenharmony_ci        b.iter(|| {
154a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
155a1d56debSopenharmony_ci                format!("{value}");
156a1d56debSopenharmony_ci            }
157a1d56debSopenharmony_ci        });
158a1d56debSopenharmony_ci    }
159a1d56debSopenharmony_ci
160a1d56debSopenharmony_ci    #[bench]
161a1d56debSopenharmony_ci    fn string_serialize_perf_serde_json(b: &mut Bencher) {
162a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(STRING_EXAMPLE).unwrap();
163a1d56debSopenharmony_ci        b.iter(|| {
164a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
165a1d56debSopenharmony_ci                format!("{value}");
166a1d56debSopenharmony_ci            }
167a1d56debSopenharmony_ci        });
168a1d56debSopenharmony_ci    }
169a1d56debSopenharmony_ci
170a1d56debSopenharmony_ci    #[bench]
171a1d56debSopenharmony_ci    fn array_serialize_perf_serde_json(b: &mut Bencher) {
172a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(ARRAY_EXAMPLE).unwrap();
173a1d56debSopenharmony_ci        b.iter(|| {
174a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
175a1d56debSopenharmony_ci                format!("{value}");
176a1d56debSopenharmony_ci            }
177a1d56debSopenharmony_ci        });
178a1d56debSopenharmony_ci    }
179a1d56debSopenharmony_ci
180a1d56debSopenharmony_ci    #[bench]
181a1d56debSopenharmony_ci    fn object_serialize_perf_serde_json(b: &mut Bencher) {
182a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(OBJECT_EXAMPLE).unwrap();
183a1d56debSopenharmony_ci        b.iter(|| {
184a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
185a1d56debSopenharmony_ci                format!("{value}");
186a1d56debSopenharmony_ci            }
187a1d56debSopenharmony_ci        });
188a1d56debSopenharmony_ci    }
189a1d56debSopenharmony_ci
190a1d56debSopenharmony_ci    #[bench]
191a1d56debSopenharmony_ci    fn exp1_serialize_perf_serde_json(b: &mut Bencher) {
192a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(RFC7159_EXAMPLE1).unwrap();
193a1d56debSopenharmony_ci        b.iter(|| {
194a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
195a1d56debSopenharmony_ci                format!("{value}");
196a1d56debSopenharmony_ci            }
197a1d56debSopenharmony_ci        });
198a1d56debSopenharmony_ci    }
199a1d56debSopenharmony_ci
200a1d56debSopenharmony_ci    #[bench]
201a1d56debSopenharmony_ci    fn exp2_serialize_perf_serde_json(b: &mut Bencher) {
202a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(RFC7159_EXAMPLE2).unwrap();
203a1d56debSopenharmony_ci        b.iter(|| {
204a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
205a1d56debSopenharmony_ci                format!("{value}");
206a1d56debSopenharmony_ci            }
207a1d56debSopenharmony_ci        });
208a1d56debSopenharmony_ci    }
209a1d56debSopenharmony_ci
210a1d56debSopenharmony_ci    #[bench]
211a1d56debSopenharmony_ci    fn exp3_serialize_perf_serde_json(b: &mut Bencher) {
212a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(JSON_PARSE_TEST).unwrap();
213a1d56debSopenharmony_ci        b.iter(|| {
214a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
215a1d56debSopenharmony_ci                format!("{value}");
216a1d56debSopenharmony_ci            }
217a1d56debSopenharmony_ci        });
218a1d56debSopenharmony_ci    }
219a1d56debSopenharmony_ci
220a1d56debSopenharmony_ci    #[bench]
221a1d56debSopenharmony_ci    fn exp4_serialize_perf_serde_json(b: &mut Bencher) {
222a1d56debSopenharmony_ci        let value: Value = serde_json::from_str(LONG_KEY_VALUE).unwrap();
223a1d56debSopenharmony_ci        b.iter(|| {
224a1d56debSopenharmony_ci            for _ in 0..LOOPS_NUM {
225a1d56debSopenharmony_ci                format!("{value}");
226a1d56debSopenharmony_ci            }
227a1d56debSopenharmony_ci        });
228a1d56debSopenharmony_ci    }
229a1d56debSopenharmony_ci}
230