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_ciuse crate::JsonValue; 15a1d56debSopenharmony_ciuse core::fmt::{Debug, Display, Formatter}; 16a1d56debSopenharmony_ciuse core::slice::{Iter, IterMut}; 17a1d56debSopenharmony_ci 18a1d56debSopenharmony_ci/// Array type, implemented using Vec. 19a1d56debSopenharmony_ci/// 20a1d56debSopenharmony_ci/// # Situation 21a1d56debSopenharmony_ci/// * When the average number of Array entries exceeds 15 (estimated value), and query operation exists. 22a1d56debSopenharmony_ci/// 23a1d56debSopenharmony_ci/// # Attention 24a1d56debSopenharmony_ci/// * 只有开启 `vec_array` feature 时才可以使用,且与其他的 array 相关 feature 冲突。(默认开启) 25a1d56debSopenharmony_ci/// Only open `vec_array` feature can be used, and conflicts with other array-related features. (Enabled by default) 26a1d56debSopenharmony_ci/// 27a1d56debSopenharmony_ci/// # Examples 28a1d56debSopenharmony_ci/// ``` 29a1d56debSopenharmony_ci/// use ylong_json::Array; 30a1d56debSopenharmony_ci/// 31a1d56debSopenharmony_ci/// let array = Array::new(); 32a1d56debSopenharmony_ci/// assert_eq!(array.is_empty(), true); 33a1d56debSopenharmony_ci/// ``` 34a1d56debSopenharmony_ci#[derive(Default, Clone)] 35a1d56debSopenharmony_cipub struct Array { 36a1d56debSopenharmony_ci inner: Vec<JsonValue>, 37a1d56debSopenharmony_ci} 38a1d56debSopenharmony_ci 39a1d56debSopenharmony_ciimpl Array { 40a1d56debSopenharmony_ci /// Creates an empty Array instance. 41a1d56debSopenharmony_ci /// 42a1d56debSopenharmony_ci /// # Examples 43a1d56debSopenharmony_ci /// ``` 44a1d56debSopenharmony_ci /// use ylong_json::Array; 45a1d56debSopenharmony_ci /// 46a1d56debSopenharmony_ci /// let array = Array::new(); 47a1d56debSopenharmony_ci /// ``` 48a1d56debSopenharmony_ci pub fn new() -> Self { 49a1d56debSopenharmony_ci Self { inner: Vec::new() } 50a1d56debSopenharmony_ci } 51a1d56debSopenharmony_ci 52a1d56debSopenharmony_ci /// Gets length of Array. 53a1d56debSopenharmony_ci /// 54a1d56debSopenharmony_ci /// # Examples 55a1d56debSopenharmony_ci /// ``` 56a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 57a1d56debSopenharmony_ci /// 58a1d56debSopenharmony_ci /// let mut array = Array::new(); 59a1d56debSopenharmony_ci /// assert_eq!(array.len(), 0); 60a1d56debSopenharmony_ci /// 61a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 62a1d56debSopenharmony_ci /// assert_eq!(array.len(), 1); 63a1d56debSopenharmony_ci /// ``` 64a1d56debSopenharmony_ci pub fn len(&self) -> usize { 65a1d56debSopenharmony_ci self.inner.len() 66a1d56debSopenharmony_ci } 67a1d56debSopenharmony_ci 68a1d56debSopenharmony_ci /// Determines whether Array is empty. 69a1d56debSopenharmony_ci /// 70a1d56debSopenharmony_ci /// # Examples 71a1d56debSopenharmony_ci /// ``` 72a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 73a1d56debSopenharmony_ci /// 74a1d56debSopenharmony_ci /// let mut array = Array::new(); 75a1d56debSopenharmony_ci /// assert_eq!(array.is_empty(), true); 76a1d56debSopenharmony_ci /// 77a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 78a1d56debSopenharmony_ci /// assert_eq!(array.is_empty(), false); 79a1d56debSopenharmony_ci /// ``` 80a1d56debSopenharmony_ci pub fn is_empty(&self) -> bool { 81a1d56debSopenharmony_ci self.inner.len() == 0 82a1d56debSopenharmony_ci } 83a1d56debSopenharmony_ci 84a1d56debSopenharmony_ci /// Insert a new JsonValue at the end of Array. 85a1d56debSopenharmony_ci /// 86a1d56debSopenharmony_ci /// # Examples 87a1d56debSopenharmony_ci /// ``` 88a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 89a1d56debSopenharmony_ci /// 90a1d56debSopenharmony_ci /// let mut array = Array::new(); 91a1d56debSopenharmony_ci /// assert_eq!(array.len(), 0); 92a1d56debSopenharmony_ci /// 93a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 94a1d56debSopenharmony_ci /// assert_eq!(array.len(), 1); 95a1d56debSopenharmony_ci /// ``` 96a1d56debSopenharmony_ci pub fn push(&mut self, value: JsonValue) { 97a1d56debSopenharmony_ci self.inner.push(value) 98a1d56debSopenharmony_ci } 99a1d56debSopenharmony_ci 100a1d56debSopenharmony_ci /// Pops the element at the end of Array. 101a1d56debSopenharmony_ci /// 102a1d56debSopenharmony_ci /// # Examples 103a1d56debSopenharmony_ci /// ``` 104a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 105a1d56debSopenharmony_ci /// 106a1d56debSopenharmony_ci /// let mut array = Array::new(); 107a1d56debSopenharmony_ci /// assert_eq!(array.pop(), None); 108a1d56debSopenharmony_ci /// 109a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 110a1d56debSopenharmony_ci /// assert_eq!(array.pop(), Some(JsonValue::Null)); 111a1d56debSopenharmony_ci /// ``` 112a1d56debSopenharmony_ci pub fn pop(&mut self) -> Option<JsonValue> { 113a1d56debSopenharmony_ci self.inner.pop() 114a1d56debSopenharmony_ci } 115a1d56debSopenharmony_ci 116a1d56debSopenharmony_ci /// Gets a common iterator of Array. 117a1d56debSopenharmony_ci /// 118a1d56debSopenharmony_ci /// # Examples 119a1d56debSopenharmony_ci /// ``` 120a1d56debSopenharmony_ci /// use ylong_json::Array; 121a1d56debSopenharmony_ci /// 122a1d56debSopenharmony_ci /// let array = Array::new(); 123a1d56debSopenharmony_ci /// let iter = array.iter(); 124a1d56debSopenharmony_ci /// ``` 125a1d56debSopenharmony_ci pub fn iter(&self) -> Iter<'_, JsonValue> { 126a1d56debSopenharmony_ci self.inner.iter() 127a1d56debSopenharmony_ci } 128a1d56debSopenharmony_ci 129a1d56debSopenharmony_ci /// Gets a mutable iterator of Array. 130a1d56debSopenharmony_ci /// 131a1d56debSopenharmony_ci /// # Examples 132a1d56debSopenharmony_ci /// ``` 133a1d56debSopenharmony_ci /// use ylong_json::Array; 134a1d56debSopenharmony_ci /// 135a1d56debSopenharmony_ci /// let mut array = Array::new(); 136a1d56debSopenharmony_ci /// let iter_mut = array.iter_mut(); 137a1d56debSopenharmony_ci /// ``` 138a1d56debSopenharmony_ci pub fn iter_mut(&mut self) -> IterMut<'_, JsonValue> { 139a1d56debSopenharmony_ci self.inner.iter_mut() 140a1d56debSopenharmony_ci } 141a1d56debSopenharmony_ci 142a1d56debSopenharmony_ci /// Returns a common reference to the specified index ** member ** in Array. 143a1d56debSopenharmony_ci /// 144a1d56debSopenharmony_ci /// # Examples 145a1d56debSopenharmony_ci /// ``` 146a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 147a1d56debSopenharmony_ci /// 148a1d56debSopenharmony_ci /// let mut array = Array::new(); 149a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 150a1d56debSopenharmony_ci /// assert_eq!(array.get(0), Some(&JsonValue::Null)); 151a1d56debSopenharmony_ci /// assert_eq!(array.get(1), None); 152a1d56debSopenharmony_ci /// ``` 153a1d56debSopenharmony_ci pub fn get(&self, index: usize) -> Option<&JsonValue> { 154a1d56debSopenharmony_ci self.inner.get(index) 155a1d56debSopenharmony_ci } 156a1d56debSopenharmony_ci 157a1d56debSopenharmony_ci /// Returns a mutable reference to the specified index ** member ** in Array. 158a1d56debSopenharmony_ci /// 159a1d56debSopenharmony_ci /// # Examples 160a1d56debSopenharmony_ci /// ``` 161a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 162a1d56debSopenharmony_ci /// 163a1d56debSopenharmony_ci /// let mut array = Array::new(); 164a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 165a1d56debSopenharmony_ci /// assert_eq!(array.get_mut(0), Some(&mut JsonValue::Null)); 166a1d56debSopenharmony_ci /// assert_eq!(array.get_mut(1), None); 167a1d56debSopenharmony_ci /// ``` 168a1d56debSopenharmony_ci pub fn get_mut(&mut self, index: usize) -> Option<&mut JsonValue> { 169a1d56debSopenharmony_ci self.inner.get_mut(index) 170a1d56debSopenharmony_ci } 171a1d56debSopenharmony_ci 172a1d56debSopenharmony_ci /// Returns a common reference to the trailing ** member ** in Array.。 173a1d56debSopenharmony_ci /// 174a1d56debSopenharmony_ci /// # Examples 175a1d56debSopenharmony_ci /// ``` 176a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 177a1d56debSopenharmony_ci /// 178a1d56debSopenharmony_ci /// let mut array = Array::new(); 179a1d56debSopenharmony_ci /// assert_eq!(array.last(), None); 180a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 181a1d56debSopenharmony_ci /// assert_eq!(array.last(), Some(&JsonValue::Null)); 182a1d56debSopenharmony_ci /// ``` 183a1d56debSopenharmony_ci pub fn last(&self) -> Option<&JsonValue> { 184a1d56debSopenharmony_ci self.inner.last() 185a1d56debSopenharmony_ci } 186a1d56debSopenharmony_ci 187a1d56debSopenharmony_ci /// Returns a mutable reference to the trailing ** member ** in Array. 188a1d56debSopenharmony_ci /// 189a1d56debSopenharmony_ci /// # Examples 190a1d56debSopenharmony_ci /// ``` 191a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 192a1d56debSopenharmony_ci /// 193a1d56debSopenharmony_ci /// let mut array = Array::new(); 194a1d56debSopenharmony_ci /// assert_eq!(array.last_mut(), None); 195a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 196a1d56debSopenharmony_ci /// assert_eq!(array.last_mut(), Some(&mut JsonValue::Null)); 197a1d56debSopenharmony_ci /// ``` 198a1d56debSopenharmony_ci pub fn last_mut(&mut self) -> Option<&mut JsonValue> { 199a1d56debSopenharmony_ci self.inner.last_mut() 200a1d56debSopenharmony_ci } 201a1d56debSopenharmony_ci 202a1d56debSopenharmony_ci /// Removes the node in Array with the specified index. 203a1d56debSopenharmony_ci /// 204a1d56debSopenharmony_ci /// # Examples 205a1d56debSopenharmony_ci /// ``` 206a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 207a1d56debSopenharmony_ci /// 208a1d56debSopenharmony_ci /// let mut array = Array::new(); 209a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 210a1d56debSopenharmony_ci /// array.push(JsonValue::Boolean(true)); 211a1d56debSopenharmony_ci /// array.push(JsonValue::Null); 212a1d56debSopenharmony_ci /// 213a1d56debSopenharmony_ci /// assert_eq!(array.len(), 3); 214a1d56debSopenharmony_ci /// let second = array.remove(1); 215a1d56debSopenharmony_ci /// assert_eq!(second, Some(JsonValue::Boolean(true))); 216a1d56debSopenharmony_ci /// assert_eq!(array.len(), 2); 217a1d56debSopenharmony_ci /// ``` 218a1d56debSopenharmony_ci pub fn remove(&mut self, index: usize) -> Option<JsonValue> { 219a1d56debSopenharmony_ci if index >= self.inner.len() { 220a1d56debSopenharmony_ci return None; 221a1d56debSopenharmony_ci } 222a1d56debSopenharmony_ci Some(self.inner.remove(index)) 223a1d56debSopenharmony_ci } 224a1d56debSopenharmony_ci} 225a1d56debSopenharmony_ci 226a1d56debSopenharmony_ciimpl PartialEq for Array { 227a1d56debSopenharmony_ci /// Determines whether two arrays are equal. 228a1d56debSopenharmony_ci /// 229a1d56debSopenharmony_ci /// Two Arrays are equal: They have the same length and the elements in each position are equal. 230a1d56debSopenharmony_ci /// 231a1d56debSopenharmony_ci /// # Examples 232a1d56debSopenharmony_ci /// ``` 233a1d56debSopenharmony_ci /// use ylong_json::{Array, JsonValue}; 234a1d56debSopenharmony_ci /// 235a1d56debSopenharmony_ci /// let array1 = Array::new(); 236a1d56debSopenharmony_ci /// let array2 = Array::new(); 237a1d56debSopenharmony_ci /// let mut array3 = Array::new(); 238a1d56debSopenharmony_ci /// array3.push(JsonValue::Null); 239a1d56debSopenharmony_ci /// 240a1d56debSopenharmony_ci /// assert_eq!(array1, array2); 241a1d56debSopenharmony_ci /// assert_ne!(array1, array3); 242a1d56debSopenharmony_ci /// ``` 243a1d56debSopenharmony_ci fn eq(&self, other: &Self) -> bool { 244a1d56debSopenharmony_ci if self.len() != other.len() { 245a1d56debSopenharmony_ci return false; 246a1d56debSopenharmony_ci } 247a1d56debSopenharmony_ci for (a, b) in self.iter().zip(other.iter()) { 248a1d56debSopenharmony_ci if a != b { 249a1d56debSopenharmony_ci return false; 250a1d56debSopenharmony_ci } 251a1d56debSopenharmony_ci } 252a1d56debSopenharmony_ci true 253a1d56debSopenharmony_ci } 254a1d56debSopenharmony_ci} 255a1d56debSopenharmony_ci 256a1d56debSopenharmony_ciimpl Display for Array { 257a1d56debSopenharmony_ci fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result { 258a1d56debSopenharmony_ci write!(f, "[")?; 259a1d56debSopenharmony_ci for (n, item) in self.inner.iter().enumerate() { 260a1d56debSopenharmony_ci if n != 0 { 261a1d56debSopenharmony_ci write!(f, ",")?; 262a1d56debSopenharmony_ci } 263a1d56debSopenharmony_ci write!(f, "{item}")?; 264a1d56debSopenharmony_ci } 265a1d56debSopenharmony_ci write!(f, "]") 266a1d56debSopenharmony_ci } 267a1d56debSopenharmony_ci} 268a1d56debSopenharmony_ci 269a1d56debSopenharmony_ciimpl Debug for Array { 270a1d56debSopenharmony_ci fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result { 271a1d56debSopenharmony_ci Display::fmt(self, f) 272a1d56debSopenharmony_ci } 273a1d56debSopenharmony_ci} 274a1d56debSopenharmony_ci 275a1d56debSopenharmony_ci#[cfg(test)] 276a1d56debSopenharmony_cimod ut_vec { 277a1d56debSopenharmony_ci use crate::{Array, JsonValue}; 278a1d56debSopenharmony_ci 279a1d56debSopenharmony_ci /// UT test for `Array::is_empty`. 280a1d56debSopenharmony_ci /// 281a1d56debSopenharmony_ci /// # Title 282a1d56debSopenharmony_ci /// ut_array_is_empty 283a1d56debSopenharmony_ci /// 284a1d56debSopenharmony_ci /// # Brief 285a1d56debSopenharmony_ci /// 1. Creates some `Array`s. 286a1d56debSopenharmony_ci /// 2. Calls `Array::is_empty`. 287a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 288a1d56debSopenharmony_ci #[test] 289a1d56debSopenharmony_ci fn ut_array_is_empty() { 290a1d56debSopenharmony_ci assert!(Array::new().is_empty()); 291a1d56debSopenharmony_ci assert!(!array!(1).is_empty()); 292a1d56debSopenharmony_ci } 293a1d56debSopenharmony_ci 294a1d56debSopenharmony_ci /// UT test for `Array::pop`. 295a1d56debSopenharmony_ci /// 296a1d56debSopenharmony_ci /// # Title 297a1d56debSopenharmony_ci /// ut_array_pop 298a1d56debSopenharmony_ci /// 299a1d56debSopenharmony_ci /// # Brief 300a1d56debSopenharmony_ci /// 1. Creates some `Array`s. 301a1d56debSopenharmony_ci /// 2. Calls `Array::pop`. 302a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 303a1d56debSopenharmony_ci #[test] 304a1d56debSopenharmony_ci fn ut_array_pop() { 305a1d56debSopenharmony_ci let mut array = array!(1); 306a1d56debSopenharmony_ci assert_eq!(array.pop(), Some(JsonValue::new_number(1.into()))); 307a1d56debSopenharmony_ci assert_eq!(array.pop(), None); 308a1d56debSopenharmony_ci } 309a1d56debSopenharmony_ci 310a1d56debSopenharmony_ci /// UT test for `Array::iter_mut`. 311a1d56debSopenharmony_ci /// 312a1d56debSopenharmony_ci /// # Title 313a1d56debSopenharmony_ci /// ut_array_iter_mut 314a1d56debSopenharmony_ci /// 315a1d56debSopenharmony_ci /// # Brief 316a1d56debSopenharmony_ci /// 1. Creates some `Array`s. 317a1d56debSopenharmony_ci /// 2. Calls `Array::iter_mut`. 318a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 319a1d56debSopenharmony_ci #[test] 320a1d56debSopenharmony_ci fn ut_array_iter_mut() { 321a1d56debSopenharmony_ci let mut array = array!(1); 322a1d56debSopenharmony_ci let mut iter = array.iter_mut(); 323a1d56debSopenharmony_ci assert_eq!(iter.next(), Some(&mut JsonValue::new_number(1.into()))); 324a1d56debSopenharmony_ci assert_eq!(iter.next(), None); 325a1d56debSopenharmony_ci } 326a1d56debSopenharmony_ci 327a1d56debSopenharmony_ci /// UT test for `Array::last`. 328a1d56debSopenharmony_ci /// 329a1d56debSopenharmony_ci /// # Title 330a1d56debSopenharmony_ci /// ut_array_last 331a1d56debSopenharmony_ci /// 332a1d56debSopenharmony_ci /// # Brief 333a1d56debSopenharmony_ci /// 1. Creates some `Array`s. 334a1d56debSopenharmony_ci /// 2. Calls `Array::last`. 335a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 336a1d56debSopenharmony_ci #[test] 337a1d56debSopenharmony_ci fn ut_array_last() { 338a1d56debSopenharmony_ci let array = array!(1); 339a1d56debSopenharmony_ci assert_eq!(array.last(), Some(&JsonValue::new_number(1.into()))); 340a1d56debSopenharmony_ci 341a1d56debSopenharmony_ci let array = Array::new(); 342a1d56debSopenharmony_ci assert_eq!(array.last(), None); 343a1d56debSopenharmony_ci } 344a1d56debSopenharmony_ci 345a1d56debSopenharmony_ci /// UT test for `Array::remove`. 346a1d56debSopenharmony_ci /// 347a1d56debSopenharmony_ci /// # Title 348a1d56debSopenharmony_ci /// ut_array_remove 349a1d56debSopenharmony_ci /// 350a1d56debSopenharmony_ci /// # Brief 351a1d56debSopenharmony_ci /// 1. Creates some `Array`s. 352a1d56debSopenharmony_ci /// 2. Calls `Array::remove`. 353a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 354a1d56debSopenharmony_ci #[test] 355a1d56debSopenharmony_ci fn ut_array_remove() { 356a1d56debSopenharmony_ci let mut array = array!(1); 357a1d56debSopenharmony_ci assert_eq!(array.remove(3), None); 358a1d56debSopenharmony_ci assert_eq!(array.remove(0), Some(JsonValue::new_number(1.into()))); 359a1d56debSopenharmony_ci } 360a1d56debSopenharmony_ci 361a1d56debSopenharmony_ci /// UT test for `Array::eq`. 362a1d56debSopenharmony_ci /// 363a1d56debSopenharmony_ci /// # Title 364a1d56debSopenharmony_ci /// ut_array_eq 365a1d56debSopenharmony_ci /// 366a1d56debSopenharmony_ci /// # Brief 367a1d56debSopenharmony_ci /// 1. Creates some `Array`s. 368a1d56debSopenharmony_ci /// 2. Calls `Array::eq`. 369a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 370a1d56debSopenharmony_ci #[test] 371a1d56debSopenharmony_ci fn ut_array_eq() { 372a1d56debSopenharmony_ci let array1 = array!(1); 373a1d56debSopenharmony_ci let array2 = array!(1, 2); 374a1d56debSopenharmony_ci let array3 = array!(1, 3); 375a1d56debSopenharmony_ci 376a1d56debSopenharmony_ci assert_eq!(array1, array1); 377a1d56debSopenharmony_ci assert_ne!(array1, array2); 378a1d56debSopenharmony_ci assert_ne!(array2, array3); 379a1d56debSopenharmony_ci } 380a1d56debSopenharmony_ci 381a1d56debSopenharmony_ci /// UT test for `Array::fmt`. 382a1d56debSopenharmony_ci /// 383a1d56debSopenharmony_ci /// # Title 384a1d56debSopenharmony_ci /// ut_array_fmt 385a1d56debSopenharmony_ci /// 386a1d56debSopenharmony_ci /// # Brief 387a1d56debSopenharmony_ci /// 1. Creates some `Array`s. 388a1d56debSopenharmony_ci /// 2. Calls `Array::fmt`. 389a1d56debSopenharmony_ci /// 3. Checks if the test results are correct. 390a1d56debSopenharmony_ci #[test] 391a1d56debSopenharmony_ci fn ut_array_fmt() { 392a1d56debSopenharmony_ci let array = array!(1, 2); 393a1d56debSopenharmony_ci assert_eq!(format!("{array}"), "[1,2]"); 394a1d56debSopenharmony_ci assert_eq!(format!("{array:?}"), "[1,2]"); 395a1d56debSopenharmony_ci } 396a1d56debSopenharmony_ci} 397