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