17e2e9c0cSopenharmony_ci#![allow( 27e2e9c0cSopenharmony_ci clippy::cast_lossless, 37e2e9c0cSopenharmony_ci clippy::decimal_literal_representation, 47e2e9c0cSopenharmony_ci clippy::derive_partial_eq_without_eq, 57e2e9c0cSopenharmony_ci clippy::empty_enum, 67e2e9c0cSopenharmony_ci clippy::manual_assert, 77e2e9c0cSopenharmony_ci clippy::needless_pass_by_value, 87e2e9c0cSopenharmony_ci clippy::uninlined_format_args, 97e2e9c0cSopenharmony_ci clippy::unreadable_literal 107e2e9c0cSopenharmony_ci)] 117e2e9c0cSopenharmony_ci#![cfg_attr(feature = "unstable", feature(never_type))] 127e2e9c0cSopenharmony_ci 137e2e9c0cSopenharmony_ciuse fnv::FnvHasher; 147e2e9c0cSopenharmony_ciuse serde::de::value::{F32Deserializer, F64Deserializer}; 157e2e9c0cSopenharmony_ciuse serde::de::{Deserialize, DeserializeOwned, Deserializer, IntoDeserializer}; 167e2e9c0cSopenharmony_ciuse serde_derive::Deserialize; 177e2e9c0cSopenharmony_ciuse serde_test::{assert_de_tokens, Configure, Token}; 187e2e9c0cSopenharmony_ciuse std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; 197e2e9c0cSopenharmony_ciuse std::default::Default; 207e2e9c0cSopenharmony_ciuse std::ffi::{CStr, CString, OsString}; 217e2e9c0cSopenharmony_ciuse std::fmt::Debug; 227e2e9c0cSopenharmony_ciuse std::iter; 237e2e9c0cSopenharmony_ciuse std::net; 247e2e9c0cSopenharmony_ciuse std::num::{ 257e2e9c0cSopenharmony_ci NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize, NonZeroU128, 267e2e9c0cSopenharmony_ci NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize, Wrapping, 277e2e9c0cSopenharmony_ci}; 287e2e9c0cSopenharmony_ciuse std::ops::Bound; 297e2e9c0cSopenharmony_ciuse std::path::{Path, PathBuf}; 307e2e9c0cSopenharmony_ciuse std::rc::{Rc, Weak as RcWeak}; 317e2e9c0cSopenharmony_ciuse std::sync::atomic::{ 327e2e9c0cSopenharmony_ci AtomicBool, AtomicI16, AtomicI32, AtomicI8, AtomicIsize, AtomicU16, AtomicU32, AtomicU8, 337e2e9c0cSopenharmony_ci AtomicUsize, Ordering, 347e2e9c0cSopenharmony_ci}; 357e2e9c0cSopenharmony_ci#[cfg(target_arch = "x86_64")] 367e2e9c0cSopenharmony_ciuse std::sync::atomic::{AtomicI64, AtomicU64}; 377e2e9c0cSopenharmony_ciuse std::sync::{Arc, Weak as ArcWeak}; 387e2e9c0cSopenharmony_ciuse std::time::{Duration, UNIX_EPOCH}; 397e2e9c0cSopenharmony_ci 407e2e9c0cSopenharmony_ci#[macro_use] 417e2e9c0cSopenharmony_cimod macros; 427e2e9c0cSopenharmony_ci 437e2e9c0cSopenharmony_ci////////////////////////////////////////////////////////////////////////// 447e2e9c0cSopenharmony_ci 457e2e9c0cSopenharmony_ci#[derive(Copy, Clone, PartialEq, Debug, Deserialize)] 467e2e9c0cSopenharmony_cistruct UnitStruct; 477e2e9c0cSopenharmony_ci 487e2e9c0cSopenharmony_ci#[derive(Copy, Clone, PartialEq, Debug, Deserialize)] 497e2e9c0cSopenharmony_cistruct GenericUnitStruct<const N: u8>; 507e2e9c0cSopenharmony_ci 517e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 527e2e9c0cSopenharmony_cistruct NewtypeStruct(i32); 537e2e9c0cSopenharmony_ci 547e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 557e2e9c0cSopenharmony_cistruct TupleStruct(i32, i32, i32); 567e2e9c0cSopenharmony_ci 577e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 587e2e9c0cSopenharmony_cistruct Struct { 597e2e9c0cSopenharmony_ci a: i32, 607e2e9c0cSopenharmony_ci b: i32, 617e2e9c0cSopenharmony_ci #[serde(skip_deserializing)] 627e2e9c0cSopenharmony_ci c: i32, 637e2e9c0cSopenharmony_ci} 647e2e9c0cSopenharmony_ci 657e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 667e2e9c0cSopenharmony_ci#[serde(default)] 677e2e9c0cSopenharmony_cistruct StructDefault<T> { 687e2e9c0cSopenharmony_ci a: i32, 697e2e9c0cSopenharmony_ci b: T, 707e2e9c0cSopenharmony_ci} 717e2e9c0cSopenharmony_ci 727e2e9c0cSopenharmony_ciimpl Default for StructDefault<String> { 737e2e9c0cSopenharmony_ci fn default() -> Self { 747e2e9c0cSopenharmony_ci StructDefault { 757e2e9c0cSopenharmony_ci a: 100, 767e2e9c0cSopenharmony_ci b: "default".to_string(), 777e2e9c0cSopenharmony_ci } 787e2e9c0cSopenharmony_ci } 797e2e9c0cSopenharmony_ci} 807e2e9c0cSopenharmony_ci 817e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 827e2e9c0cSopenharmony_cistruct StructSkipAll { 837e2e9c0cSopenharmony_ci #[serde(skip_deserializing)] 847e2e9c0cSopenharmony_ci a: i32, 857e2e9c0cSopenharmony_ci} 867e2e9c0cSopenharmony_ci 877e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 887e2e9c0cSopenharmony_ci#[serde(default)] 897e2e9c0cSopenharmony_cistruct StructSkipDefault { 907e2e9c0cSopenharmony_ci #[serde(skip_deserializing)] 917e2e9c0cSopenharmony_ci a: i32, 927e2e9c0cSopenharmony_ci} 937e2e9c0cSopenharmony_ci 947e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 957e2e9c0cSopenharmony_ci#[serde(default)] 967e2e9c0cSopenharmony_cistruct StructSkipDefaultGeneric<T> { 977e2e9c0cSopenharmony_ci #[serde(skip_deserializing)] 987e2e9c0cSopenharmony_ci t: T, 997e2e9c0cSopenharmony_ci} 1007e2e9c0cSopenharmony_ci 1017e2e9c0cSopenharmony_ciimpl Default for StructSkipDefault { 1027e2e9c0cSopenharmony_ci fn default() -> Self { 1037e2e9c0cSopenharmony_ci StructSkipDefault { a: 16 } 1047e2e9c0cSopenharmony_ci } 1057e2e9c0cSopenharmony_ci} 1067e2e9c0cSopenharmony_ci 1077e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 1087e2e9c0cSopenharmony_ci#[serde(deny_unknown_fields)] 1097e2e9c0cSopenharmony_cistruct StructSkipAllDenyUnknown { 1107e2e9c0cSopenharmony_ci #[serde(skip_deserializing)] 1117e2e9c0cSopenharmony_ci a: i32, 1127e2e9c0cSopenharmony_ci} 1137e2e9c0cSopenharmony_ci 1147e2e9c0cSopenharmony_ci#[derive(Default, PartialEq, Debug)] 1157e2e9c0cSopenharmony_cistruct NotDeserializable; 1167e2e9c0cSopenharmony_ci 1177e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 1187e2e9c0cSopenharmony_cienum Enum { 1197e2e9c0cSopenharmony_ci #[allow(dead_code)] 1207e2e9c0cSopenharmony_ci #[serde(skip_deserializing)] 1217e2e9c0cSopenharmony_ci Skipped, 1227e2e9c0cSopenharmony_ci Unit, 1237e2e9c0cSopenharmony_ci Simple(i32), 1247e2e9c0cSopenharmony_ci Seq(i32, i32, i32), 1257e2e9c0cSopenharmony_ci Map { 1267e2e9c0cSopenharmony_ci a: i32, 1277e2e9c0cSopenharmony_ci b: i32, 1287e2e9c0cSopenharmony_ci c: i32, 1297e2e9c0cSopenharmony_ci }, 1307e2e9c0cSopenharmony_ci SimpleWithSkipped(#[serde(skip_deserializing)] NotDeserializable), 1317e2e9c0cSopenharmony_ci} 1327e2e9c0cSopenharmony_ci 1337e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug, Deserialize)] 1347e2e9c0cSopenharmony_cienum EnumOther { 1357e2e9c0cSopenharmony_ci Unit, 1367e2e9c0cSopenharmony_ci #[serde(other)] 1377e2e9c0cSopenharmony_ci Other, 1387e2e9c0cSopenharmony_ci} 1397e2e9c0cSopenharmony_ci 1407e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug)] 1417e2e9c0cSopenharmony_cistruct IgnoredAny; 1427e2e9c0cSopenharmony_ci 1437e2e9c0cSopenharmony_ciimpl<'de> Deserialize<'de> for IgnoredAny { 1447e2e9c0cSopenharmony_ci fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> 1457e2e9c0cSopenharmony_ci where 1467e2e9c0cSopenharmony_ci D: Deserializer<'de>, 1477e2e9c0cSopenharmony_ci { 1487e2e9c0cSopenharmony_ci serde::de::IgnoredAny::deserialize(deserializer)?; 1497e2e9c0cSopenharmony_ci Ok(IgnoredAny) 1507e2e9c0cSopenharmony_ci } 1517e2e9c0cSopenharmony_ci} 1527e2e9c0cSopenharmony_ci 1537e2e9c0cSopenharmony_ci////////////////////////////////////////////////////////////////////////// 1547e2e9c0cSopenharmony_ci 1557e2e9c0cSopenharmony_ci#[track_caller] 1567e2e9c0cSopenharmony_cifn test<'de, T>(value: T, tokens: &'de [Token]) 1577e2e9c0cSopenharmony_ciwhere 1587e2e9c0cSopenharmony_ci T: Deserialize<'de> + PartialEq + Debug, 1597e2e9c0cSopenharmony_ci{ 1607e2e9c0cSopenharmony_ci // Test ser/de roundtripping 1617e2e9c0cSopenharmony_ci assert_de_tokens(&value, tokens); 1627e2e9c0cSopenharmony_ci 1637e2e9c0cSopenharmony_ci // Test that the tokens are ignorable 1647e2e9c0cSopenharmony_ci assert_de_tokens_ignore(tokens); 1657e2e9c0cSopenharmony_ci} 1667e2e9c0cSopenharmony_ci 1677e2e9c0cSopenharmony_ci#[derive(Debug)] 1687e2e9c0cSopenharmony_cistruct SkipPartialEq<T>(T); 1697e2e9c0cSopenharmony_ci 1707e2e9c0cSopenharmony_ciimpl<'de, T> Deserialize<'de> for SkipPartialEq<T> 1717e2e9c0cSopenharmony_ciwhere 1727e2e9c0cSopenharmony_ci T: Deserialize<'de>, 1737e2e9c0cSopenharmony_ci{ 1747e2e9c0cSopenharmony_ci fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> 1757e2e9c0cSopenharmony_ci where 1767e2e9c0cSopenharmony_ci D: Deserializer<'de>, 1777e2e9c0cSopenharmony_ci { 1787e2e9c0cSopenharmony_ci T::deserialize(deserializer).map(SkipPartialEq) 1797e2e9c0cSopenharmony_ci } 1807e2e9c0cSopenharmony_ci} 1817e2e9c0cSopenharmony_ci 1827e2e9c0cSopenharmony_ciimpl<T> PartialEq for SkipPartialEq<T> { 1837e2e9c0cSopenharmony_ci fn eq(&self, _other: &Self) -> bool { 1847e2e9c0cSopenharmony_ci true 1857e2e9c0cSopenharmony_ci } 1867e2e9c0cSopenharmony_ci} 1877e2e9c0cSopenharmony_ci 1887e2e9c0cSopenharmony_ci#[track_caller] 1897e2e9c0cSopenharmony_cifn assert_de_tokens_ignore(ignorable_tokens: &[Token]) { 1907e2e9c0cSopenharmony_ci #[derive(PartialEq, Debug, Deserialize)] 1917e2e9c0cSopenharmony_ci struct IgnoreBase { 1927e2e9c0cSopenharmony_ci a: i32, 1937e2e9c0cSopenharmony_ci } 1947e2e9c0cSopenharmony_ci 1957e2e9c0cSopenharmony_ci // Embed the tokens to be ignored in the normal token 1967e2e9c0cSopenharmony_ci // stream for an IgnoreBase type 1977e2e9c0cSopenharmony_ci let concated_tokens: Vec<Token> = vec![ 1987e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 1997e2e9c0cSopenharmony_ci Token::Str("a"), 2007e2e9c0cSopenharmony_ci Token::I32(1), 2017e2e9c0cSopenharmony_ci Token::Str("ignored"), 2027e2e9c0cSopenharmony_ci ] 2037e2e9c0cSopenharmony_ci .into_iter() 2047e2e9c0cSopenharmony_ci .chain(ignorable_tokens.iter().copied()) 2057e2e9c0cSopenharmony_ci .chain(iter::once(Token::MapEnd)) 2067e2e9c0cSopenharmony_ci .collect(); 2077e2e9c0cSopenharmony_ci 2087e2e9c0cSopenharmony_ci let expected = IgnoreBase { a: 1 }; 2097e2e9c0cSopenharmony_ci assert_de_tokens(&expected, &concated_tokens); 2107e2e9c0cSopenharmony_ci} 2117e2e9c0cSopenharmony_ci 2127e2e9c0cSopenharmony_ci////////////////////////////////////////////////////////////////////////// 2137e2e9c0cSopenharmony_ci 2147e2e9c0cSopenharmony_ci#[test] 2157e2e9c0cSopenharmony_cifn test_bool() { 2167e2e9c0cSopenharmony_ci test(true, &[Token::Bool(true)]); 2177e2e9c0cSopenharmony_ci test(false, &[Token::Bool(false)]); 2187e2e9c0cSopenharmony_ci} 2197e2e9c0cSopenharmony_ci 2207e2e9c0cSopenharmony_ci#[test] 2217e2e9c0cSopenharmony_cifn test_i8() { 2227e2e9c0cSopenharmony_ci let test = test::<i8>; 2237e2e9c0cSopenharmony_ci 2247e2e9c0cSopenharmony_ci // from signed 2257e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 2267e2e9c0cSopenharmony_ci test(-128, &[Token::I16(-128)]); 2277e2e9c0cSopenharmony_ci test(-128, &[Token::I32(-128)]); 2287e2e9c0cSopenharmony_ci test(-128, &[Token::I64(-128)]); 2297e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 2307e2e9c0cSopenharmony_ci test(127, &[Token::I16(127)]); 2317e2e9c0cSopenharmony_ci test(127, &[Token::I32(127)]); 2327e2e9c0cSopenharmony_ci test(127, &[Token::I64(127)]); 2337e2e9c0cSopenharmony_ci 2347e2e9c0cSopenharmony_ci // from unsigned 2357e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 2367e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 2377e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 2387e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 2397e2e9c0cSopenharmony_ci test(127, &[Token::U8(127)]); 2407e2e9c0cSopenharmony_ci test(127, &[Token::U16(127)]); 2417e2e9c0cSopenharmony_ci test(127, &[Token::U32(127)]); 2427e2e9c0cSopenharmony_ci test(127, &[Token::U64(127)]); 2437e2e9c0cSopenharmony_ci} 2447e2e9c0cSopenharmony_ci 2457e2e9c0cSopenharmony_ci#[test] 2467e2e9c0cSopenharmony_cifn test_i16() { 2477e2e9c0cSopenharmony_ci let test = test::<i16>; 2487e2e9c0cSopenharmony_ci 2497e2e9c0cSopenharmony_ci // from signed 2507e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 2517e2e9c0cSopenharmony_ci test(-32768, &[Token::I16(-32768)]); 2527e2e9c0cSopenharmony_ci test(-32768, &[Token::I32(-32768)]); 2537e2e9c0cSopenharmony_ci test(-32768, &[Token::I64(-32768)]); 2547e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 2557e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 2567e2e9c0cSopenharmony_ci test(32767, &[Token::I32(32767)]); 2577e2e9c0cSopenharmony_ci test(32767, &[Token::I64(32767)]); 2587e2e9c0cSopenharmony_ci 2597e2e9c0cSopenharmony_ci // from unsigned 2607e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 2617e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 2627e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 2637e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 2647e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 2657e2e9c0cSopenharmony_ci test(32767, &[Token::U16(32767)]); 2667e2e9c0cSopenharmony_ci test(32767, &[Token::U32(32767)]); 2677e2e9c0cSopenharmony_ci test(32767, &[Token::U64(32767)]); 2687e2e9c0cSopenharmony_ci} 2697e2e9c0cSopenharmony_ci 2707e2e9c0cSopenharmony_ci#[test] 2717e2e9c0cSopenharmony_cifn test_i32() { 2727e2e9c0cSopenharmony_ci let test = test::<i32>; 2737e2e9c0cSopenharmony_ci 2747e2e9c0cSopenharmony_ci // from signed 2757e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 2767e2e9c0cSopenharmony_ci test(-32768, &[Token::I16(-32768)]); 2777e2e9c0cSopenharmony_ci test(-2147483648, &[Token::I32(-2147483648)]); 2787e2e9c0cSopenharmony_ci test(-2147483648, &[Token::I64(-2147483648)]); 2797e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 2807e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 2817e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 2827e2e9c0cSopenharmony_ci test(2147483647, &[Token::I64(2147483647)]); 2837e2e9c0cSopenharmony_ci 2847e2e9c0cSopenharmony_ci // from unsigned 2857e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 2867e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 2877e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 2887e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 2897e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 2907e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 2917e2e9c0cSopenharmony_ci test(2147483647, &[Token::U32(2147483647)]); 2927e2e9c0cSopenharmony_ci test(2147483647, &[Token::U64(2147483647)]); 2937e2e9c0cSopenharmony_ci} 2947e2e9c0cSopenharmony_ci 2957e2e9c0cSopenharmony_ci#[test] 2967e2e9c0cSopenharmony_cifn test_i64() { 2977e2e9c0cSopenharmony_ci let test = test::<i64>; 2987e2e9c0cSopenharmony_ci 2997e2e9c0cSopenharmony_ci // from signed 3007e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 3017e2e9c0cSopenharmony_ci test(-32768, &[Token::I16(-32768)]); 3027e2e9c0cSopenharmony_ci test(-2147483648, &[Token::I32(-2147483648)]); 3037e2e9c0cSopenharmony_ci test(-9223372036854775808, &[Token::I64(-9223372036854775808)]); 3047e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 3057e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 3067e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 3077e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::I64(9223372036854775807)]); 3087e2e9c0cSopenharmony_ci 3097e2e9c0cSopenharmony_ci // from unsigned 3107e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 3117e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 3127e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 3137e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 3147e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 3157e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 3167e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 3177e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::U64(9223372036854775807)]); 3187e2e9c0cSopenharmony_ci} 3197e2e9c0cSopenharmony_ci 3207e2e9c0cSopenharmony_ci#[test] 3217e2e9c0cSopenharmony_cifn test_i128() { 3227e2e9c0cSopenharmony_ci let test = test::<i128>; 3237e2e9c0cSopenharmony_ci 3247e2e9c0cSopenharmony_ci // from signed 3257e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 3267e2e9c0cSopenharmony_ci test(-32768, &[Token::I16(-32768)]); 3277e2e9c0cSopenharmony_ci test(-2147483648, &[Token::I32(-2147483648)]); 3287e2e9c0cSopenharmony_ci test(-9223372036854775808, &[Token::I64(-9223372036854775808)]); 3297e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 3307e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 3317e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 3327e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::I64(9223372036854775807)]); 3337e2e9c0cSopenharmony_ci 3347e2e9c0cSopenharmony_ci // from unsigned 3357e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 3367e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 3377e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 3387e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 3397e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 3407e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 3417e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 3427e2e9c0cSopenharmony_ci test(18446744073709551615, &[Token::U64(18446744073709551615)]); 3437e2e9c0cSopenharmony_ci} 3447e2e9c0cSopenharmony_ci 3457e2e9c0cSopenharmony_ci#[test] 3467e2e9c0cSopenharmony_cifn test_isize() { 3477e2e9c0cSopenharmony_ci let test = test::<isize>; 3487e2e9c0cSopenharmony_ci 3497e2e9c0cSopenharmony_ci // from signed 3507e2e9c0cSopenharmony_ci test(-10, &[Token::I8(-10)]); 3517e2e9c0cSopenharmony_ci test(-10, &[Token::I16(-10)]); 3527e2e9c0cSopenharmony_ci test(-10, &[Token::I32(-10)]); 3537e2e9c0cSopenharmony_ci test(-10, &[Token::I64(-10)]); 3547e2e9c0cSopenharmony_ci test(10, &[Token::I8(10)]); 3557e2e9c0cSopenharmony_ci test(10, &[Token::I16(10)]); 3567e2e9c0cSopenharmony_ci test(10, &[Token::I32(10)]); 3577e2e9c0cSopenharmony_ci test(10, &[Token::I64(10)]); 3587e2e9c0cSopenharmony_ci 3597e2e9c0cSopenharmony_ci // from unsigned 3607e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 3617e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 3627e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 3637e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 3647e2e9c0cSopenharmony_ci test(10, &[Token::U8(10)]); 3657e2e9c0cSopenharmony_ci test(10, &[Token::U16(10)]); 3667e2e9c0cSopenharmony_ci test(10, &[Token::U32(10)]); 3677e2e9c0cSopenharmony_ci test(10, &[Token::U64(10)]); 3687e2e9c0cSopenharmony_ci} 3697e2e9c0cSopenharmony_ci 3707e2e9c0cSopenharmony_ci#[test] 3717e2e9c0cSopenharmony_cifn test_u8() { 3727e2e9c0cSopenharmony_ci let test = test::<u8>; 3737e2e9c0cSopenharmony_ci 3747e2e9c0cSopenharmony_ci // from signed 3757e2e9c0cSopenharmony_ci test(0, &[Token::I8(0)]); 3767e2e9c0cSopenharmony_ci test(0, &[Token::I16(0)]); 3777e2e9c0cSopenharmony_ci test(0, &[Token::I32(0)]); 3787e2e9c0cSopenharmony_ci test(0, &[Token::I64(0)]); 3797e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 3807e2e9c0cSopenharmony_ci test(255, &[Token::I16(255)]); 3817e2e9c0cSopenharmony_ci test(255, &[Token::I32(255)]); 3827e2e9c0cSopenharmony_ci test(255, &[Token::I64(255)]); 3837e2e9c0cSopenharmony_ci 3847e2e9c0cSopenharmony_ci // from unsigned 3857e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 3867e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 3877e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 3887e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 3897e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 3907e2e9c0cSopenharmony_ci test(255, &[Token::U16(255)]); 3917e2e9c0cSopenharmony_ci test(255, &[Token::U32(255)]); 3927e2e9c0cSopenharmony_ci test(255, &[Token::U64(255)]); 3937e2e9c0cSopenharmony_ci} 3947e2e9c0cSopenharmony_ci 3957e2e9c0cSopenharmony_ci#[test] 3967e2e9c0cSopenharmony_cifn test_u16() { 3977e2e9c0cSopenharmony_ci let test = test::<u16>; 3987e2e9c0cSopenharmony_ci 3997e2e9c0cSopenharmony_ci // from signed 4007e2e9c0cSopenharmony_ci test(0, &[Token::I8(0)]); 4017e2e9c0cSopenharmony_ci test(0, &[Token::I16(0)]); 4027e2e9c0cSopenharmony_ci test(0, &[Token::I32(0)]); 4037e2e9c0cSopenharmony_ci test(0, &[Token::I64(0)]); 4047e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 4057e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 4067e2e9c0cSopenharmony_ci test(65535, &[Token::I32(65535)]); 4077e2e9c0cSopenharmony_ci test(65535, &[Token::I64(65535)]); 4087e2e9c0cSopenharmony_ci 4097e2e9c0cSopenharmony_ci // from unsigned 4107e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 4117e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 4127e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 4137e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 4147e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 4157e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 4167e2e9c0cSopenharmony_ci test(65535, &[Token::U32(65535)]); 4177e2e9c0cSopenharmony_ci test(65535, &[Token::U64(65535)]); 4187e2e9c0cSopenharmony_ci} 4197e2e9c0cSopenharmony_ci 4207e2e9c0cSopenharmony_ci#[test] 4217e2e9c0cSopenharmony_cifn test_u32() { 4227e2e9c0cSopenharmony_ci let test = test::<u32>; 4237e2e9c0cSopenharmony_ci 4247e2e9c0cSopenharmony_ci // from signed 4257e2e9c0cSopenharmony_ci test(0, &[Token::I8(0)]); 4267e2e9c0cSopenharmony_ci test(0, &[Token::I16(0)]); 4277e2e9c0cSopenharmony_ci test(0, &[Token::I32(0)]); 4287e2e9c0cSopenharmony_ci test(0, &[Token::I64(0)]); 4297e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 4307e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 4317e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 4327e2e9c0cSopenharmony_ci test(4294967295, &[Token::I64(4294967295)]); 4337e2e9c0cSopenharmony_ci 4347e2e9c0cSopenharmony_ci // from unsigned 4357e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 4367e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 4377e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 4387e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 4397e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 4407e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 4417e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 4427e2e9c0cSopenharmony_ci test(4294967295, &[Token::U64(4294967295)]); 4437e2e9c0cSopenharmony_ci} 4447e2e9c0cSopenharmony_ci 4457e2e9c0cSopenharmony_ci#[test] 4467e2e9c0cSopenharmony_cifn test_u64() { 4477e2e9c0cSopenharmony_ci let test = test::<u64>; 4487e2e9c0cSopenharmony_ci 4497e2e9c0cSopenharmony_ci // from signed 4507e2e9c0cSopenharmony_ci test(0, &[Token::I8(0)]); 4517e2e9c0cSopenharmony_ci test(0, &[Token::I16(0)]); 4527e2e9c0cSopenharmony_ci test(0, &[Token::I32(0)]); 4537e2e9c0cSopenharmony_ci test(0, &[Token::I64(0)]); 4547e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 4557e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 4567e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 4577e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::I64(9223372036854775807)]); 4587e2e9c0cSopenharmony_ci 4597e2e9c0cSopenharmony_ci // from unsigned 4607e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 4617e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 4627e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 4637e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 4647e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 4657e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 4667e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 4677e2e9c0cSopenharmony_ci test(18446744073709551615, &[Token::U64(18446744073709551615)]); 4687e2e9c0cSopenharmony_ci} 4697e2e9c0cSopenharmony_ci 4707e2e9c0cSopenharmony_ci#[test] 4717e2e9c0cSopenharmony_cifn test_u128() { 4727e2e9c0cSopenharmony_ci let test = test::<u128>; 4737e2e9c0cSopenharmony_ci 4747e2e9c0cSopenharmony_ci // from signed 4757e2e9c0cSopenharmony_ci test(0, &[Token::I8(0)]); 4767e2e9c0cSopenharmony_ci test(0, &[Token::I16(0)]); 4777e2e9c0cSopenharmony_ci test(0, &[Token::I32(0)]); 4787e2e9c0cSopenharmony_ci test(0, &[Token::I64(0)]); 4797e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 4807e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 4817e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 4827e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::I64(9223372036854775807)]); 4837e2e9c0cSopenharmony_ci 4847e2e9c0cSopenharmony_ci // from unsigned 4857e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 4867e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 4877e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 4887e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 4897e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 4907e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 4917e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 4927e2e9c0cSopenharmony_ci test(18446744073709551615, &[Token::U64(18446744073709551615)]); 4937e2e9c0cSopenharmony_ci} 4947e2e9c0cSopenharmony_ci 4957e2e9c0cSopenharmony_ci#[test] 4967e2e9c0cSopenharmony_cifn test_usize() { 4977e2e9c0cSopenharmony_ci let test = test::<usize>; 4987e2e9c0cSopenharmony_ci 4997e2e9c0cSopenharmony_ci // from signed 5007e2e9c0cSopenharmony_ci test(0, &[Token::I8(0)]); 5017e2e9c0cSopenharmony_ci test(0, &[Token::I16(0)]); 5027e2e9c0cSopenharmony_ci test(0, &[Token::I32(0)]); 5037e2e9c0cSopenharmony_ci test(0, &[Token::I64(0)]); 5047e2e9c0cSopenharmony_ci test(10, &[Token::I8(10)]); 5057e2e9c0cSopenharmony_ci test(10, &[Token::I16(10)]); 5067e2e9c0cSopenharmony_ci test(10, &[Token::I32(10)]); 5077e2e9c0cSopenharmony_ci test(10, &[Token::I64(10)]); 5087e2e9c0cSopenharmony_ci 5097e2e9c0cSopenharmony_ci // from unsigned 5107e2e9c0cSopenharmony_ci test(0, &[Token::U8(0)]); 5117e2e9c0cSopenharmony_ci test(0, &[Token::U16(0)]); 5127e2e9c0cSopenharmony_ci test(0, &[Token::U32(0)]); 5137e2e9c0cSopenharmony_ci test(0, &[Token::U64(0)]); 5147e2e9c0cSopenharmony_ci test(10, &[Token::U8(10)]); 5157e2e9c0cSopenharmony_ci test(10, &[Token::U16(10)]); 5167e2e9c0cSopenharmony_ci test(10, &[Token::U32(10)]); 5177e2e9c0cSopenharmony_ci test(10, &[Token::U64(10)]); 5187e2e9c0cSopenharmony_ci} 5197e2e9c0cSopenharmony_ci 5207e2e9c0cSopenharmony_ci#[test] 5217e2e9c0cSopenharmony_cifn test_nonzero_i8() { 5227e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroI8::new(value).unwrap(), tokens); 5237e2e9c0cSopenharmony_ci 5247e2e9c0cSopenharmony_ci // from signed 5257e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 5267e2e9c0cSopenharmony_ci test(-128, &[Token::I16(-128)]); 5277e2e9c0cSopenharmony_ci test(-128, &[Token::I32(-128)]); 5287e2e9c0cSopenharmony_ci test(-128, &[Token::I64(-128)]); 5297e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 5307e2e9c0cSopenharmony_ci test(127, &[Token::I16(127)]); 5317e2e9c0cSopenharmony_ci test(127, &[Token::I32(127)]); 5327e2e9c0cSopenharmony_ci test(127, &[Token::I64(127)]); 5337e2e9c0cSopenharmony_ci 5347e2e9c0cSopenharmony_ci // from unsigned 5357e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 5367e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 5377e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 5387e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 5397e2e9c0cSopenharmony_ci test(127, &[Token::U8(127)]); 5407e2e9c0cSopenharmony_ci test(127, &[Token::U16(127)]); 5417e2e9c0cSopenharmony_ci test(127, &[Token::U32(127)]); 5427e2e9c0cSopenharmony_ci test(127, &[Token::U64(127)]); 5437e2e9c0cSopenharmony_ci} 5447e2e9c0cSopenharmony_ci 5457e2e9c0cSopenharmony_ci#[test] 5467e2e9c0cSopenharmony_cifn test_nonzero_i16() { 5477e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroI16::new(value).unwrap(), tokens); 5487e2e9c0cSopenharmony_ci 5497e2e9c0cSopenharmony_ci // from signed 5507e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 5517e2e9c0cSopenharmony_ci test(-32768, &[Token::I16(-32768)]); 5527e2e9c0cSopenharmony_ci test(-32768, &[Token::I32(-32768)]); 5537e2e9c0cSopenharmony_ci test(-32768, &[Token::I64(-32768)]); 5547e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 5557e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 5567e2e9c0cSopenharmony_ci test(32767, &[Token::I32(32767)]); 5577e2e9c0cSopenharmony_ci test(32767, &[Token::I64(32767)]); 5587e2e9c0cSopenharmony_ci 5597e2e9c0cSopenharmony_ci // from unsigned 5607e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 5617e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 5627e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 5637e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 5647e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 5657e2e9c0cSopenharmony_ci test(32767, &[Token::U16(32767)]); 5667e2e9c0cSopenharmony_ci test(32767, &[Token::U32(32767)]); 5677e2e9c0cSopenharmony_ci test(32767, &[Token::U64(32767)]); 5687e2e9c0cSopenharmony_ci} 5697e2e9c0cSopenharmony_ci 5707e2e9c0cSopenharmony_ci#[test] 5717e2e9c0cSopenharmony_cifn test_nonzero_i32() { 5727e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroI32::new(value).unwrap(), tokens); 5737e2e9c0cSopenharmony_ci 5747e2e9c0cSopenharmony_ci // from signed 5757e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 5767e2e9c0cSopenharmony_ci test(-32768, &[Token::I16(-32768)]); 5777e2e9c0cSopenharmony_ci test(-2147483648, &[Token::I32(-2147483648)]); 5787e2e9c0cSopenharmony_ci test(-2147483648, &[Token::I64(-2147483648)]); 5797e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 5807e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 5817e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 5827e2e9c0cSopenharmony_ci test(2147483647, &[Token::I64(2147483647)]); 5837e2e9c0cSopenharmony_ci 5847e2e9c0cSopenharmony_ci // from unsigned 5857e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 5867e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 5877e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 5887e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 5897e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 5907e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 5917e2e9c0cSopenharmony_ci test(2147483647, &[Token::U32(2147483647)]); 5927e2e9c0cSopenharmony_ci test(2147483647, &[Token::U64(2147483647)]); 5937e2e9c0cSopenharmony_ci} 5947e2e9c0cSopenharmony_ci 5957e2e9c0cSopenharmony_ci#[test] 5967e2e9c0cSopenharmony_cifn test_nonzero_i64() { 5977e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroI64::new(value).unwrap(), tokens); 5987e2e9c0cSopenharmony_ci 5997e2e9c0cSopenharmony_ci // from signed 6007e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 6017e2e9c0cSopenharmony_ci test(-32768, &[Token::I16(-32768)]); 6027e2e9c0cSopenharmony_ci test(-2147483648, &[Token::I32(-2147483648)]); 6037e2e9c0cSopenharmony_ci test(-9223372036854775808, &[Token::I64(-9223372036854775808)]); 6047e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 6057e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 6067e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 6077e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::I64(9223372036854775807)]); 6087e2e9c0cSopenharmony_ci 6097e2e9c0cSopenharmony_ci // from unsigned 6107e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 6117e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 6127e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 6137e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 6147e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 6157e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 6167e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 6177e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::U64(9223372036854775807)]); 6187e2e9c0cSopenharmony_ci} 6197e2e9c0cSopenharmony_ci 6207e2e9c0cSopenharmony_ci#[test] 6217e2e9c0cSopenharmony_cifn test_nonzero_i128() { 6227e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroI128::new(value).unwrap(), tokens); 6237e2e9c0cSopenharmony_ci 6247e2e9c0cSopenharmony_ci // from signed 6257e2e9c0cSopenharmony_ci test(-128, &[Token::I8(-128)]); 6267e2e9c0cSopenharmony_ci test(-32768, &[Token::I16(-32768)]); 6277e2e9c0cSopenharmony_ci test(-2147483648, &[Token::I32(-2147483648)]); 6287e2e9c0cSopenharmony_ci test(-9223372036854775808, &[Token::I64(-9223372036854775808)]); 6297e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 6307e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 6317e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 6327e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::I64(9223372036854775807)]); 6337e2e9c0cSopenharmony_ci 6347e2e9c0cSopenharmony_ci // from unsigned 6357e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 6367e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 6377e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 6387e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 6397e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 6407e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 6417e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 6427e2e9c0cSopenharmony_ci test(18446744073709551615, &[Token::U64(18446744073709551615)]); 6437e2e9c0cSopenharmony_ci} 6447e2e9c0cSopenharmony_ci 6457e2e9c0cSopenharmony_ci#[test] 6467e2e9c0cSopenharmony_cifn test_nonzero_isize() { 6477e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroIsize::new(value).unwrap(), tokens); 6487e2e9c0cSopenharmony_ci 6497e2e9c0cSopenharmony_ci // from signed 6507e2e9c0cSopenharmony_ci test(-10, &[Token::I8(-10)]); 6517e2e9c0cSopenharmony_ci test(-10, &[Token::I16(-10)]); 6527e2e9c0cSopenharmony_ci test(-10, &[Token::I32(-10)]); 6537e2e9c0cSopenharmony_ci test(-10, &[Token::I64(-10)]); 6547e2e9c0cSopenharmony_ci test(10, &[Token::I8(10)]); 6557e2e9c0cSopenharmony_ci test(10, &[Token::I16(10)]); 6567e2e9c0cSopenharmony_ci test(10, &[Token::I32(10)]); 6577e2e9c0cSopenharmony_ci test(10, &[Token::I64(10)]); 6587e2e9c0cSopenharmony_ci 6597e2e9c0cSopenharmony_ci // from unsigned 6607e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 6617e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 6627e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 6637e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 6647e2e9c0cSopenharmony_ci test(10, &[Token::U8(10)]); 6657e2e9c0cSopenharmony_ci test(10, &[Token::U16(10)]); 6667e2e9c0cSopenharmony_ci test(10, &[Token::U32(10)]); 6677e2e9c0cSopenharmony_ci test(10, &[Token::U64(10)]); 6687e2e9c0cSopenharmony_ci} 6697e2e9c0cSopenharmony_ci 6707e2e9c0cSopenharmony_ci#[test] 6717e2e9c0cSopenharmony_cifn test_nonzero_u8() { 6727e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroU8::new(value).unwrap(), tokens); 6737e2e9c0cSopenharmony_ci 6747e2e9c0cSopenharmony_ci // from signed 6757e2e9c0cSopenharmony_ci test(1, &[Token::I8(1)]); 6767e2e9c0cSopenharmony_ci test(1, &[Token::I16(1)]); 6777e2e9c0cSopenharmony_ci test(1, &[Token::I32(1)]); 6787e2e9c0cSopenharmony_ci test(1, &[Token::I64(1)]); 6797e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 6807e2e9c0cSopenharmony_ci test(255, &[Token::I16(255)]); 6817e2e9c0cSopenharmony_ci test(255, &[Token::I32(255)]); 6827e2e9c0cSopenharmony_ci test(255, &[Token::I64(255)]); 6837e2e9c0cSopenharmony_ci 6847e2e9c0cSopenharmony_ci // from unsigned 6857e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 6867e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 6877e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 6887e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 6897e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 6907e2e9c0cSopenharmony_ci test(255, &[Token::U16(255)]); 6917e2e9c0cSopenharmony_ci test(255, &[Token::U32(255)]); 6927e2e9c0cSopenharmony_ci test(255, &[Token::U64(255)]); 6937e2e9c0cSopenharmony_ci} 6947e2e9c0cSopenharmony_ci 6957e2e9c0cSopenharmony_ci#[test] 6967e2e9c0cSopenharmony_cifn test_nonzero_u16() { 6977e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroU16::new(value).unwrap(), tokens); 6987e2e9c0cSopenharmony_ci 6997e2e9c0cSopenharmony_ci // from signed 7007e2e9c0cSopenharmony_ci test(1, &[Token::I8(1)]); 7017e2e9c0cSopenharmony_ci test(1, &[Token::I16(1)]); 7027e2e9c0cSopenharmony_ci test(1, &[Token::I32(1)]); 7037e2e9c0cSopenharmony_ci test(1, &[Token::I64(1)]); 7047e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 7057e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 7067e2e9c0cSopenharmony_ci test(65535, &[Token::I32(65535)]); 7077e2e9c0cSopenharmony_ci test(65535, &[Token::I64(65535)]); 7087e2e9c0cSopenharmony_ci 7097e2e9c0cSopenharmony_ci // from unsigned 7107e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 7117e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 7127e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 7137e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 7147e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 7157e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 7167e2e9c0cSopenharmony_ci test(65535, &[Token::U32(65535)]); 7177e2e9c0cSopenharmony_ci test(65535, &[Token::U64(65535)]); 7187e2e9c0cSopenharmony_ci} 7197e2e9c0cSopenharmony_ci 7207e2e9c0cSopenharmony_ci#[test] 7217e2e9c0cSopenharmony_cifn test_nonzero_u32() { 7227e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroU32::new(value).unwrap(), tokens); 7237e2e9c0cSopenharmony_ci 7247e2e9c0cSopenharmony_ci // from signed 7257e2e9c0cSopenharmony_ci test(1, &[Token::I8(1)]); 7267e2e9c0cSopenharmony_ci test(1, &[Token::I16(1)]); 7277e2e9c0cSopenharmony_ci test(1, &[Token::I32(1)]); 7287e2e9c0cSopenharmony_ci test(1, &[Token::I64(1)]); 7297e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 7307e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 7317e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 7327e2e9c0cSopenharmony_ci test(4294967295, &[Token::I64(4294967295)]); 7337e2e9c0cSopenharmony_ci 7347e2e9c0cSopenharmony_ci // from unsigned 7357e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 7367e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 7377e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 7387e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 7397e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 7407e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 7417e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 7427e2e9c0cSopenharmony_ci test(4294967295, &[Token::U64(4294967295)]); 7437e2e9c0cSopenharmony_ci} 7447e2e9c0cSopenharmony_ci 7457e2e9c0cSopenharmony_ci#[test] 7467e2e9c0cSopenharmony_cifn test_nonzero_u64() { 7477e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroU64::new(value).unwrap(), tokens); 7487e2e9c0cSopenharmony_ci 7497e2e9c0cSopenharmony_ci // from signed 7507e2e9c0cSopenharmony_ci test(1, &[Token::I8(1)]); 7517e2e9c0cSopenharmony_ci test(1, &[Token::I16(1)]); 7527e2e9c0cSopenharmony_ci test(1, &[Token::I32(1)]); 7537e2e9c0cSopenharmony_ci test(1, &[Token::I64(1)]); 7547e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 7557e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 7567e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 7577e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::I64(9223372036854775807)]); 7587e2e9c0cSopenharmony_ci 7597e2e9c0cSopenharmony_ci // from unsigned 7607e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 7617e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 7627e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 7637e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 7647e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 7657e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 7667e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 7677e2e9c0cSopenharmony_ci test(18446744073709551615, &[Token::U64(18446744073709551615)]); 7687e2e9c0cSopenharmony_ci} 7697e2e9c0cSopenharmony_ci 7707e2e9c0cSopenharmony_ci#[test] 7717e2e9c0cSopenharmony_cifn test_nonzero_u128() { 7727e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroU128::new(value).unwrap(), tokens); 7737e2e9c0cSopenharmony_ci 7747e2e9c0cSopenharmony_ci // from signed 7757e2e9c0cSopenharmony_ci test(1, &[Token::I8(1)]); 7767e2e9c0cSopenharmony_ci test(1, &[Token::I16(1)]); 7777e2e9c0cSopenharmony_ci test(1, &[Token::I32(1)]); 7787e2e9c0cSopenharmony_ci test(1, &[Token::I64(1)]); 7797e2e9c0cSopenharmony_ci test(127, &[Token::I8(127)]); 7807e2e9c0cSopenharmony_ci test(32767, &[Token::I16(32767)]); 7817e2e9c0cSopenharmony_ci test(2147483647, &[Token::I32(2147483647)]); 7827e2e9c0cSopenharmony_ci test(9223372036854775807, &[Token::I64(9223372036854775807)]); 7837e2e9c0cSopenharmony_ci 7847e2e9c0cSopenharmony_ci // from unsigned 7857e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 7867e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 7877e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 7887e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 7897e2e9c0cSopenharmony_ci test(255, &[Token::U8(255)]); 7907e2e9c0cSopenharmony_ci test(65535, &[Token::U16(65535)]); 7917e2e9c0cSopenharmony_ci test(4294967295, &[Token::U32(4294967295)]); 7927e2e9c0cSopenharmony_ci test(18446744073709551615, &[Token::U64(18446744073709551615)]); 7937e2e9c0cSopenharmony_ci} 7947e2e9c0cSopenharmony_ci 7957e2e9c0cSopenharmony_ci#[test] 7967e2e9c0cSopenharmony_cifn test_nonzero_usize() { 7977e2e9c0cSopenharmony_ci let test = |value, tokens| test(NonZeroUsize::new(value).unwrap(), tokens); 7987e2e9c0cSopenharmony_ci 7997e2e9c0cSopenharmony_ci // from signed 8007e2e9c0cSopenharmony_ci test(1, &[Token::I8(1)]); 8017e2e9c0cSopenharmony_ci test(1, &[Token::I16(1)]); 8027e2e9c0cSopenharmony_ci test(1, &[Token::I32(1)]); 8037e2e9c0cSopenharmony_ci test(1, &[Token::I64(1)]); 8047e2e9c0cSopenharmony_ci test(10, &[Token::I8(10)]); 8057e2e9c0cSopenharmony_ci test(10, &[Token::I16(10)]); 8067e2e9c0cSopenharmony_ci test(10, &[Token::I32(10)]); 8077e2e9c0cSopenharmony_ci test(10, &[Token::I64(10)]); 8087e2e9c0cSopenharmony_ci 8097e2e9c0cSopenharmony_ci // from unsigned 8107e2e9c0cSopenharmony_ci test(1, &[Token::U8(1)]); 8117e2e9c0cSopenharmony_ci test(1, &[Token::U16(1)]); 8127e2e9c0cSopenharmony_ci test(1, &[Token::U32(1)]); 8137e2e9c0cSopenharmony_ci test(1, &[Token::U64(1)]); 8147e2e9c0cSopenharmony_ci test(10, &[Token::U8(10)]); 8157e2e9c0cSopenharmony_ci test(10, &[Token::U16(10)]); 8167e2e9c0cSopenharmony_ci test(10, &[Token::U32(10)]); 8177e2e9c0cSopenharmony_ci test(10, &[Token::U64(10)]); 8187e2e9c0cSopenharmony_ci} 8197e2e9c0cSopenharmony_ci 8207e2e9c0cSopenharmony_ci#[test] 8217e2e9c0cSopenharmony_cifn test_f32() { 8227e2e9c0cSopenharmony_ci let test = test::<f32>; 8237e2e9c0cSopenharmony_ci 8247e2e9c0cSopenharmony_ci test(1.11, &[Token::F32(1.11)]); 8257e2e9c0cSopenharmony_ci test(1.11, &[Token::F64(1.11)]); 8267e2e9c0cSopenharmony_ci} 8277e2e9c0cSopenharmony_ci 8287e2e9c0cSopenharmony_ci#[test] 8297e2e9c0cSopenharmony_cifn test_f64() { 8307e2e9c0cSopenharmony_ci let test = test::<f64>; 8317e2e9c0cSopenharmony_ci 8327e2e9c0cSopenharmony_ci test(1.11f32 as f64, &[Token::F32(1.11)]); 8337e2e9c0cSopenharmony_ci test(1.11, &[Token::F64(1.11)]); 8347e2e9c0cSopenharmony_ci} 8357e2e9c0cSopenharmony_ci 8367e2e9c0cSopenharmony_ci#[test] 8377e2e9c0cSopenharmony_cifn test_nan() { 8387e2e9c0cSopenharmony_ci let f32_deserializer = F32Deserializer::<serde::de::value::Error>::new; 8397e2e9c0cSopenharmony_ci let f64_deserializer = F64Deserializer::<serde::de::value::Error>::new; 8407e2e9c0cSopenharmony_ci 8417e2e9c0cSopenharmony_ci let pos_f32_nan = f32_deserializer(f32::NAN.copysign(1.0)); 8427e2e9c0cSopenharmony_ci let pos_f64_nan = f64_deserializer(f64::NAN.copysign(1.0)); 8437e2e9c0cSopenharmony_ci assert!(f32::deserialize(pos_f32_nan).unwrap().is_sign_positive()); 8447e2e9c0cSopenharmony_ci assert!(f32::deserialize(pos_f64_nan).unwrap().is_sign_positive()); 8457e2e9c0cSopenharmony_ci assert!(f64::deserialize(pos_f32_nan).unwrap().is_sign_positive()); 8467e2e9c0cSopenharmony_ci assert!(f64::deserialize(pos_f64_nan).unwrap().is_sign_positive()); 8477e2e9c0cSopenharmony_ci 8487e2e9c0cSopenharmony_ci let neg_f32_nan = f32_deserializer(f32::NAN.copysign(-1.0)); 8497e2e9c0cSopenharmony_ci let neg_f64_nan = f64_deserializer(f64::NAN.copysign(-1.0)); 8507e2e9c0cSopenharmony_ci assert!(f32::deserialize(neg_f32_nan).unwrap().is_sign_negative()); 8517e2e9c0cSopenharmony_ci assert!(f32::deserialize(neg_f64_nan).unwrap().is_sign_negative()); 8527e2e9c0cSopenharmony_ci assert!(f64::deserialize(neg_f32_nan).unwrap().is_sign_negative()); 8537e2e9c0cSopenharmony_ci assert!(f64::deserialize(neg_f64_nan).unwrap().is_sign_negative()); 8547e2e9c0cSopenharmony_ci} 8557e2e9c0cSopenharmony_ci 8567e2e9c0cSopenharmony_ci#[test] 8577e2e9c0cSopenharmony_cifn test_char() { 8587e2e9c0cSopenharmony_ci test('a', &[Token::Char('a')]); 8597e2e9c0cSopenharmony_ci test('a', &[Token::Str("a")]); 8607e2e9c0cSopenharmony_ci test('a', &[Token::String("a")]); 8617e2e9c0cSopenharmony_ci} 8627e2e9c0cSopenharmony_ci 8637e2e9c0cSopenharmony_ci#[test] 8647e2e9c0cSopenharmony_cifn test_string() { 8657e2e9c0cSopenharmony_ci test("abc".to_owned(), &[Token::Str("abc")]); 8667e2e9c0cSopenharmony_ci test("abc".to_owned(), &[Token::String("abc")]); 8677e2e9c0cSopenharmony_ci test("a".to_owned(), &[Token::Char('a')]); 8687e2e9c0cSopenharmony_ci} 8697e2e9c0cSopenharmony_ci 8707e2e9c0cSopenharmony_ci#[test] 8717e2e9c0cSopenharmony_cifn test_option() { 8727e2e9c0cSopenharmony_ci test(None::<i32>, &[Token::Unit]); 8737e2e9c0cSopenharmony_ci test(None::<i32>, &[Token::None]); 8747e2e9c0cSopenharmony_ci test(Some(1), &[Token::Some, Token::I32(1)]); 8757e2e9c0cSopenharmony_ci} 8767e2e9c0cSopenharmony_ci 8777e2e9c0cSopenharmony_ci#[test] 8787e2e9c0cSopenharmony_cifn test_result() { 8797e2e9c0cSopenharmony_ci test( 8807e2e9c0cSopenharmony_ci Ok::<i32, i32>(0), 8817e2e9c0cSopenharmony_ci &[ 8827e2e9c0cSopenharmony_ci Token::Enum { name: "Result" }, 8837e2e9c0cSopenharmony_ci Token::Str("Ok"), 8847e2e9c0cSopenharmony_ci Token::I32(0), 8857e2e9c0cSopenharmony_ci ], 8867e2e9c0cSopenharmony_ci ); 8877e2e9c0cSopenharmony_ci test( 8887e2e9c0cSopenharmony_ci Err::<i32, i32>(1), 8897e2e9c0cSopenharmony_ci &[ 8907e2e9c0cSopenharmony_ci Token::Enum { name: "Result" }, 8917e2e9c0cSopenharmony_ci Token::Str("Err"), 8927e2e9c0cSopenharmony_ci Token::I32(1), 8937e2e9c0cSopenharmony_ci ], 8947e2e9c0cSopenharmony_ci ); 8957e2e9c0cSopenharmony_ci} 8967e2e9c0cSopenharmony_ci 8977e2e9c0cSopenharmony_ci#[test] 8987e2e9c0cSopenharmony_cifn test_unit() { 8997e2e9c0cSopenharmony_ci test((), &[Token::Unit]); 9007e2e9c0cSopenharmony_ci} 9017e2e9c0cSopenharmony_ci 9027e2e9c0cSopenharmony_ci#[test] 9037e2e9c0cSopenharmony_cifn test_unit_struct() { 9047e2e9c0cSopenharmony_ci test(UnitStruct, &[Token::Unit]); 9057e2e9c0cSopenharmony_ci test(UnitStruct, &[Token::UnitStruct { name: "UnitStruct" }]); 9067e2e9c0cSopenharmony_ci} 9077e2e9c0cSopenharmony_ci 9087e2e9c0cSopenharmony_ci#[test] 9097e2e9c0cSopenharmony_cifn test_generic_unit_struct() { 9107e2e9c0cSopenharmony_ci test(GenericUnitStruct::<8>, &[Token::Unit]); 9117e2e9c0cSopenharmony_ci test( 9127e2e9c0cSopenharmony_ci GenericUnitStruct::<8>, 9137e2e9c0cSopenharmony_ci &[Token::UnitStruct { 9147e2e9c0cSopenharmony_ci name: "GenericUnitStruct", 9157e2e9c0cSopenharmony_ci }], 9167e2e9c0cSopenharmony_ci ); 9177e2e9c0cSopenharmony_ci} 9187e2e9c0cSopenharmony_ci 9197e2e9c0cSopenharmony_ci#[test] 9207e2e9c0cSopenharmony_cifn test_newtype_struct() { 9217e2e9c0cSopenharmony_ci test( 9227e2e9c0cSopenharmony_ci NewtypeStruct(1), 9237e2e9c0cSopenharmony_ci &[ 9247e2e9c0cSopenharmony_ci Token::NewtypeStruct { 9257e2e9c0cSopenharmony_ci name: "NewtypeStruct", 9267e2e9c0cSopenharmony_ci }, 9277e2e9c0cSopenharmony_ci Token::I32(1), 9287e2e9c0cSopenharmony_ci ], 9297e2e9c0cSopenharmony_ci ); 9307e2e9c0cSopenharmony_ci} 9317e2e9c0cSopenharmony_ci 9327e2e9c0cSopenharmony_ci#[test] 9337e2e9c0cSopenharmony_cifn test_tuple_struct() { 9347e2e9c0cSopenharmony_ci test( 9357e2e9c0cSopenharmony_ci TupleStruct(1, 2, 3), 9367e2e9c0cSopenharmony_ci &[ 9377e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 9387e2e9c0cSopenharmony_ci Token::I32(1), 9397e2e9c0cSopenharmony_ci Token::I32(2), 9407e2e9c0cSopenharmony_ci Token::I32(3), 9417e2e9c0cSopenharmony_ci Token::SeqEnd, 9427e2e9c0cSopenharmony_ci ], 9437e2e9c0cSopenharmony_ci ); 9447e2e9c0cSopenharmony_ci test( 9457e2e9c0cSopenharmony_ci TupleStruct(1, 2, 3), 9467e2e9c0cSopenharmony_ci &[ 9477e2e9c0cSopenharmony_ci Token::Seq { len: None }, 9487e2e9c0cSopenharmony_ci Token::I32(1), 9497e2e9c0cSopenharmony_ci Token::I32(2), 9507e2e9c0cSopenharmony_ci Token::I32(3), 9517e2e9c0cSopenharmony_ci Token::SeqEnd, 9527e2e9c0cSopenharmony_ci ], 9537e2e9c0cSopenharmony_ci ); 9547e2e9c0cSopenharmony_ci test( 9557e2e9c0cSopenharmony_ci TupleStruct(1, 2, 3), 9567e2e9c0cSopenharmony_ci &[ 9577e2e9c0cSopenharmony_ci Token::TupleStruct { 9587e2e9c0cSopenharmony_ci name: "TupleStruct", 9597e2e9c0cSopenharmony_ci len: 3, 9607e2e9c0cSopenharmony_ci }, 9617e2e9c0cSopenharmony_ci Token::I32(1), 9627e2e9c0cSopenharmony_ci Token::I32(2), 9637e2e9c0cSopenharmony_ci Token::I32(3), 9647e2e9c0cSopenharmony_ci Token::TupleStructEnd, 9657e2e9c0cSopenharmony_ci ], 9667e2e9c0cSopenharmony_ci ); 9677e2e9c0cSopenharmony_ci test( 9687e2e9c0cSopenharmony_ci TupleStruct(1, 2, 3), 9697e2e9c0cSopenharmony_ci &[ 9707e2e9c0cSopenharmony_ci Token::TupleStruct { 9717e2e9c0cSopenharmony_ci name: "TupleStruct", 9727e2e9c0cSopenharmony_ci len: 3, 9737e2e9c0cSopenharmony_ci }, 9747e2e9c0cSopenharmony_ci Token::I32(1), 9757e2e9c0cSopenharmony_ci Token::I32(2), 9767e2e9c0cSopenharmony_ci Token::I32(3), 9777e2e9c0cSopenharmony_ci Token::TupleStructEnd, 9787e2e9c0cSopenharmony_ci ], 9797e2e9c0cSopenharmony_ci ); 9807e2e9c0cSopenharmony_ci} 9817e2e9c0cSopenharmony_ci 9827e2e9c0cSopenharmony_ci#[test] 9837e2e9c0cSopenharmony_cifn test_btreeset() { 9847e2e9c0cSopenharmony_ci test( 9857e2e9c0cSopenharmony_ci BTreeSet::<isize>::new(), 9867e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(0) }, Token::SeqEnd], 9877e2e9c0cSopenharmony_ci ); 9887e2e9c0cSopenharmony_ci test( 9897e2e9c0cSopenharmony_ci btreeset![btreeset![], btreeset![1], btreeset![2, 3]], 9907e2e9c0cSopenharmony_ci &[ 9917e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 9927e2e9c0cSopenharmony_ci Token::Seq { len: Some(0) }, 9937e2e9c0cSopenharmony_ci Token::SeqEnd, 9947e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 9957e2e9c0cSopenharmony_ci Token::I32(1), 9967e2e9c0cSopenharmony_ci Token::SeqEnd, 9977e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 9987e2e9c0cSopenharmony_ci Token::I32(2), 9997e2e9c0cSopenharmony_ci Token::I32(3), 10007e2e9c0cSopenharmony_ci Token::SeqEnd, 10017e2e9c0cSopenharmony_ci Token::SeqEnd, 10027e2e9c0cSopenharmony_ci ], 10037e2e9c0cSopenharmony_ci ); 10047e2e9c0cSopenharmony_ci test( 10057e2e9c0cSopenharmony_ci BTreeSet::<isize>::new(), 10067e2e9c0cSopenharmony_ci &[ 10077e2e9c0cSopenharmony_ci Token::TupleStruct { 10087e2e9c0cSopenharmony_ci name: "Anything", 10097e2e9c0cSopenharmony_ci len: 0, 10107e2e9c0cSopenharmony_ci }, 10117e2e9c0cSopenharmony_ci Token::TupleStructEnd, 10127e2e9c0cSopenharmony_ci ], 10137e2e9c0cSopenharmony_ci ); 10147e2e9c0cSopenharmony_ci} 10157e2e9c0cSopenharmony_ci 10167e2e9c0cSopenharmony_ci#[test] 10177e2e9c0cSopenharmony_cifn test_hashset() { 10187e2e9c0cSopenharmony_ci test( 10197e2e9c0cSopenharmony_ci HashSet::<isize>::new(), 10207e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(0) }, Token::SeqEnd], 10217e2e9c0cSopenharmony_ci ); 10227e2e9c0cSopenharmony_ci test( 10237e2e9c0cSopenharmony_ci hashset![1, 2, 3], 10247e2e9c0cSopenharmony_ci &[ 10257e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 10267e2e9c0cSopenharmony_ci Token::I32(1), 10277e2e9c0cSopenharmony_ci Token::I32(2), 10287e2e9c0cSopenharmony_ci Token::I32(3), 10297e2e9c0cSopenharmony_ci Token::SeqEnd, 10307e2e9c0cSopenharmony_ci ], 10317e2e9c0cSopenharmony_ci ); 10327e2e9c0cSopenharmony_ci test( 10337e2e9c0cSopenharmony_ci HashSet::<isize>::new(), 10347e2e9c0cSopenharmony_ci &[ 10357e2e9c0cSopenharmony_ci Token::TupleStruct { 10367e2e9c0cSopenharmony_ci name: "Anything", 10377e2e9c0cSopenharmony_ci len: 0, 10387e2e9c0cSopenharmony_ci }, 10397e2e9c0cSopenharmony_ci Token::TupleStructEnd, 10407e2e9c0cSopenharmony_ci ], 10417e2e9c0cSopenharmony_ci ); 10427e2e9c0cSopenharmony_ci test( 10437e2e9c0cSopenharmony_ci hashset![FnvHasher @ 1, 2, 3], 10447e2e9c0cSopenharmony_ci &[ 10457e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 10467e2e9c0cSopenharmony_ci Token::I32(1), 10477e2e9c0cSopenharmony_ci Token::I32(2), 10487e2e9c0cSopenharmony_ci Token::I32(3), 10497e2e9c0cSopenharmony_ci Token::SeqEnd, 10507e2e9c0cSopenharmony_ci ], 10517e2e9c0cSopenharmony_ci ); 10527e2e9c0cSopenharmony_ci} 10537e2e9c0cSopenharmony_ci 10547e2e9c0cSopenharmony_ci#[test] 10557e2e9c0cSopenharmony_cifn test_vec() { 10567e2e9c0cSopenharmony_ci test( 10577e2e9c0cSopenharmony_ci Vec::<isize>::new(), 10587e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(0) }, Token::SeqEnd], 10597e2e9c0cSopenharmony_ci ); 10607e2e9c0cSopenharmony_ci 10617e2e9c0cSopenharmony_ci test( 10627e2e9c0cSopenharmony_ci vec![vec![], vec![1], vec![2, 3]], 10637e2e9c0cSopenharmony_ci &[ 10647e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 10657e2e9c0cSopenharmony_ci Token::Seq { len: Some(0) }, 10667e2e9c0cSopenharmony_ci Token::SeqEnd, 10677e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 10687e2e9c0cSopenharmony_ci Token::I32(1), 10697e2e9c0cSopenharmony_ci Token::SeqEnd, 10707e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 10717e2e9c0cSopenharmony_ci Token::I32(2), 10727e2e9c0cSopenharmony_ci Token::I32(3), 10737e2e9c0cSopenharmony_ci Token::SeqEnd, 10747e2e9c0cSopenharmony_ci Token::SeqEnd, 10757e2e9c0cSopenharmony_ci ], 10767e2e9c0cSopenharmony_ci ); 10777e2e9c0cSopenharmony_ci test( 10787e2e9c0cSopenharmony_ci Vec::<isize>::new(), 10797e2e9c0cSopenharmony_ci &[ 10807e2e9c0cSopenharmony_ci Token::TupleStruct { 10817e2e9c0cSopenharmony_ci name: "Anything", 10827e2e9c0cSopenharmony_ci len: 0, 10837e2e9c0cSopenharmony_ci }, 10847e2e9c0cSopenharmony_ci Token::TupleStructEnd, 10857e2e9c0cSopenharmony_ci ], 10867e2e9c0cSopenharmony_ci ); 10877e2e9c0cSopenharmony_ci} 10887e2e9c0cSopenharmony_ci 10897e2e9c0cSopenharmony_ci#[test] 10907e2e9c0cSopenharmony_cifn test_array() { 10917e2e9c0cSopenharmony_ci test([0; 0], &[Token::Seq { len: Some(0) }, Token::SeqEnd]); 10927e2e9c0cSopenharmony_ci test([0; 0], &[Token::Tuple { len: 0 }, Token::TupleEnd]); 10937e2e9c0cSopenharmony_ci test( 10947e2e9c0cSopenharmony_ci ([0; 0], [1], [2, 3]), 10957e2e9c0cSopenharmony_ci &[ 10967e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 10977e2e9c0cSopenharmony_ci Token::Seq { len: Some(0) }, 10987e2e9c0cSopenharmony_ci Token::SeqEnd, 10997e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 11007e2e9c0cSopenharmony_ci Token::I32(1), 11017e2e9c0cSopenharmony_ci Token::SeqEnd, 11027e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 11037e2e9c0cSopenharmony_ci Token::I32(2), 11047e2e9c0cSopenharmony_ci Token::I32(3), 11057e2e9c0cSopenharmony_ci Token::SeqEnd, 11067e2e9c0cSopenharmony_ci Token::SeqEnd, 11077e2e9c0cSopenharmony_ci ], 11087e2e9c0cSopenharmony_ci ); 11097e2e9c0cSopenharmony_ci test( 11107e2e9c0cSopenharmony_ci ([0; 0], [1], [2, 3]), 11117e2e9c0cSopenharmony_ci &[ 11127e2e9c0cSopenharmony_ci Token::Tuple { len: 3 }, 11137e2e9c0cSopenharmony_ci Token::Tuple { len: 0 }, 11147e2e9c0cSopenharmony_ci Token::TupleEnd, 11157e2e9c0cSopenharmony_ci Token::Tuple { len: 1 }, 11167e2e9c0cSopenharmony_ci Token::I32(1), 11177e2e9c0cSopenharmony_ci Token::TupleEnd, 11187e2e9c0cSopenharmony_ci Token::Tuple { len: 2 }, 11197e2e9c0cSopenharmony_ci Token::I32(2), 11207e2e9c0cSopenharmony_ci Token::I32(3), 11217e2e9c0cSopenharmony_ci Token::TupleEnd, 11227e2e9c0cSopenharmony_ci Token::TupleEnd, 11237e2e9c0cSopenharmony_ci ], 11247e2e9c0cSopenharmony_ci ); 11257e2e9c0cSopenharmony_ci test( 11267e2e9c0cSopenharmony_ci [0; 0], 11277e2e9c0cSopenharmony_ci &[ 11287e2e9c0cSopenharmony_ci Token::TupleStruct { 11297e2e9c0cSopenharmony_ci name: "Anything", 11307e2e9c0cSopenharmony_ci len: 0, 11317e2e9c0cSopenharmony_ci }, 11327e2e9c0cSopenharmony_ci Token::TupleStructEnd, 11337e2e9c0cSopenharmony_ci ], 11347e2e9c0cSopenharmony_ci ); 11357e2e9c0cSopenharmony_ci} 11367e2e9c0cSopenharmony_ci 11377e2e9c0cSopenharmony_ci#[test] 11387e2e9c0cSopenharmony_cifn test_tuple() { 11397e2e9c0cSopenharmony_ci test( 11407e2e9c0cSopenharmony_ci (1,), 11417e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(1) }, Token::I32(1), Token::SeqEnd], 11427e2e9c0cSopenharmony_ci ); 11437e2e9c0cSopenharmony_ci test( 11447e2e9c0cSopenharmony_ci (1, 2, 3), 11457e2e9c0cSopenharmony_ci &[ 11467e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 11477e2e9c0cSopenharmony_ci Token::I32(1), 11487e2e9c0cSopenharmony_ci Token::I32(2), 11497e2e9c0cSopenharmony_ci Token::I32(3), 11507e2e9c0cSopenharmony_ci Token::SeqEnd, 11517e2e9c0cSopenharmony_ci ], 11527e2e9c0cSopenharmony_ci ); 11537e2e9c0cSopenharmony_ci test( 11547e2e9c0cSopenharmony_ci (1,), 11557e2e9c0cSopenharmony_ci &[Token::Tuple { len: 1 }, Token::I32(1), Token::TupleEnd], 11567e2e9c0cSopenharmony_ci ); 11577e2e9c0cSopenharmony_ci test( 11587e2e9c0cSopenharmony_ci (1, 2, 3), 11597e2e9c0cSopenharmony_ci &[ 11607e2e9c0cSopenharmony_ci Token::Tuple { len: 3 }, 11617e2e9c0cSopenharmony_ci Token::I32(1), 11627e2e9c0cSopenharmony_ci Token::I32(2), 11637e2e9c0cSopenharmony_ci Token::I32(3), 11647e2e9c0cSopenharmony_ci Token::TupleEnd, 11657e2e9c0cSopenharmony_ci ], 11667e2e9c0cSopenharmony_ci ); 11677e2e9c0cSopenharmony_ci} 11687e2e9c0cSopenharmony_ci 11697e2e9c0cSopenharmony_ci#[test] 11707e2e9c0cSopenharmony_cifn test_btreemap() { 11717e2e9c0cSopenharmony_ci test( 11727e2e9c0cSopenharmony_ci BTreeMap::<isize, isize>::new(), 11737e2e9c0cSopenharmony_ci &[Token::Map { len: Some(0) }, Token::MapEnd], 11747e2e9c0cSopenharmony_ci ); 11757e2e9c0cSopenharmony_ci test( 11767e2e9c0cSopenharmony_ci btreemap![1 => 2], 11777e2e9c0cSopenharmony_ci &[ 11787e2e9c0cSopenharmony_ci Token::Map { len: Some(1) }, 11797e2e9c0cSopenharmony_ci Token::I32(1), 11807e2e9c0cSopenharmony_ci Token::I32(2), 11817e2e9c0cSopenharmony_ci Token::MapEnd, 11827e2e9c0cSopenharmony_ci ], 11837e2e9c0cSopenharmony_ci ); 11847e2e9c0cSopenharmony_ci test( 11857e2e9c0cSopenharmony_ci btreemap![1 => 2, 3 => 4], 11867e2e9c0cSopenharmony_ci &[ 11877e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 11887e2e9c0cSopenharmony_ci Token::I32(1), 11897e2e9c0cSopenharmony_ci Token::I32(2), 11907e2e9c0cSopenharmony_ci Token::I32(3), 11917e2e9c0cSopenharmony_ci Token::I32(4), 11927e2e9c0cSopenharmony_ci Token::MapEnd, 11937e2e9c0cSopenharmony_ci ], 11947e2e9c0cSopenharmony_ci ); 11957e2e9c0cSopenharmony_ci test( 11967e2e9c0cSopenharmony_ci btreemap![1 => btreemap![], 2 => btreemap![3 => 4, 5 => 6]], 11977e2e9c0cSopenharmony_ci &[ 11987e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 11997e2e9c0cSopenharmony_ci Token::I32(1), 12007e2e9c0cSopenharmony_ci Token::Map { len: Some(0) }, 12017e2e9c0cSopenharmony_ci Token::MapEnd, 12027e2e9c0cSopenharmony_ci Token::I32(2), 12037e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 12047e2e9c0cSopenharmony_ci Token::I32(3), 12057e2e9c0cSopenharmony_ci Token::I32(4), 12067e2e9c0cSopenharmony_ci Token::I32(5), 12077e2e9c0cSopenharmony_ci Token::I32(6), 12087e2e9c0cSopenharmony_ci Token::MapEnd, 12097e2e9c0cSopenharmony_ci Token::MapEnd, 12107e2e9c0cSopenharmony_ci ], 12117e2e9c0cSopenharmony_ci ); 12127e2e9c0cSopenharmony_ci test( 12137e2e9c0cSopenharmony_ci BTreeMap::<isize, isize>::new(), 12147e2e9c0cSopenharmony_ci &[ 12157e2e9c0cSopenharmony_ci Token::Struct { 12167e2e9c0cSopenharmony_ci name: "Anything", 12177e2e9c0cSopenharmony_ci len: 0, 12187e2e9c0cSopenharmony_ci }, 12197e2e9c0cSopenharmony_ci Token::StructEnd, 12207e2e9c0cSopenharmony_ci ], 12217e2e9c0cSopenharmony_ci ); 12227e2e9c0cSopenharmony_ci} 12237e2e9c0cSopenharmony_ci 12247e2e9c0cSopenharmony_ci#[test] 12257e2e9c0cSopenharmony_cifn test_hashmap() { 12267e2e9c0cSopenharmony_ci test( 12277e2e9c0cSopenharmony_ci HashMap::<isize, isize>::new(), 12287e2e9c0cSopenharmony_ci &[Token::Map { len: Some(0) }, Token::MapEnd], 12297e2e9c0cSopenharmony_ci ); 12307e2e9c0cSopenharmony_ci test( 12317e2e9c0cSopenharmony_ci hashmap![1 => 2], 12327e2e9c0cSopenharmony_ci &[ 12337e2e9c0cSopenharmony_ci Token::Map { len: Some(1) }, 12347e2e9c0cSopenharmony_ci Token::I32(1), 12357e2e9c0cSopenharmony_ci Token::I32(2), 12367e2e9c0cSopenharmony_ci Token::MapEnd, 12377e2e9c0cSopenharmony_ci ], 12387e2e9c0cSopenharmony_ci ); 12397e2e9c0cSopenharmony_ci test( 12407e2e9c0cSopenharmony_ci hashmap![1 => 2, 3 => 4], 12417e2e9c0cSopenharmony_ci &[ 12427e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 12437e2e9c0cSopenharmony_ci Token::I32(1), 12447e2e9c0cSopenharmony_ci Token::I32(2), 12457e2e9c0cSopenharmony_ci Token::I32(3), 12467e2e9c0cSopenharmony_ci Token::I32(4), 12477e2e9c0cSopenharmony_ci Token::MapEnd, 12487e2e9c0cSopenharmony_ci ], 12497e2e9c0cSopenharmony_ci ); 12507e2e9c0cSopenharmony_ci test( 12517e2e9c0cSopenharmony_ci hashmap![1 => hashmap![], 2 => hashmap![3 => 4, 5 => 6]], 12527e2e9c0cSopenharmony_ci &[ 12537e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 12547e2e9c0cSopenharmony_ci Token::I32(1), 12557e2e9c0cSopenharmony_ci Token::Map { len: Some(0) }, 12567e2e9c0cSopenharmony_ci Token::MapEnd, 12577e2e9c0cSopenharmony_ci Token::I32(2), 12587e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 12597e2e9c0cSopenharmony_ci Token::I32(3), 12607e2e9c0cSopenharmony_ci Token::I32(4), 12617e2e9c0cSopenharmony_ci Token::I32(5), 12627e2e9c0cSopenharmony_ci Token::I32(6), 12637e2e9c0cSopenharmony_ci Token::MapEnd, 12647e2e9c0cSopenharmony_ci Token::MapEnd, 12657e2e9c0cSopenharmony_ci ], 12667e2e9c0cSopenharmony_ci ); 12677e2e9c0cSopenharmony_ci test( 12687e2e9c0cSopenharmony_ci HashMap::<isize, isize>::new(), 12697e2e9c0cSopenharmony_ci &[ 12707e2e9c0cSopenharmony_ci Token::Struct { 12717e2e9c0cSopenharmony_ci name: "Anything", 12727e2e9c0cSopenharmony_ci len: 0, 12737e2e9c0cSopenharmony_ci }, 12747e2e9c0cSopenharmony_ci Token::StructEnd, 12757e2e9c0cSopenharmony_ci ], 12767e2e9c0cSopenharmony_ci ); 12777e2e9c0cSopenharmony_ci test( 12787e2e9c0cSopenharmony_ci hashmap![FnvHasher @ 1 => 2, 3 => 4], 12797e2e9c0cSopenharmony_ci &[ 12807e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 12817e2e9c0cSopenharmony_ci Token::I32(1), 12827e2e9c0cSopenharmony_ci Token::I32(2), 12837e2e9c0cSopenharmony_ci Token::I32(3), 12847e2e9c0cSopenharmony_ci Token::I32(4), 12857e2e9c0cSopenharmony_ci Token::MapEnd, 12867e2e9c0cSopenharmony_ci ], 12877e2e9c0cSopenharmony_ci ); 12887e2e9c0cSopenharmony_ci} 12897e2e9c0cSopenharmony_ci 12907e2e9c0cSopenharmony_ci#[test] 12917e2e9c0cSopenharmony_cifn test_struct() { 12927e2e9c0cSopenharmony_ci test( 12937e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 12947e2e9c0cSopenharmony_ci &[ 12957e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 12967e2e9c0cSopenharmony_ci Token::Str("a"), 12977e2e9c0cSopenharmony_ci Token::I32(1), 12987e2e9c0cSopenharmony_ci Token::Str("b"), 12997e2e9c0cSopenharmony_ci Token::I32(2), 13007e2e9c0cSopenharmony_ci Token::MapEnd, 13017e2e9c0cSopenharmony_ci ], 13027e2e9c0cSopenharmony_ci ); 13037e2e9c0cSopenharmony_ci test( 13047e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13057e2e9c0cSopenharmony_ci &[ 13067e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 13077e2e9c0cSopenharmony_ci Token::U8(0), 13087e2e9c0cSopenharmony_ci Token::I32(1), 13097e2e9c0cSopenharmony_ci Token::U8(1), 13107e2e9c0cSopenharmony_ci Token::I32(2), 13117e2e9c0cSopenharmony_ci Token::MapEnd, 13127e2e9c0cSopenharmony_ci ], 13137e2e9c0cSopenharmony_ci ); 13147e2e9c0cSopenharmony_ci test( 13157e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13167e2e9c0cSopenharmony_ci &[ 13177e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 13187e2e9c0cSopenharmony_ci Token::U16(0), 13197e2e9c0cSopenharmony_ci Token::I32(1), 13207e2e9c0cSopenharmony_ci Token::U16(1), 13217e2e9c0cSopenharmony_ci Token::I32(2), 13227e2e9c0cSopenharmony_ci Token::MapEnd, 13237e2e9c0cSopenharmony_ci ], 13247e2e9c0cSopenharmony_ci ); 13257e2e9c0cSopenharmony_ci test( 13267e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13277e2e9c0cSopenharmony_ci &[ 13287e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 13297e2e9c0cSopenharmony_ci Token::U32(0), 13307e2e9c0cSopenharmony_ci Token::I32(1), 13317e2e9c0cSopenharmony_ci Token::U32(1), 13327e2e9c0cSopenharmony_ci Token::I32(2), 13337e2e9c0cSopenharmony_ci Token::MapEnd, 13347e2e9c0cSopenharmony_ci ], 13357e2e9c0cSopenharmony_ci ); 13367e2e9c0cSopenharmony_ci test( 13377e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13387e2e9c0cSopenharmony_ci &[ 13397e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 13407e2e9c0cSopenharmony_ci Token::U64(0), 13417e2e9c0cSopenharmony_ci Token::I32(1), 13427e2e9c0cSopenharmony_ci Token::U64(1), 13437e2e9c0cSopenharmony_ci Token::I32(2), 13447e2e9c0cSopenharmony_ci Token::MapEnd, 13457e2e9c0cSopenharmony_ci ], 13467e2e9c0cSopenharmony_ci ); 13477e2e9c0cSopenharmony_ci // Mixed key types 13487e2e9c0cSopenharmony_ci test( 13497e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13507e2e9c0cSopenharmony_ci &[ 13517e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 13527e2e9c0cSopenharmony_ci Token::U8(0), 13537e2e9c0cSopenharmony_ci Token::I32(1), 13547e2e9c0cSopenharmony_ci Token::U64(1), 13557e2e9c0cSopenharmony_ci Token::I32(2), 13567e2e9c0cSopenharmony_ci Token::MapEnd, 13577e2e9c0cSopenharmony_ci ], 13587e2e9c0cSopenharmony_ci ); 13597e2e9c0cSopenharmony_ci test( 13607e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13617e2e9c0cSopenharmony_ci &[ 13627e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 13637e2e9c0cSopenharmony_ci Token::U8(0), 13647e2e9c0cSopenharmony_ci Token::I32(1), 13657e2e9c0cSopenharmony_ci Token::Str("b"), 13667e2e9c0cSopenharmony_ci Token::I32(2), 13677e2e9c0cSopenharmony_ci Token::MapEnd, 13687e2e9c0cSopenharmony_ci ], 13697e2e9c0cSopenharmony_ci ); 13707e2e9c0cSopenharmony_ci test( 13717e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13727e2e9c0cSopenharmony_ci &[ 13737e2e9c0cSopenharmony_ci Token::Struct { 13747e2e9c0cSopenharmony_ci name: "Struct", 13757e2e9c0cSopenharmony_ci len: 2, 13767e2e9c0cSopenharmony_ci }, 13777e2e9c0cSopenharmony_ci Token::Str("a"), 13787e2e9c0cSopenharmony_ci Token::I32(1), 13797e2e9c0cSopenharmony_ci Token::Str("b"), 13807e2e9c0cSopenharmony_ci Token::I32(2), 13817e2e9c0cSopenharmony_ci Token::StructEnd, 13827e2e9c0cSopenharmony_ci ], 13837e2e9c0cSopenharmony_ci ); 13847e2e9c0cSopenharmony_ci test( 13857e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13867e2e9c0cSopenharmony_ci &[ 13877e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 13887e2e9c0cSopenharmony_ci Token::I32(1), 13897e2e9c0cSopenharmony_ci Token::I32(2), 13907e2e9c0cSopenharmony_ci Token::SeqEnd, 13917e2e9c0cSopenharmony_ci ], 13927e2e9c0cSopenharmony_ci ); 13937e2e9c0cSopenharmony_ci} 13947e2e9c0cSopenharmony_ci 13957e2e9c0cSopenharmony_ci#[test] 13967e2e9c0cSopenharmony_cifn test_struct_borrowed_keys() { 13977e2e9c0cSopenharmony_ci test( 13987e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 13997e2e9c0cSopenharmony_ci &[ 14007e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 14017e2e9c0cSopenharmony_ci Token::BorrowedStr("a"), 14027e2e9c0cSopenharmony_ci Token::I32(1), 14037e2e9c0cSopenharmony_ci Token::BorrowedStr("b"), 14047e2e9c0cSopenharmony_ci Token::I32(2), 14057e2e9c0cSopenharmony_ci Token::MapEnd, 14067e2e9c0cSopenharmony_ci ], 14077e2e9c0cSopenharmony_ci ); 14087e2e9c0cSopenharmony_ci test( 14097e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 14107e2e9c0cSopenharmony_ci &[ 14117e2e9c0cSopenharmony_ci Token::Struct { 14127e2e9c0cSopenharmony_ci name: "Struct", 14137e2e9c0cSopenharmony_ci len: 2, 14147e2e9c0cSopenharmony_ci }, 14157e2e9c0cSopenharmony_ci Token::BorrowedStr("a"), 14167e2e9c0cSopenharmony_ci Token::I32(1), 14177e2e9c0cSopenharmony_ci Token::BorrowedStr("b"), 14187e2e9c0cSopenharmony_ci Token::I32(2), 14197e2e9c0cSopenharmony_ci Token::StructEnd, 14207e2e9c0cSopenharmony_ci ], 14217e2e9c0cSopenharmony_ci ); 14227e2e9c0cSopenharmony_ci} 14237e2e9c0cSopenharmony_ci 14247e2e9c0cSopenharmony_ci#[test] 14257e2e9c0cSopenharmony_cifn test_struct_owned_keys() { 14267e2e9c0cSopenharmony_ci test( 14277e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 14287e2e9c0cSopenharmony_ci &[ 14297e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 14307e2e9c0cSopenharmony_ci Token::String("a"), 14317e2e9c0cSopenharmony_ci Token::I32(1), 14327e2e9c0cSopenharmony_ci Token::String("b"), 14337e2e9c0cSopenharmony_ci Token::I32(2), 14347e2e9c0cSopenharmony_ci Token::MapEnd, 14357e2e9c0cSopenharmony_ci ], 14367e2e9c0cSopenharmony_ci ); 14377e2e9c0cSopenharmony_ci test( 14387e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 14397e2e9c0cSopenharmony_ci &[ 14407e2e9c0cSopenharmony_ci Token::Struct { 14417e2e9c0cSopenharmony_ci name: "Struct", 14427e2e9c0cSopenharmony_ci len: 2, 14437e2e9c0cSopenharmony_ci }, 14447e2e9c0cSopenharmony_ci Token::String("a"), 14457e2e9c0cSopenharmony_ci Token::I32(1), 14467e2e9c0cSopenharmony_ci Token::String("b"), 14477e2e9c0cSopenharmony_ci Token::I32(2), 14487e2e9c0cSopenharmony_ci Token::StructEnd, 14497e2e9c0cSopenharmony_ci ], 14507e2e9c0cSopenharmony_ci ); 14517e2e9c0cSopenharmony_ci} 14527e2e9c0cSopenharmony_ci 14537e2e9c0cSopenharmony_ci#[test] 14547e2e9c0cSopenharmony_cifn test_struct_with_skip() { 14557e2e9c0cSopenharmony_ci test( 14567e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 14577e2e9c0cSopenharmony_ci &[ 14587e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 14597e2e9c0cSopenharmony_ci Token::Str("a"), 14607e2e9c0cSopenharmony_ci Token::I32(1), 14617e2e9c0cSopenharmony_ci Token::Str("b"), 14627e2e9c0cSopenharmony_ci Token::I32(2), 14637e2e9c0cSopenharmony_ci Token::Str("c"), 14647e2e9c0cSopenharmony_ci Token::I32(3), 14657e2e9c0cSopenharmony_ci Token::Str("d"), 14667e2e9c0cSopenharmony_ci Token::I32(4), 14677e2e9c0cSopenharmony_ci Token::MapEnd, 14687e2e9c0cSopenharmony_ci ], 14697e2e9c0cSopenharmony_ci ); 14707e2e9c0cSopenharmony_ci test( 14717e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 14727e2e9c0cSopenharmony_ci &[ 14737e2e9c0cSopenharmony_ci Token::Map { len: Some(3) }, 14747e2e9c0cSopenharmony_ci Token::U8(0), 14757e2e9c0cSopenharmony_ci Token::I32(1), 14767e2e9c0cSopenharmony_ci Token::U16(1), 14777e2e9c0cSopenharmony_ci Token::I32(2), 14787e2e9c0cSopenharmony_ci Token::U32(2), 14797e2e9c0cSopenharmony_ci Token::I32(3), 14807e2e9c0cSopenharmony_ci Token::U64(3), 14817e2e9c0cSopenharmony_ci Token::I32(4), 14827e2e9c0cSopenharmony_ci Token::MapEnd, 14837e2e9c0cSopenharmony_ci ], 14847e2e9c0cSopenharmony_ci ); 14857e2e9c0cSopenharmony_ci test( 14867e2e9c0cSopenharmony_ci Struct { a: 1, b: 2, c: 0 }, 14877e2e9c0cSopenharmony_ci &[ 14887e2e9c0cSopenharmony_ci Token::Struct { 14897e2e9c0cSopenharmony_ci name: "Struct", 14907e2e9c0cSopenharmony_ci len: 2, 14917e2e9c0cSopenharmony_ci }, 14927e2e9c0cSopenharmony_ci Token::Str("a"), 14937e2e9c0cSopenharmony_ci Token::I32(1), 14947e2e9c0cSopenharmony_ci Token::Str("b"), 14957e2e9c0cSopenharmony_ci Token::I32(2), 14967e2e9c0cSopenharmony_ci Token::Str("c"), 14977e2e9c0cSopenharmony_ci Token::I32(3), 14987e2e9c0cSopenharmony_ci Token::Str("d"), 14997e2e9c0cSopenharmony_ci Token::I32(4), 15007e2e9c0cSopenharmony_ci Token::StructEnd, 15017e2e9c0cSopenharmony_ci ], 15027e2e9c0cSopenharmony_ci ); 15037e2e9c0cSopenharmony_ci} 15047e2e9c0cSopenharmony_ci 15057e2e9c0cSopenharmony_ci#[test] 15067e2e9c0cSopenharmony_cifn test_struct_skip_all() { 15077e2e9c0cSopenharmony_ci test( 15087e2e9c0cSopenharmony_ci StructSkipAll { a: 0 }, 15097e2e9c0cSopenharmony_ci &[ 15107e2e9c0cSopenharmony_ci Token::Struct { 15117e2e9c0cSopenharmony_ci name: "StructSkipAll", 15127e2e9c0cSopenharmony_ci len: 0, 15137e2e9c0cSopenharmony_ci }, 15147e2e9c0cSopenharmony_ci Token::StructEnd, 15157e2e9c0cSopenharmony_ci ], 15167e2e9c0cSopenharmony_ci ); 15177e2e9c0cSopenharmony_ci test( 15187e2e9c0cSopenharmony_ci StructSkipAll { a: 0 }, 15197e2e9c0cSopenharmony_ci &[ 15207e2e9c0cSopenharmony_ci Token::Struct { 15217e2e9c0cSopenharmony_ci name: "StructSkipAll", 15227e2e9c0cSopenharmony_ci len: 0, 15237e2e9c0cSopenharmony_ci }, 15247e2e9c0cSopenharmony_ci Token::Str("a"), 15257e2e9c0cSopenharmony_ci Token::I32(1), 15267e2e9c0cSopenharmony_ci Token::Str("b"), 15277e2e9c0cSopenharmony_ci Token::I32(2), 15287e2e9c0cSopenharmony_ci Token::StructEnd, 15297e2e9c0cSopenharmony_ci ], 15307e2e9c0cSopenharmony_ci ); 15317e2e9c0cSopenharmony_ci} 15327e2e9c0cSopenharmony_ci 15337e2e9c0cSopenharmony_ci#[test] 15347e2e9c0cSopenharmony_cifn test_struct_skip_default() { 15357e2e9c0cSopenharmony_ci test( 15367e2e9c0cSopenharmony_ci StructSkipDefault { a: 16 }, 15377e2e9c0cSopenharmony_ci &[ 15387e2e9c0cSopenharmony_ci Token::Struct { 15397e2e9c0cSopenharmony_ci name: "StructSkipDefault", 15407e2e9c0cSopenharmony_ci len: 0, 15417e2e9c0cSopenharmony_ci }, 15427e2e9c0cSopenharmony_ci Token::StructEnd, 15437e2e9c0cSopenharmony_ci ], 15447e2e9c0cSopenharmony_ci ); 15457e2e9c0cSopenharmony_ci} 15467e2e9c0cSopenharmony_ci 15477e2e9c0cSopenharmony_ci#[test] 15487e2e9c0cSopenharmony_cifn test_struct_skip_all_deny_unknown() { 15497e2e9c0cSopenharmony_ci test( 15507e2e9c0cSopenharmony_ci StructSkipAllDenyUnknown { a: 0 }, 15517e2e9c0cSopenharmony_ci &[ 15527e2e9c0cSopenharmony_ci Token::Struct { 15537e2e9c0cSopenharmony_ci name: "StructSkipAllDenyUnknown", 15547e2e9c0cSopenharmony_ci len: 0, 15557e2e9c0cSopenharmony_ci }, 15567e2e9c0cSopenharmony_ci Token::StructEnd, 15577e2e9c0cSopenharmony_ci ], 15587e2e9c0cSopenharmony_ci ); 15597e2e9c0cSopenharmony_ci} 15607e2e9c0cSopenharmony_ci 15617e2e9c0cSopenharmony_ci#[test] 15627e2e9c0cSopenharmony_cifn test_struct_default() { 15637e2e9c0cSopenharmony_ci test( 15647e2e9c0cSopenharmony_ci StructDefault { 15657e2e9c0cSopenharmony_ci a: 50, 15667e2e9c0cSopenharmony_ci b: "overwritten".to_string(), 15677e2e9c0cSopenharmony_ci }, 15687e2e9c0cSopenharmony_ci &[ 15697e2e9c0cSopenharmony_ci Token::Struct { 15707e2e9c0cSopenharmony_ci name: "StructDefault", 15717e2e9c0cSopenharmony_ci len: 2, 15727e2e9c0cSopenharmony_ci }, 15737e2e9c0cSopenharmony_ci Token::Str("a"), 15747e2e9c0cSopenharmony_ci Token::I32(50), 15757e2e9c0cSopenharmony_ci Token::Str("b"), 15767e2e9c0cSopenharmony_ci Token::String("overwritten"), 15777e2e9c0cSopenharmony_ci Token::StructEnd, 15787e2e9c0cSopenharmony_ci ], 15797e2e9c0cSopenharmony_ci ); 15807e2e9c0cSopenharmony_ci test( 15817e2e9c0cSopenharmony_ci StructDefault { 15827e2e9c0cSopenharmony_ci a: 100, 15837e2e9c0cSopenharmony_ci b: "default".to_string(), 15847e2e9c0cSopenharmony_ci }, 15857e2e9c0cSopenharmony_ci &[ 15867e2e9c0cSopenharmony_ci Token::Struct { 15877e2e9c0cSopenharmony_ci name: "StructDefault", 15887e2e9c0cSopenharmony_ci len: 2, 15897e2e9c0cSopenharmony_ci }, 15907e2e9c0cSopenharmony_ci Token::StructEnd, 15917e2e9c0cSopenharmony_ci ], 15927e2e9c0cSopenharmony_ci ); 15937e2e9c0cSopenharmony_ci} 15947e2e9c0cSopenharmony_ci 15957e2e9c0cSopenharmony_ci#[test] 15967e2e9c0cSopenharmony_cifn test_enum_unit() { 15977e2e9c0cSopenharmony_ci test( 15987e2e9c0cSopenharmony_ci Enum::Unit, 15997e2e9c0cSopenharmony_ci &[Token::UnitVariant { 16007e2e9c0cSopenharmony_ci name: "Enum", 16017e2e9c0cSopenharmony_ci variant: "Unit", 16027e2e9c0cSopenharmony_ci }], 16037e2e9c0cSopenharmony_ci ); 16047e2e9c0cSopenharmony_ci} 16057e2e9c0cSopenharmony_ci 16067e2e9c0cSopenharmony_ci#[test] 16077e2e9c0cSopenharmony_cifn test_enum_simple() { 16087e2e9c0cSopenharmony_ci test( 16097e2e9c0cSopenharmony_ci Enum::Simple(1), 16107e2e9c0cSopenharmony_ci &[ 16117e2e9c0cSopenharmony_ci Token::NewtypeVariant { 16127e2e9c0cSopenharmony_ci name: "Enum", 16137e2e9c0cSopenharmony_ci variant: "Simple", 16147e2e9c0cSopenharmony_ci }, 16157e2e9c0cSopenharmony_ci Token::I32(1), 16167e2e9c0cSopenharmony_ci ], 16177e2e9c0cSopenharmony_ci ); 16187e2e9c0cSopenharmony_ci} 16197e2e9c0cSopenharmony_ci 16207e2e9c0cSopenharmony_ci#[test] 16217e2e9c0cSopenharmony_cifn test_enum_simple_with_skipped() { 16227e2e9c0cSopenharmony_ci test( 16237e2e9c0cSopenharmony_ci Enum::SimpleWithSkipped(NotDeserializable), 16247e2e9c0cSopenharmony_ci &[Token::UnitVariant { 16257e2e9c0cSopenharmony_ci name: "Enum", 16267e2e9c0cSopenharmony_ci variant: "SimpleWithSkipped", 16277e2e9c0cSopenharmony_ci }], 16287e2e9c0cSopenharmony_ci ); 16297e2e9c0cSopenharmony_ci} 16307e2e9c0cSopenharmony_ci 16317e2e9c0cSopenharmony_ci#[test] 16327e2e9c0cSopenharmony_cifn test_enum_seq() { 16337e2e9c0cSopenharmony_ci test( 16347e2e9c0cSopenharmony_ci Enum::Seq(1, 2, 3), 16357e2e9c0cSopenharmony_ci &[ 16367e2e9c0cSopenharmony_ci Token::TupleVariant { 16377e2e9c0cSopenharmony_ci name: "Enum", 16387e2e9c0cSopenharmony_ci variant: "Seq", 16397e2e9c0cSopenharmony_ci len: 3, 16407e2e9c0cSopenharmony_ci }, 16417e2e9c0cSopenharmony_ci Token::I32(1), 16427e2e9c0cSopenharmony_ci Token::I32(2), 16437e2e9c0cSopenharmony_ci Token::I32(3), 16447e2e9c0cSopenharmony_ci Token::TupleVariantEnd, 16457e2e9c0cSopenharmony_ci ], 16467e2e9c0cSopenharmony_ci ); 16477e2e9c0cSopenharmony_ci} 16487e2e9c0cSopenharmony_ci 16497e2e9c0cSopenharmony_ci#[test] 16507e2e9c0cSopenharmony_cifn test_enum_map() { 16517e2e9c0cSopenharmony_ci test( 16527e2e9c0cSopenharmony_ci Enum::Map { a: 1, b: 2, c: 3 }, 16537e2e9c0cSopenharmony_ci &[ 16547e2e9c0cSopenharmony_ci Token::StructVariant { 16557e2e9c0cSopenharmony_ci name: "Enum", 16567e2e9c0cSopenharmony_ci variant: "Map", 16577e2e9c0cSopenharmony_ci len: 3, 16587e2e9c0cSopenharmony_ci }, 16597e2e9c0cSopenharmony_ci Token::Str("a"), 16607e2e9c0cSopenharmony_ci Token::I32(1), 16617e2e9c0cSopenharmony_ci Token::Str("b"), 16627e2e9c0cSopenharmony_ci Token::I32(2), 16637e2e9c0cSopenharmony_ci Token::Str("c"), 16647e2e9c0cSopenharmony_ci Token::I32(3), 16657e2e9c0cSopenharmony_ci Token::StructVariantEnd, 16667e2e9c0cSopenharmony_ci ], 16677e2e9c0cSopenharmony_ci ); 16687e2e9c0cSopenharmony_ci} 16697e2e9c0cSopenharmony_ci 16707e2e9c0cSopenharmony_ci#[test] 16717e2e9c0cSopenharmony_cifn test_enum_unit_usize() { 16727e2e9c0cSopenharmony_ci test( 16737e2e9c0cSopenharmony_ci Enum::Unit, 16747e2e9c0cSopenharmony_ci &[Token::Enum { name: "Enum" }, Token::U32(0), Token::Unit], 16757e2e9c0cSopenharmony_ci ); 16767e2e9c0cSopenharmony_ci} 16777e2e9c0cSopenharmony_ci 16787e2e9c0cSopenharmony_ci#[test] 16797e2e9c0cSopenharmony_cifn test_enum_unit_bytes() { 16807e2e9c0cSopenharmony_ci test( 16817e2e9c0cSopenharmony_ci Enum::Unit, 16827e2e9c0cSopenharmony_ci &[ 16837e2e9c0cSopenharmony_ci Token::Enum { name: "Enum" }, 16847e2e9c0cSopenharmony_ci Token::Bytes(b"Unit"), 16857e2e9c0cSopenharmony_ci Token::Unit, 16867e2e9c0cSopenharmony_ci ], 16877e2e9c0cSopenharmony_ci ); 16887e2e9c0cSopenharmony_ci} 16897e2e9c0cSopenharmony_ci 16907e2e9c0cSopenharmony_ci#[test] 16917e2e9c0cSopenharmony_cifn test_enum_other_unit() { 16927e2e9c0cSopenharmony_ci test( 16937e2e9c0cSopenharmony_ci EnumOther::Unit, 16947e2e9c0cSopenharmony_ci &[ 16957e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 16967e2e9c0cSopenharmony_ci Token::Str("Unit"), 16977e2e9c0cSopenharmony_ci Token::Unit, 16987e2e9c0cSopenharmony_ci ], 16997e2e9c0cSopenharmony_ci ); 17007e2e9c0cSopenharmony_ci test( 17017e2e9c0cSopenharmony_ci EnumOther::Unit, 17027e2e9c0cSopenharmony_ci &[Token::Enum { name: "EnumOther" }, Token::U8(0), Token::Unit], 17037e2e9c0cSopenharmony_ci ); 17047e2e9c0cSopenharmony_ci test( 17057e2e9c0cSopenharmony_ci EnumOther::Unit, 17067e2e9c0cSopenharmony_ci &[ 17077e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 17087e2e9c0cSopenharmony_ci Token::U16(0), 17097e2e9c0cSopenharmony_ci Token::Unit, 17107e2e9c0cSopenharmony_ci ], 17117e2e9c0cSopenharmony_ci ); 17127e2e9c0cSopenharmony_ci test( 17137e2e9c0cSopenharmony_ci EnumOther::Unit, 17147e2e9c0cSopenharmony_ci &[ 17157e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 17167e2e9c0cSopenharmony_ci Token::U32(0), 17177e2e9c0cSopenharmony_ci Token::Unit, 17187e2e9c0cSopenharmony_ci ], 17197e2e9c0cSopenharmony_ci ); 17207e2e9c0cSopenharmony_ci test( 17217e2e9c0cSopenharmony_ci EnumOther::Unit, 17227e2e9c0cSopenharmony_ci &[ 17237e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 17247e2e9c0cSopenharmony_ci Token::U64(0), 17257e2e9c0cSopenharmony_ci Token::Unit, 17267e2e9c0cSopenharmony_ci ], 17277e2e9c0cSopenharmony_ci ); 17287e2e9c0cSopenharmony_ci} 17297e2e9c0cSopenharmony_ci 17307e2e9c0cSopenharmony_ci#[test] 17317e2e9c0cSopenharmony_cifn test_enum_other() { 17327e2e9c0cSopenharmony_ci test( 17337e2e9c0cSopenharmony_ci EnumOther::Other, 17347e2e9c0cSopenharmony_ci &[ 17357e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 17367e2e9c0cSopenharmony_ci Token::Str("Foo"), 17377e2e9c0cSopenharmony_ci Token::Unit, 17387e2e9c0cSopenharmony_ci ], 17397e2e9c0cSopenharmony_ci ); 17407e2e9c0cSopenharmony_ci test( 17417e2e9c0cSopenharmony_ci EnumOther::Other, 17427e2e9c0cSopenharmony_ci &[ 17437e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 17447e2e9c0cSopenharmony_ci Token::U8(42), 17457e2e9c0cSopenharmony_ci Token::Unit, 17467e2e9c0cSopenharmony_ci ], 17477e2e9c0cSopenharmony_ci ); 17487e2e9c0cSopenharmony_ci test( 17497e2e9c0cSopenharmony_ci EnumOther::Other, 17507e2e9c0cSopenharmony_ci &[ 17517e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 17527e2e9c0cSopenharmony_ci Token::U16(42), 17537e2e9c0cSopenharmony_ci Token::Unit, 17547e2e9c0cSopenharmony_ci ], 17557e2e9c0cSopenharmony_ci ); 17567e2e9c0cSopenharmony_ci test( 17577e2e9c0cSopenharmony_ci EnumOther::Other, 17587e2e9c0cSopenharmony_ci &[ 17597e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 17607e2e9c0cSopenharmony_ci Token::U32(42), 17617e2e9c0cSopenharmony_ci Token::Unit, 17627e2e9c0cSopenharmony_ci ], 17637e2e9c0cSopenharmony_ci ); 17647e2e9c0cSopenharmony_ci test( 17657e2e9c0cSopenharmony_ci EnumOther::Other, 17667e2e9c0cSopenharmony_ci &[ 17677e2e9c0cSopenharmony_ci Token::Enum { name: "EnumOther" }, 17687e2e9c0cSopenharmony_ci Token::U64(42), 17697e2e9c0cSopenharmony_ci Token::Unit, 17707e2e9c0cSopenharmony_ci ], 17717e2e9c0cSopenharmony_ci ); 17727e2e9c0cSopenharmony_ci} 17737e2e9c0cSopenharmony_ci 17747e2e9c0cSopenharmony_ci#[test] 17757e2e9c0cSopenharmony_cifn test_box() { 17767e2e9c0cSopenharmony_ci test(Box::new(0i32), &[Token::I32(0)]); 17777e2e9c0cSopenharmony_ci} 17787e2e9c0cSopenharmony_ci 17797e2e9c0cSopenharmony_ci#[test] 17807e2e9c0cSopenharmony_cifn test_boxed_slice() { 17817e2e9c0cSopenharmony_ci test( 17827e2e9c0cSopenharmony_ci Box::new([0, 1, 2]), 17837e2e9c0cSopenharmony_ci &[ 17847e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 17857e2e9c0cSopenharmony_ci Token::I32(0), 17867e2e9c0cSopenharmony_ci Token::I32(1), 17877e2e9c0cSopenharmony_ci Token::I32(2), 17887e2e9c0cSopenharmony_ci Token::SeqEnd, 17897e2e9c0cSopenharmony_ci ], 17907e2e9c0cSopenharmony_ci ); 17917e2e9c0cSopenharmony_ci} 17927e2e9c0cSopenharmony_ci 17937e2e9c0cSopenharmony_ci#[test] 17947e2e9c0cSopenharmony_cifn test_duration() { 17957e2e9c0cSopenharmony_ci test( 17967e2e9c0cSopenharmony_ci Duration::new(1, 2), 17977e2e9c0cSopenharmony_ci &[ 17987e2e9c0cSopenharmony_ci Token::Struct { 17997e2e9c0cSopenharmony_ci name: "Duration", 18007e2e9c0cSopenharmony_ci len: 2, 18017e2e9c0cSopenharmony_ci }, 18027e2e9c0cSopenharmony_ci Token::Str("secs"), 18037e2e9c0cSopenharmony_ci Token::U64(1), 18047e2e9c0cSopenharmony_ci Token::Str("nanos"), 18057e2e9c0cSopenharmony_ci Token::U32(2), 18067e2e9c0cSopenharmony_ci Token::StructEnd, 18077e2e9c0cSopenharmony_ci ], 18087e2e9c0cSopenharmony_ci ); 18097e2e9c0cSopenharmony_ci test( 18107e2e9c0cSopenharmony_ci Duration::new(1, 2), 18117e2e9c0cSopenharmony_ci &[ 18127e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 18137e2e9c0cSopenharmony_ci Token::I64(1), 18147e2e9c0cSopenharmony_ci Token::I64(2), 18157e2e9c0cSopenharmony_ci Token::SeqEnd, 18167e2e9c0cSopenharmony_ci ], 18177e2e9c0cSopenharmony_ci ); 18187e2e9c0cSopenharmony_ci} 18197e2e9c0cSopenharmony_ci 18207e2e9c0cSopenharmony_ci#[test] 18217e2e9c0cSopenharmony_cifn test_system_time() { 18227e2e9c0cSopenharmony_ci test( 18237e2e9c0cSopenharmony_ci UNIX_EPOCH + Duration::new(1, 2), 18247e2e9c0cSopenharmony_ci &[ 18257e2e9c0cSopenharmony_ci Token::Struct { 18267e2e9c0cSopenharmony_ci name: "SystemTime", 18277e2e9c0cSopenharmony_ci len: 2, 18287e2e9c0cSopenharmony_ci }, 18297e2e9c0cSopenharmony_ci Token::Str("secs_since_epoch"), 18307e2e9c0cSopenharmony_ci Token::U64(1), 18317e2e9c0cSopenharmony_ci Token::Str("nanos_since_epoch"), 18327e2e9c0cSopenharmony_ci Token::U32(2), 18337e2e9c0cSopenharmony_ci Token::StructEnd, 18347e2e9c0cSopenharmony_ci ], 18357e2e9c0cSopenharmony_ci ); 18367e2e9c0cSopenharmony_ci test( 18377e2e9c0cSopenharmony_ci UNIX_EPOCH + Duration::new(1, 2), 18387e2e9c0cSopenharmony_ci &[ 18397e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 18407e2e9c0cSopenharmony_ci Token::I64(1), 18417e2e9c0cSopenharmony_ci Token::I64(2), 18427e2e9c0cSopenharmony_ci Token::SeqEnd, 18437e2e9c0cSopenharmony_ci ], 18447e2e9c0cSopenharmony_ci ); 18457e2e9c0cSopenharmony_ci} 18467e2e9c0cSopenharmony_ci 18477e2e9c0cSopenharmony_ci#[test] 18487e2e9c0cSopenharmony_cifn test_range() { 18497e2e9c0cSopenharmony_ci test( 18507e2e9c0cSopenharmony_ci 1u32..2u32, 18517e2e9c0cSopenharmony_ci &[ 18527e2e9c0cSopenharmony_ci Token::Struct { 18537e2e9c0cSopenharmony_ci name: "Range", 18547e2e9c0cSopenharmony_ci len: 2, 18557e2e9c0cSopenharmony_ci }, 18567e2e9c0cSopenharmony_ci Token::Str("start"), 18577e2e9c0cSopenharmony_ci Token::U32(1), 18587e2e9c0cSopenharmony_ci Token::Str("end"), 18597e2e9c0cSopenharmony_ci Token::U32(2), 18607e2e9c0cSopenharmony_ci Token::StructEnd, 18617e2e9c0cSopenharmony_ci ], 18627e2e9c0cSopenharmony_ci ); 18637e2e9c0cSopenharmony_ci test( 18647e2e9c0cSopenharmony_ci 1u32..2u32, 18657e2e9c0cSopenharmony_ci &[ 18667e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 18677e2e9c0cSopenharmony_ci Token::U64(1), 18687e2e9c0cSopenharmony_ci Token::U64(2), 18697e2e9c0cSopenharmony_ci Token::SeqEnd, 18707e2e9c0cSopenharmony_ci ], 18717e2e9c0cSopenharmony_ci ); 18727e2e9c0cSopenharmony_ci} 18737e2e9c0cSopenharmony_ci 18747e2e9c0cSopenharmony_ci#[test] 18757e2e9c0cSopenharmony_cifn test_range_inclusive() { 18767e2e9c0cSopenharmony_ci test( 18777e2e9c0cSopenharmony_ci 1u32..=2u32, 18787e2e9c0cSopenharmony_ci &[ 18797e2e9c0cSopenharmony_ci Token::Struct { 18807e2e9c0cSopenharmony_ci name: "RangeInclusive", 18817e2e9c0cSopenharmony_ci len: 2, 18827e2e9c0cSopenharmony_ci }, 18837e2e9c0cSopenharmony_ci Token::Str("start"), 18847e2e9c0cSopenharmony_ci Token::U32(1), 18857e2e9c0cSopenharmony_ci Token::Str("end"), 18867e2e9c0cSopenharmony_ci Token::U32(2), 18877e2e9c0cSopenharmony_ci Token::StructEnd, 18887e2e9c0cSopenharmony_ci ], 18897e2e9c0cSopenharmony_ci ); 18907e2e9c0cSopenharmony_ci test( 18917e2e9c0cSopenharmony_ci 1u32..=2u32, 18927e2e9c0cSopenharmony_ci &[ 18937e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 18947e2e9c0cSopenharmony_ci Token::U64(1), 18957e2e9c0cSopenharmony_ci Token::U64(2), 18967e2e9c0cSopenharmony_ci Token::SeqEnd, 18977e2e9c0cSopenharmony_ci ], 18987e2e9c0cSopenharmony_ci ); 18997e2e9c0cSopenharmony_ci} 19007e2e9c0cSopenharmony_ci 19017e2e9c0cSopenharmony_ci#[test] 19027e2e9c0cSopenharmony_cifn test_range_from() { 19037e2e9c0cSopenharmony_ci test( 19047e2e9c0cSopenharmony_ci 1u32.., 19057e2e9c0cSopenharmony_ci &[ 19067e2e9c0cSopenharmony_ci Token::Struct { 19077e2e9c0cSopenharmony_ci name: "RangeFrom", 19087e2e9c0cSopenharmony_ci len: 1, 19097e2e9c0cSopenharmony_ci }, 19107e2e9c0cSopenharmony_ci Token::Str("start"), 19117e2e9c0cSopenharmony_ci Token::U32(1), 19127e2e9c0cSopenharmony_ci Token::StructEnd, 19137e2e9c0cSopenharmony_ci ], 19147e2e9c0cSopenharmony_ci ); 19157e2e9c0cSopenharmony_ci test( 19167e2e9c0cSopenharmony_ci 1u32.., 19177e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(1) }, Token::U32(1), Token::SeqEnd], 19187e2e9c0cSopenharmony_ci ); 19197e2e9c0cSopenharmony_ci} 19207e2e9c0cSopenharmony_ci 19217e2e9c0cSopenharmony_ci#[test] 19227e2e9c0cSopenharmony_cifn test_range_to() { 19237e2e9c0cSopenharmony_ci test( 19247e2e9c0cSopenharmony_ci ..2u32, 19257e2e9c0cSopenharmony_ci &[ 19267e2e9c0cSopenharmony_ci Token::Struct { 19277e2e9c0cSopenharmony_ci name: "RangeTo", 19287e2e9c0cSopenharmony_ci len: 1, 19297e2e9c0cSopenharmony_ci }, 19307e2e9c0cSopenharmony_ci Token::Str("end"), 19317e2e9c0cSopenharmony_ci Token::U32(2), 19327e2e9c0cSopenharmony_ci Token::StructEnd, 19337e2e9c0cSopenharmony_ci ], 19347e2e9c0cSopenharmony_ci ); 19357e2e9c0cSopenharmony_ci test( 19367e2e9c0cSopenharmony_ci ..2u32, 19377e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(1) }, Token::U32(2), Token::SeqEnd], 19387e2e9c0cSopenharmony_ci ); 19397e2e9c0cSopenharmony_ci} 19407e2e9c0cSopenharmony_ci 19417e2e9c0cSopenharmony_ci#[test] 19427e2e9c0cSopenharmony_cifn test_bound() { 19437e2e9c0cSopenharmony_ci test( 19447e2e9c0cSopenharmony_ci Bound::Unbounded::<()>, 19457e2e9c0cSopenharmony_ci &[ 19467e2e9c0cSopenharmony_ci Token::Enum { name: "Bound" }, 19477e2e9c0cSopenharmony_ci Token::Str("Unbounded"), 19487e2e9c0cSopenharmony_ci Token::Unit, 19497e2e9c0cSopenharmony_ci ], 19507e2e9c0cSopenharmony_ci ); 19517e2e9c0cSopenharmony_ci test( 19527e2e9c0cSopenharmony_ci Bound::Included(0), 19537e2e9c0cSopenharmony_ci &[ 19547e2e9c0cSopenharmony_ci Token::Enum { name: "Bound" }, 19557e2e9c0cSopenharmony_ci Token::Str("Included"), 19567e2e9c0cSopenharmony_ci Token::U8(0), 19577e2e9c0cSopenharmony_ci ], 19587e2e9c0cSopenharmony_ci ); 19597e2e9c0cSopenharmony_ci test( 19607e2e9c0cSopenharmony_ci Bound::Excluded(0), 19617e2e9c0cSopenharmony_ci &[ 19627e2e9c0cSopenharmony_ci Token::Enum { name: "Bound" }, 19637e2e9c0cSopenharmony_ci Token::Str("Excluded"), 19647e2e9c0cSopenharmony_ci Token::U8(0), 19657e2e9c0cSopenharmony_ci ], 19667e2e9c0cSopenharmony_ci ); 19677e2e9c0cSopenharmony_ci} 19687e2e9c0cSopenharmony_ci 19697e2e9c0cSopenharmony_ci#[test] 19707e2e9c0cSopenharmony_cifn test_path() { 19717e2e9c0cSopenharmony_ci test( 19727e2e9c0cSopenharmony_ci Path::new("/usr/local/lib"), 19737e2e9c0cSopenharmony_ci &[Token::BorrowedStr("/usr/local/lib")], 19747e2e9c0cSopenharmony_ci ); 19757e2e9c0cSopenharmony_ci test( 19767e2e9c0cSopenharmony_ci Path::new("/usr/local/lib"), 19777e2e9c0cSopenharmony_ci &[Token::BorrowedBytes(b"/usr/local/lib")], 19787e2e9c0cSopenharmony_ci ); 19797e2e9c0cSopenharmony_ci} 19807e2e9c0cSopenharmony_ci 19817e2e9c0cSopenharmony_ci#[test] 19827e2e9c0cSopenharmony_cifn test_path_buf() { 19837e2e9c0cSopenharmony_ci test( 19847e2e9c0cSopenharmony_ci PathBuf::from("/usr/local/lib"), 19857e2e9c0cSopenharmony_ci &[Token::Str("/usr/local/lib")], 19867e2e9c0cSopenharmony_ci ); 19877e2e9c0cSopenharmony_ci test( 19887e2e9c0cSopenharmony_ci PathBuf::from("/usr/local/lib"), 19897e2e9c0cSopenharmony_ci &[Token::String("/usr/local/lib")], 19907e2e9c0cSopenharmony_ci ); 19917e2e9c0cSopenharmony_ci test( 19927e2e9c0cSopenharmony_ci PathBuf::from("/usr/local/lib"), 19937e2e9c0cSopenharmony_ci &[Token::Bytes(b"/usr/local/lib")], 19947e2e9c0cSopenharmony_ci ); 19957e2e9c0cSopenharmony_ci test( 19967e2e9c0cSopenharmony_ci PathBuf::from("/usr/local/lib"), 19977e2e9c0cSopenharmony_ci &[Token::ByteBuf(b"/usr/local/lib")], 19987e2e9c0cSopenharmony_ci ); 19997e2e9c0cSopenharmony_ci} 20007e2e9c0cSopenharmony_ci 20017e2e9c0cSopenharmony_ci#[test] 20027e2e9c0cSopenharmony_cifn test_boxed_path() { 20037e2e9c0cSopenharmony_ci test( 20047e2e9c0cSopenharmony_ci PathBuf::from("/usr/local/lib").into_boxed_path(), 20057e2e9c0cSopenharmony_ci &[Token::Str("/usr/local/lib")], 20067e2e9c0cSopenharmony_ci ); 20077e2e9c0cSopenharmony_ci test( 20087e2e9c0cSopenharmony_ci PathBuf::from("/usr/local/lib").into_boxed_path(), 20097e2e9c0cSopenharmony_ci &[Token::String("/usr/local/lib")], 20107e2e9c0cSopenharmony_ci ); 20117e2e9c0cSopenharmony_ci test( 20127e2e9c0cSopenharmony_ci PathBuf::from("/usr/local/lib").into_boxed_path(), 20137e2e9c0cSopenharmony_ci &[Token::Bytes(b"/usr/local/lib")], 20147e2e9c0cSopenharmony_ci ); 20157e2e9c0cSopenharmony_ci test( 20167e2e9c0cSopenharmony_ci PathBuf::from("/usr/local/lib").into_boxed_path(), 20177e2e9c0cSopenharmony_ci &[Token::ByteBuf(b"/usr/local/lib")], 20187e2e9c0cSopenharmony_ci ); 20197e2e9c0cSopenharmony_ci} 20207e2e9c0cSopenharmony_ci 20217e2e9c0cSopenharmony_ci#[test] 20227e2e9c0cSopenharmony_cifn test_cstring() { 20237e2e9c0cSopenharmony_ci test(CString::new("abc").unwrap(), &[Token::Bytes(b"abc")]); 20247e2e9c0cSopenharmony_ci} 20257e2e9c0cSopenharmony_ci 20267e2e9c0cSopenharmony_ci#[test] 20277e2e9c0cSopenharmony_cifn test_rc() { 20287e2e9c0cSopenharmony_ci test(Rc::new(true), &[Token::Bool(true)]); 20297e2e9c0cSopenharmony_ci} 20307e2e9c0cSopenharmony_ci 20317e2e9c0cSopenharmony_ci#[test] 20327e2e9c0cSopenharmony_cifn test_rc_weak_some() { 20337e2e9c0cSopenharmony_ci test( 20347e2e9c0cSopenharmony_ci SkipPartialEq(RcWeak::<bool>::new()), 20357e2e9c0cSopenharmony_ci &[Token::Some, Token::Bool(true)], 20367e2e9c0cSopenharmony_ci ); 20377e2e9c0cSopenharmony_ci} 20387e2e9c0cSopenharmony_ci 20397e2e9c0cSopenharmony_ci#[test] 20407e2e9c0cSopenharmony_cifn test_rc_weak_none() { 20417e2e9c0cSopenharmony_ci test(SkipPartialEq(RcWeak::<bool>::new()), &[Token::None]); 20427e2e9c0cSopenharmony_ci} 20437e2e9c0cSopenharmony_ci 20447e2e9c0cSopenharmony_ci#[test] 20457e2e9c0cSopenharmony_cifn test_arc() { 20467e2e9c0cSopenharmony_ci test(Arc::new(true), &[Token::Bool(true)]); 20477e2e9c0cSopenharmony_ci} 20487e2e9c0cSopenharmony_ci 20497e2e9c0cSopenharmony_ci#[test] 20507e2e9c0cSopenharmony_cifn test_arc_weak_some() { 20517e2e9c0cSopenharmony_ci test( 20527e2e9c0cSopenharmony_ci SkipPartialEq(ArcWeak::<bool>::new()), 20537e2e9c0cSopenharmony_ci &[Token::Some, Token::Bool(true)], 20547e2e9c0cSopenharmony_ci ); 20557e2e9c0cSopenharmony_ci} 20567e2e9c0cSopenharmony_ci 20577e2e9c0cSopenharmony_ci#[test] 20587e2e9c0cSopenharmony_cifn test_arc_weak_none() { 20597e2e9c0cSopenharmony_ci test(SkipPartialEq(ArcWeak::<bool>::new()), &[Token::None]); 20607e2e9c0cSopenharmony_ci} 20617e2e9c0cSopenharmony_ci 20627e2e9c0cSopenharmony_ci#[test] 20637e2e9c0cSopenharmony_cifn test_wrapping() { 20647e2e9c0cSopenharmony_ci test(Wrapping(1usize), &[Token::U32(1)]); 20657e2e9c0cSopenharmony_ci test(Wrapping(1usize), &[Token::U64(1)]); 20667e2e9c0cSopenharmony_ci} 20677e2e9c0cSopenharmony_ci 20687e2e9c0cSopenharmony_ci#[test] 20697e2e9c0cSopenharmony_cifn test_rc_dst() { 20707e2e9c0cSopenharmony_ci test(Rc::<str>::from("s"), &[Token::Str("s")]); 20717e2e9c0cSopenharmony_ci test( 20727e2e9c0cSopenharmony_ci Rc::<[bool]>::from(&[true][..]), 20737e2e9c0cSopenharmony_ci &[ 20747e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 20757e2e9c0cSopenharmony_ci Token::Bool(true), 20767e2e9c0cSopenharmony_ci Token::SeqEnd, 20777e2e9c0cSopenharmony_ci ], 20787e2e9c0cSopenharmony_ci ); 20797e2e9c0cSopenharmony_ci} 20807e2e9c0cSopenharmony_ci 20817e2e9c0cSopenharmony_ci#[test] 20827e2e9c0cSopenharmony_cifn test_arc_dst() { 20837e2e9c0cSopenharmony_ci test(Arc::<str>::from("s"), &[Token::Str("s")]); 20847e2e9c0cSopenharmony_ci test( 20857e2e9c0cSopenharmony_ci Arc::<[bool]>::from(&[true][..]), 20867e2e9c0cSopenharmony_ci &[ 20877e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 20887e2e9c0cSopenharmony_ci Token::Bool(true), 20897e2e9c0cSopenharmony_ci Token::SeqEnd, 20907e2e9c0cSopenharmony_ci ], 20917e2e9c0cSopenharmony_ci ); 20927e2e9c0cSopenharmony_ci} 20937e2e9c0cSopenharmony_ci 20947e2e9c0cSopenharmony_ci#[test] 20957e2e9c0cSopenharmony_cifn test_ignored_any() { 20967e2e9c0cSopenharmony_ci test(IgnoredAny, &[Token::Str("s")]); 20977e2e9c0cSopenharmony_ci test( 20987e2e9c0cSopenharmony_ci IgnoredAny, 20997e2e9c0cSopenharmony_ci &[ 21007e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 21017e2e9c0cSopenharmony_ci Token::Bool(true), 21027e2e9c0cSopenharmony_ci Token::SeqEnd, 21037e2e9c0cSopenharmony_ci ], 21047e2e9c0cSopenharmony_ci ); 21057e2e9c0cSopenharmony_ci test( 21067e2e9c0cSopenharmony_ci IgnoredAny, 21077e2e9c0cSopenharmony_ci &[Token::Enum { name: "E" }, Token::Str("Rust"), Token::Unit], 21087e2e9c0cSopenharmony_ci ); 21097e2e9c0cSopenharmony_ci} 21107e2e9c0cSopenharmony_ci 21117e2e9c0cSopenharmony_ci#[test] 21127e2e9c0cSopenharmony_cifn test_net_ipv4addr_readable() { 21137e2e9c0cSopenharmony_ci test( 21147e2e9c0cSopenharmony_ci "1.2.3.4".parse::<net::Ipv4Addr>().unwrap().readable(), 21157e2e9c0cSopenharmony_ci &[Token::Str("1.2.3.4")], 21167e2e9c0cSopenharmony_ci ); 21177e2e9c0cSopenharmony_ci} 21187e2e9c0cSopenharmony_ci 21197e2e9c0cSopenharmony_ci#[test] 21207e2e9c0cSopenharmony_cifn test_net_ipv6addr_readable() { 21217e2e9c0cSopenharmony_ci test( 21227e2e9c0cSopenharmony_ci "::1".parse::<net::Ipv6Addr>().unwrap().readable(), 21237e2e9c0cSopenharmony_ci &[Token::Str("::1")], 21247e2e9c0cSopenharmony_ci ); 21257e2e9c0cSopenharmony_ci} 21267e2e9c0cSopenharmony_ci 21277e2e9c0cSopenharmony_ci#[test] 21287e2e9c0cSopenharmony_cifn test_net_ipaddr_readable() { 21297e2e9c0cSopenharmony_ci test( 21307e2e9c0cSopenharmony_ci "1.2.3.4".parse::<net::IpAddr>().unwrap().readable(), 21317e2e9c0cSopenharmony_ci &[Token::Str("1.2.3.4")], 21327e2e9c0cSopenharmony_ci ); 21337e2e9c0cSopenharmony_ci} 21347e2e9c0cSopenharmony_ci 21357e2e9c0cSopenharmony_ci#[test] 21367e2e9c0cSopenharmony_cifn test_net_socketaddr_readable() { 21377e2e9c0cSopenharmony_ci test( 21387e2e9c0cSopenharmony_ci "1.2.3.4:1234" 21397e2e9c0cSopenharmony_ci .parse::<net::SocketAddr>() 21407e2e9c0cSopenharmony_ci .unwrap() 21417e2e9c0cSopenharmony_ci .readable(), 21427e2e9c0cSopenharmony_ci &[Token::Str("1.2.3.4:1234")], 21437e2e9c0cSopenharmony_ci ); 21447e2e9c0cSopenharmony_ci test( 21457e2e9c0cSopenharmony_ci "1.2.3.4:1234" 21467e2e9c0cSopenharmony_ci .parse::<net::SocketAddrV4>() 21477e2e9c0cSopenharmony_ci .unwrap() 21487e2e9c0cSopenharmony_ci .readable(), 21497e2e9c0cSopenharmony_ci &[Token::Str("1.2.3.4:1234")], 21507e2e9c0cSopenharmony_ci ); 21517e2e9c0cSopenharmony_ci test( 21527e2e9c0cSopenharmony_ci "[::1]:1234" 21537e2e9c0cSopenharmony_ci .parse::<net::SocketAddrV6>() 21547e2e9c0cSopenharmony_ci .unwrap() 21557e2e9c0cSopenharmony_ci .readable(), 21567e2e9c0cSopenharmony_ci &[Token::Str("[::1]:1234")], 21577e2e9c0cSopenharmony_ci ); 21587e2e9c0cSopenharmony_ci} 21597e2e9c0cSopenharmony_ci 21607e2e9c0cSopenharmony_ci#[test] 21617e2e9c0cSopenharmony_cifn test_net_ipv4addr_compact() { 21627e2e9c0cSopenharmony_ci test( 21637e2e9c0cSopenharmony_ci net::Ipv4Addr::from(*b"1234").compact(), 21647e2e9c0cSopenharmony_ci &seq![ 21657e2e9c0cSopenharmony_ci Token::Tuple { len: 4 }, 21667e2e9c0cSopenharmony_ci b"1234".iter().copied().map(Token::U8), 21677e2e9c0cSopenharmony_ci Token::TupleEnd 21687e2e9c0cSopenharmony_ci ], 21697e2e9c0cSopenharmony_ci ); 21707e2e9c0cSopenharmony_ci} 21717e2e9c0cSopenharmony_ci 21727e2e9c0cSopenharmony_ci#[test] 21737e2e9c0cSopenharmony_cifn test_net_ipv6addr_compact() { 21747e2e9c0cSopenharmony_ci test( 21757e2e9c0cSopenharmony_ci net::Ipv6Addr::from(*b"1234567890123456").compact(), 21767e2e9c0cSopenharmony_ci &seq![ 21777e2e9c0cSopenharmony_ci Token::Tuple { len: 4 }, 21787e2e9c0cSopenharmony_ci b"1234567890123456".iter().copied().map(Token::U8), 21797e2e9c0cSopenharmony_ci Token::TupleEnd 21807e2e9c0cSopenharmony_ci ], 21817e2e9c0cSopenharmony_ci ); 21827e2e9c0cSopenharmony_ci} 21837e2e9c0cSopenharmony_ci 21847e2e9c0cSopenharmony_ci#[test] 21857e2e9c0cSopenharmony_cifn test_net_ipaddr_compact() { 21867e2e9c0cSopenharmony_ci test( 21877e2e9c0cSopenharmony_ci net::IpAddr::from(*b"1234").compact(), 21887e2e9c0cSopenharmony_ci &seq![ 21897e2e9c0cSopenharmony_ci Token::NewtypeVariant { 21907e2e9c0cSopenharmony_ci name: "IpAddr", 21917e2e9c0cSopenharmony_ci variant: "V4" 21927e2e9c0cSopenharmony_ci }, 21937e2e9c0cSopenharmony_ci Token::Tuple { len: 4 }, 21947e2e9c0cSopenharmony_ci b"1234".iter().copied().map(Token::U8), 21957e2e9c0cSopenharmony_ci Token::TupleEnd 21967e2e9c0cSopenharmony_ci ], 21977e2e9c0cSopenharmony_ci ); 21987e2e9c0cSopenharmony_ci} 21997e2e9c0cSopenharmony_ci 22007e2e9c0cSopenharmony_ci#[test] 22017e2e9c0cSopenharmony_cifn test_net_socketaddr_compact() { 22027e2e9c0cSopenharmony_ci test( 22037e2e9c0cSopenharmony_ci net::SocketAddr::from((*b"1234567890123456", 1234)).compact(), 22047e2e9c0cSopenharmony_ci &seq![ 22057e2e9c0cSopenharmony_ci Token::NewtypeVariant { 22067e2e9c0cSopenharmony_ci name: "SocketAddr", 22077e2e9c0cSopenharmony_ci variant: "V6" 22087e2e9c0cSopenharmony_ci }, 22097e2e9c0cSopenharmony_ci Token::Tuple { len: 2 }, 22107e2e9c0cSopenharmony_ci Token::Tuple { len: 16 }, 22117e2e9c0cSopenharmony_ci b"1234567890123456".iter().copied().map(Token::U8), 22127e2e9c0cSopenharmony_ci Token::TupleEnd, 22137e2e9c0cSopenharmony_ci Token::U16(1234), 22147e2e9c0cSopenharmony_ci Token::TupleEnd 22157e2e9c0cSopenharmony_ci ], 22167e2e9c0cSopenharmony_ci ); 22177e2e9c0cSopenharmony_ci test( 22187e2e9c0cSopenharmony_ci net::SocketAddr::from((*b"1234", 1234)).compact(), 22197e2e9c0cSopenharmony_ci &seq![ 22207e2e9c0cSopenharmony_ci Token::NewtypeVariant { 22217e2e9c0cSopenharmony_ci name: "SocketAddr", 22227e2e9c0cSopenharmony_ci variant: "V4" 22237e2e9c0cSopenharmony_ci }, 22247e2e9c0cSopenharmony_ci Token::Tuple { len: 2 }, 22257e2e9c0cSopenharmony_ci Token::Tuple { len: 4 }, 22267e2e9c0cSopenharmony_ci b"1234".iter().copied().map(Token::U8), 22277e2e9c0cSopenharmony_ci Token::TupleEnd, 22287e2e9c0cSopenharmony_ci Token::U16(1234), 22297e2e9c0cSopenharmony_ci Token::TupleEnd 22307e2e9c0cSopenharmony_ci ], 22317e2e9c0cSopenharmony_ci ); 22327e2e9c0cSopenharmony_ci test( 22337e2e9c0cSopenharmony_ci net::SocketAddrV4::new(net::Ipv4Addr::from(*b"1234"), 1234).compact(), 22347e2e9c0cSopenharmony_ci &seq![ 22357e2e9c0cSopenharmony_ci Token::Tuple { len: 2 }, 22367e2e9c0cSopenharmony_ci Token::Tuple { len: 4 }, 22377e2e9c0cSopenharmony_ci b"1234".iter().copied().map(Token::U8), 22387e2e9c0cSopenharmony_ci Token::TupleEnd, 22397e2e9c0cSopenharmony_ci Token::U16(1234), 22407e2e9c0cSopenharmony_ci Token::TupleEnd 22417e2e9c0cSopenharmony_ci ], 22427e2e9c0cSopenharmony_ci ); 22437e2e9c0cSopenharmony_ci test( 22447e2e9c0cSopenharmony_ci net::SocketAddrV6::new(net::Ipv6Addr::from(*b"1234567890123456"), 1234, 0, 0).compact(), 22457e2e9c0cSopenharmony_ci &seq![ 22467e2e9c0cSopenharmony_ci Token::Tuple { len: 2 }, 22477e2e9c0cSopenharmony_ci Token::Tuple { len: 16 }, 22487e2e9c0cSopenharmony_ci b"1234567890123456".iter().copied().map(Token::U8), 22497e2e9c0cSopenharmony_ci Token::TupleEnd, 22507e2e9c0cSopenharmony_ci Token::U16(1234), 22517e2e9c0cSopenharmony_ci Token::TupleEnd 22527e2e9c0cSopenharmony_ci ], 22537e2e9c0cSopenharmony_ci ); 22547e2e9c0cSopenharmony_ci} 22557e2e9c0cSopenharmony_ci 22567e2e9c0cSopenharmony_ci#[cfg(feature = "unstable")] 22577e2e9c0cSopenharmony_ci#[test] 22587e2e9c0cSopenharmony_cifn test_never_result() { 22597e2e9c0cSopenharmony_ci test( 22607e2e9c0cSopenharmony_ci Ok::<u8, !>(0), 22617e2e9c0cSopenharmony_ci &[ 22627e2e9c0cSopenharmony_ci Token::NewtypeVariant { 22637e2e9c0cSopenharmony_ci name: "Result", 22647e2e9c0cSopenharmony_ci variant: "Ok", 22657e2e9c0cSopenharmony_ci }, 22667e2e9c0cSopenharmony_ci Token::U8(0), 22677e2e9c0cSopenharmony_ci ], 22687e2e9c0cSopenharmony_ci ); 22697e2e9c0cSopenharmony_ci} 22707e2e9c0cSopenharmony_ci 22717e2e9c0cSopenharmony_ci#[cfg(unix)] 22727e2e9c0cSopenharmony_ci#[test] 22737e2e9c0cSopenharmony_cifn test_osstring() { 22747e2e9c0cSopenharmony_ci use std::os::unix::ffi::OsStringExt; 22757e2e9c0cSopenharmony_ci 22767e2e9c0cSopenharmony_ci let value = OsString::from_vec(vec![1, 2, 3]); 22777e2e9c0cSopenharmony_ci let tokens = [ 22787e2e9c0cSopenharmony_ci Token::Enum { name: "OsString" }, 22797e2e9c0cSopenharmony_ci Token::Str("Unix"), 22807e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 22817e2e9c0cSopenharmony_ci Token::U8(1), 22827e2e9c0cSopenharmony_ci Token::U8(2), 22837e2e9c0cSopenharmony_ci Token::U8(3), 22847e2e9c0cSopenharmony_ci Token::SeqEnd, 22857e2e9c0cSopenharmony_ci ]; 22867e2e9c0cSopenharmony_ci 22877e2e9c0cSopenharmony_ci assert_de_tokens(&value, &tokens); 22887e2e9c0cSopenharmony_ci assert_de_tokens_ignore(&tokens); 22897e2e9c0cSopenharmony_ci} 22907e2e9c0cSopenharmony_ci 22917e2e9c0cSopenharmony_ci#[cfg(windows)] 22927e2e9c0cSopenharmony_ci#[test] 22937e2e9c0cSopenharmony_cifn test_osstring() { 22947e2e9c0cSopenharmony_ci use std::os::windows::ffi::OsStringExt; 22957e2e9c0cSopenharmony_ci 22967e2e9c0cSopenharmony_ci let value = OsString::from_wide(&[1, 2, 3]); 22977e2e9c0cSopenharmony_ci let tokens = [ 22987e2e9c0cSopenharmony_ci Token::Enum { name: "OsString" }, 22997e2e9c0cSopenharmony_ci Token::Str("Windows"), 23007e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 23017e2e9c0cSopenharmony_ci Token::U16(1), 23027e2e9c0cSopenharmony_ci Token::U16(2), 23037e2e9c0cSopenharmony_ci Token::U16(3), 23047e2e9c0cSopenharmony_ci Token::SeqEnd, 23057e2e9c0cSopenharmony_ci ]; 23067e2e9c0cSopenharmony_ci 23077e2e9c0cSopenharmony_ci assert_de_tokens(&value, &tokens); 23087e2e9c0cSopenharmony_ci assert_de_tokens_ignore(&tokens); 23097e2e9c0cSopenharmony_ci} 23107e2e9c0cSopenharmony_ci 23117e2e9c0cSopenharmony_ci#[test] 23127e2e9c0cSopenharmony_cifn test_cstr() { 23137e2e9c0cSopenharmony_ci assert_de_tokens::<Box<CStr>>( 23147e2e9c0cSopenharmony_ci &CString::new("abc").unwrap().into_boxed_c_str(), 23157e2e9c0cSopenharmony_ci &[Token::Bytes(b"abc")], 23167e2e9c0cSopenharmony_ci ); 23177e2e9c0cSopenharmony_ci} 23187e2e9c0cSopenharmony_ci 23197e2e9c0cSopenharmony_ci#[test] 23207e2e9c0cSopenharmony_cifn test_atomics() { 23217e2e9c0cSopenharmony_ci fn test<L, A, T>(load: L, val: T) 23227e2e9c0cSopenharmony_ci where 23237e2e9c0cSopenharmony_ci L: Fn(&A, Ordering) -> T, 23247e2e9c0cSopenharmony_ci A: DeserializeOwned, 23257e2e9c0cSopenharmony_ci T: PartialEq + Debug + Copy + for<'de> IntoDeserializer<'de>, 23267e2e9c0cSopenharmony_ci { 23277e2e9c0cSopenharmony_ci match A::deserialize(val.into_deserializer()) { 23287e2e9c0cSopenharmony_ci Ok(v) => { 23297e2e9c0cSopenharmony_ci let loaded = load(&v, Ordering::Relaxed); 23307e2e9c0cSopenharmony_ci assert_eq!(val, loaded); 23317e2e9c0cSopenharmony_ci } 23327e2e9c0cSopenharmony_ci Err(e) => panic!("tokens failed to deserialize: {}", e), 23337e2e9c0cSopenharmony_ci } 23347e2e9c0cSopenharmony_ci } 23357e2e9c0cSopenharmony_ci 23367e2e9c0cSopenharmony_ci test(AtomicBool::load, true); 23377e2e9c0cSopenharmony_ci test(AtomicI8::load, -127i8); 23387e2e9c0cSopenharmony_ci test(AtomicI16::load, -510i16); 23397e2e9c0cSopenharmony_ci test(AtomicI32::load, -131072i32); 23407e2e9c0cSopenharmony_ci test(AtomicIsize::load, -131072isize); 23417e2e9c0cSopenharmony_ci test(AtomicU8::load, 127u8); 23427e2e9c0cSopenharmony_ci test(AtomicU16::load, 510u16); 23437e2e9c0cSopenharmony_ci test(AtomicU32::load, 131072u32); 23447e2e9c0cSopenharmony_ci test(AtomicUsize::load, 131072usize); 23457e2e9c0cSopenharmony_ci 23467e2e9c0cSopenharmony_ci #[cfg(target_arch = "x86_64")] 23477e2e9c0cSopenharmony_ci { 23487e2e9c0cSopenharmony_ci test(AtomicI64::load, -8589934592i64); 23497e2e9c0cSopenharmony_ci test(AtomicU64::load, 8589934592u64); 23507e2e9c0cSopenharmony_ci } 23517e2e9c0cSopenharmony_ci} 2352