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