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