17e2e9c0cSopenharmony_ci#![allow(clippy::derive_partial_eq_without_eq, clippy::unreadable_literal)] 27e2e9c0cSopenharmony_ci#![cfg_attr(feature = "unstable", feature(never_type))] 37e2e9c0cSopenharmony_ci 47e2e9c0cSopenharmony_ciuse fnv::FnvHasher; 57e2e9c0cSopenharmony_ciuse serde_derive::Serialize; 67e2e9c0cSopenharmony_ciuse serde_test::{assert_ser_tokens, assert_ser_tokens_error, Configure, Token}; 77e2e9c0cSopenharmony_ciuse std::cell::RefCell; 87e2e9c0cSopenharmony_ciuse std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; 97e2e9c0cSopenharmony_ciuse std::ffi::CString; 107e2e9c0cSopenharmony_ciuse std::net; 117e2e9c0cSopenharmony_ciuse std::num::Wrapping; 127e2e9c0cSopenharmony_ciuse std::ops::Bound; 137e2e9c0cSopenharmony_ciuse std::path::{Path, PathBuf}; 147e2e9c0cSopenharmony_ciuse std::rc::{Rc, Weak as RcWeak}; 157e2e9c0cSopenharmony_ci#[cfg(unix)] 167e2e9c0cSopenharmony_ciuse std::str; 177e2e9c0cSopenharmony_ciuse std::sync::atomic::{ 187e2e9c0cSopenharmony_ci AtomicBool, AtomicI16, AtomicI32, AtomicI8, AtomicIsize, AtomicU16, AtomicU32, AtomicU8, 197e2e9c0cSopenharmony_ci AtomicUsize, 207e2e9c0cSopenharmony_ci}; 217e2e9c0cSopenharmony_ci#[cfg(target_arch = "x86_64")] 227e2e9c0cSopenharmony_ciuse std::sync::atomic::{AtomicI64, AtomicU64}; 237e2e9c0cSopenharmony_ciuse std::sync::{Arc, Mutex, RwLock, Weak as ArcWeak}; 247e2e9c0cSopenharmony_ciuse std::time::{Duration, UNIX_EPOCH}; 257e2e9c0cSopenharmony_ci 267e2e9c0cSopenharmony_ci#[macro_use] 277e2e9c0cSopenharmony_cimod macros; 287e2e9c0cSopenharmony_ci 297e2e9c0cSopenharmony_ci////////////////////////////////////////////////////////////////////////// 307e2e9c0cSopenharmony_ci 317e2e9c0cSopenharmony_ci#[derive(Serialize)] 327e2e9c0cSopenharmony_cistruct UnitStruct; 337e2e9c0cSopenharmony_ci 347e2e9c0cSopenharmony_ci#[derive(Serialize)] 357e2e9c0cSopenharmony_cistruct TupleStruct(i32, i32, i32); 367e2e9c0cSopenharmony_ci 377e2e9c0cSopenharmony_ci#[derive(Serialize)] 387e2e9c0cSopenharmony_cistruct Struct { 397e2e9c0cSopenharmony_ci a: i32, 407e2e9c0cSopenharmony_ci b: i32, 417e2e9c0cSopenharmony_ci c: i32, 427e2e9c0cSopenharmony_ci} 437e2e9c0cSopenharmony_ci 447e2e9c0cSopenharmony_ci#[derive(PartialEq, Debug)] 457e2e9c0cSopenharmony_cistruct NotSerializable; 467e2e9c0cSopenharmony_ci 477e2e9c0cSopenharmony_ci#[derive(Serialize, PartialEq, Debug)] 487e2e9c0cSopenharmony_cienum Enum { 497e2e9c0cSopenharmony_ci Unit, 507e2e9c0cSopenharmony_ci One(i32), 517e2e9c0cSopenharmony_ci Seq(i32, i32), 527e2e9c0cSopenharmony_ci Map { 537e2e9c0cSopenharmony_ci a: i32, 547e2e9c0cSopenharmony_ci b: i32, 557e2e9c0cSopenharmony_ci }, 567e2e9c0cSopenharmony_ci #[serde(skip_serializing)] 577e2e9c0cSopenharmony_ci SkippedUnit, 587e2e9c0cSopenharmony_ci #[serde(skip_serializing)] 597e2e9c0cSopenharmony_ci SkippedOne(i32), 607e2e9c0cSopenharmony_ci #[serde(skip_serializing)] 617e2e9c0cSopenharmony_ci SkippedSeq(i32, i32), 627e2e9c0cSopenharmony_ci #[serde(skip_serializing)] 637e2e9c0cSopenharmony_ci SkippedMap { 647e2e9c0cSopenharmony_ci _a: i32, 657e2e9c0cSopenharmony_ci _b: i32, 667e2e9c0cSopenharmony_ci }, 677e2e9c0cSopenharmony_ci OneWithSkipped(#[serde(skip_serializing)] NotSerializable), 687e2e9c0cSopenharmony_ci} 697e2e9c0cSopenharmony_ci 707e2e9c0cSopenharmony_ci////////////////////////////////////////////////////////////////////////// 717e2e9c0cSopenharmony_ci 727e2e9c0cSopenharmony_ci#[test] 737e2e9c0cSopenharmony_cifn test_unit() { 747e2e9c0cSopenharmony_ci assert_ser_tokens(&(), &[Token::Unit]); 757e2e9c0cSopenharmony_ci} 767e2e9c0cSopenharmony_ci 777e2e9c0cSopenharmony_ci#[test] 787e2e9c0cSopenharmony_cifn test_bool() { 797e2e9c0cSopenharmony_ci assert_ser_tokens(&true, &[Token::Bool(true)]); 807e2e9c0cSopenharmony_ci assert_ser_tokens(&false, &[Token::Bool(false)]); 817e2e9c0cSopenharmony_ci} 827e2e9c0cSopenharmony_ci 837e2e9c0cSopenharmony_ci#[test] 847e2e9c0cSopenharmony_cifn test_isizes() { 857e2e9c0cSopenharmony_ci assert_ser_tokens(&0i8, &[Token::I8(0)]); 867e2e9c0cSopenharmony_ci assert_ser_tokens(&0i16, &[Token::I16(0)]); 877e2e9c0cSopenharmony_ci assert_ser_tokens(&0i32, &[Token::I32(0)]); 887e2e9c0cSopenharmony_ci assert_ser_tokens(&0i64, &[Token::I64(0)]); 897e2e9c0cSopenharmony_ci} 907e2e9c0cSopenharmony_ci 917e2e9c0cSopenharmony_ci#[test] 927e2e9c0cSopenharmony_cifn test_usizes() { 937e2e9c0cSopenharmony_ci assert_ser_tokens(&0u8, &[Token::U8(0)]); 947e2e9c0cSopenharmony_ci assert_ser_tokens(&0u16, &[Token::U16(0)]); 957e2e9c0cSopenharmony_ci assert_ser_tokens(&0u32, &[Token::U32(0)]); 967e2e9c0cSopenharmony_ci assert_ser_tokens(&0u64, &[Token::U64(0)]); 977e2e9c0cSopenharmony_ci} 987e2e9c0cSopenharmony_ci 997e2e9c0cSopenharmony_ci#[test] 1007e2e9c0cSopenharmony_cifn test_floats() { 1017e2e9c0cSopenharmony_ci assert_ser_tokens(&0f32, &[Token::F32(0.)]); 1027e2e9c0cSopenharmony_ci assert_ser_tokens(&0f64, &[Token::F64(0.)]); 1037e2e9c0cSopenharmony_ci} 1047e2e9c0cSopenharmony_ci 1057e2e9c0cSopenharmony_ci#[test] 1067e2e9c0cSopenharmony_cifn test_char() { 1077e2e9c0cSopenharmony_ci assert_ser_tokens(&'a', &[Token::Char('a')]); 1087e2e9c0cSopenharmony_ci} 1097e2e9c0cSopenharmony_ci 1107e2e9c0cSopenharmony_ci#[test] 1117e2e9c0cSopenharmony_cifn test_str() { 1127e2e9c0cSopenharmony_ci assert_ser_tokens(&"abc", &[Token::Str("abc")]); 1137e2e9c0cSopenharmony_ci assert_ser_tokens(&"abc".to_owned(), &[Token::Str("abc")]); 1147e2e9c0cSopenharmony_ci} 1157e2e9c0cSopenharmony_ci 1167e2e9c0cSopenharmony_ci#[test] 1177e2e9c0cSopenharmony_cifn test_option() { 1187e2e9c0cSopenharmony_ci assert_ser_tokens(&None::<i32>, &[Token::None]); 1197e2e9c0cSopenharmony_ci assert_ser_tokens(&Some(1), &[Token::Some, Token::I32(1)]); 1207e2e9c0cSopenharmony_ci} 1217e2e9c0cSopenharmony_ci 1227e2e9c0cSopenharmony_ci#[test] 1237e2e9c0cSopenharmony_cifn test_result() { 1247e2e9c0cSopenharmony_ci assert_ser_tokens( 1257e2e9c0cSopenharmony_ci &Ok::<i32, i32>(0), 1267e2e9c0cSopenharmony_ci &[ 1277e2e9c0cSopenharmony_ci Token::NewtypeVariant { 1287e2e9c0cSopenharmony_ci name: "Result", 1297e2e9c0cSopenharmony_ci variant: "Ok", 1307e2e9c0cSopenharmony_ci }, 1317e2e9c0cSopenharmony_ci Token::I32(0), 1327e2e9c0cSopenharmony_ci ], 1337e2e9c0cSopenharmony_ci ); 1347e2e9c0cSopenharmony_ci assert_ser_tokens( 1357e2e9c0cSopenharmony_ci &Err::<i32, i32>(1), 1367e2e9c0cSopenharmony_ci &[ 1377e2e9c0cSopenharmony_ci Token::NewtypeVariant { 1387e2e9c0cSopenharmony_ci name: "Result", 1397e2e9c0cSopenharmony_ci variant: "Err", 1407e2e9c0cSopenharmony_ci }, 1417e2e9c0cSopenharmony_ci Token::I32(1), 1427e2e9c0cSopenharmony_ci ], 1437e2e9c0cSopenharmony_ci ); 1447e2e9c0cSopenharmony_ci} 1457e2e9c0cSopenharmony_ci 1467e2e9c0cSopenharmony_ci#[test] 1477e2e9c0cSopenharmony_cifn test_slice() { 1487e2e9c0cSopenharmony_ci assert_ser_tokens(&[0][..0], &[Token::Seq { len: Some(0) }, Token::SeqEnd]); 1497e2e9c0cSopenharmony_ci assert_ser_tokens( 1507e2e9c0cSopenharmony_ci &[1, 2, 3][..], 1517e2e9c0cSopenharmony_ci &[ 1527e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 1537e2e9c0cSopenharmony_ci Token::I32(1), 1547e2e9c0cSopenharmony_ci Token::I32(2), 1557e2e9c0cSopenharmony_ci Token::I32(3), 1567e2e9c0cSopenharmony_ci Token::SeqEnd, 1577e2e9c0cSopenharmony_ci ], 1587e2e9c0cSopenharmony_ci ); 1597e2e9c0cSopenharmony_ci} 1607e2e9c0cSopenharmony_ci 1617e2e9c0cSopenharmony_ci#[test] 1627e2e9c0cSopenharmony_cifn test_array() { 1637e2e9c0cSopenharmony_ci assert_ser_tokens(&[0; 0], &[Token::Tuple { len: 0 }, Token::TupleEnd]); 1647e2e9c0cSopenharmony_ci assert_ser_tokens( 1657e2e9c0cSopenharmony_ci &[1, 2, 3], 1667e2e9c0cSopenharmony_ci &[ 1677e2e9c0cSopenharmony_ci Token::Tuple { len: 3 }, 1687e2e9c0cSopenharmony_ci Token::I32(1), 1697e2e9c0cSopenharmony_ci Token::I32(2), 1707e2e9c0cSopenharmony_ci Token::I32(3), 1717e2e9c0cSopenharmony_ci Token::TupleEnd, 1727e2e9c0cSopenharmony_ci ], 1737e2e9c0cSopenharmony_ci ); 1747e2e9c0cSopenharmony_ci} 1757e2e9c0cSopenharmony_ci 1767e2e9c0cSopenharmony_ci#[test] 1777e2e9c0cSopenharmony_cifn test_vec() { 1787e2e9c0cSopenharmony_ci assert_ser_tokens( 1797e2e9c0cSopenharmony_ci &Vec::<isize>::new(), 1807e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(0) }, Token::SeqEnd], 1817e2e9c0cSopenharmony_ci ); 1827e2e9c0cSopenharmony_ci assert_ser_tokens( 1837e2e9c0cSopenharmony_ci &vec![vec![], vec![1], vec![2, 3]], 1847e2e9c0cSopenharmony_ci &[ 1857e2e9c0cSopenharmony_ci Token::Seq { len: Some(3) }, 1867e2e9c0cSopenharmony_ci Token::Seq { len: Some(0) }, 1877e2e9c0cSopenharmony_ci Token::SeqEnd, 1887e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 1897e2e9c0cSopenharmony_ci Token::I32(1), 1907e2e9c0cSopenharmony_ci Token::SeqEnd, 1917e2e9c0cSopenharmony_ci Token::Seq { len: Some(2) }, 1927e2e9c0cSopenharmony_ci Token::I32(2), 1937e2e9c0cSopenharmony_ci Token::I32(3), 1947e2e9c0cSopenharmony_ci Token::SeqEnd, 1957e2e9c0cSopenharmony_ci Token::SeqEnd, 1967e2e9c0cSopenharmony_ci ], 1977e2e9c0cSopenharmony_ci ); 1987e2e9c0cSopenharmony_ci} 1997e2e9c0cSopenharmony_ci 2007e2e9c0cSopenharmony_ci#[test] 2017e2e9c0cSopenharmony_cifn test_btreeset() { 2027e2e9c0cSopenharmony_ci assert_ser_tokens( 2037e2e9c0cSopenharmony_ci &BTreeSet::<isize>::new(), 2047e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(0) }, Token::SeqEnd], 2057e2e9c0cSopenharmony_ci ); 2067e2e9c0cSopenharmony_ci assert_ser_tokens( 2077e2e9c0cSopenharmony_ci &btreeset![1], 2087e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(1) }, Token::I32(1), Token::SeqEnd], 2097e2e9c0cSopenharmony_ci ); 2107e2e9c0cSopenharmony_ci} 2117e2e9c0cSopenharmony_ci 2127e2e9c0cSopenharmony_ci#[test] 2137e2e9c0cSopenharmony_cifn test_hashset() { 2147e2e9c0cSopenharmony_ci assert_ser_tokens( 2157e2e9c0cSopenharmony_ci &HashSet::<isize>::new(), 2167e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(0) }, Token::SeqEnd], 2177e2e9c0cSopenharmony_ci ); 2187e2e9c0cSopenharmony_ci assert_ser_tokens( 2197e2e9c0cSopenharmony_ci &hashset![1], 2207e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(1) }, Token::I32(1), Token::SeqEnd], 2217e2e9c0cSopenharmony_ci ); 2227e2e9c0cSopenharmony_ci assert_ser_tokens( 2237e2e9c0cSopenharmony_ci &hashset![FnvHasher @ 1], 2247e2e9c0cSopenharmony_ci &[Token::Seq { len: Some(1) }, Token::I32(1), Token::SeqEnd], 2257e2e9c0cSopenharmony_ci ); 2267e2e9c0cSopenharmony_ci} 2277e2e9c0cSopenharmony_ci 2287e2e9c0cSopenharmony_ci#[test] 2297e2e9c0cSopenharmony_cifn test_tuple() { 2307e2e9c0cSopenharmony_ci assert_ser_tokens( 2317e2e9c0cSopenharmony_ci &(1,), 2327e2e9c0cSopenharmony_ci &[Token::Tuple { len: 1 }, Token::I32(1), Token::TupleEnd], 2337e2e9c0cSopenharmony_ci ); 2347e2e9c0cSopenharmony_ci assert_ser_tokens( 2357e2e9c0cSopenharmony_ci &(1, 2, 3), 2367e2e9c0cSopenharmony_ci &[ 2377e2e9c0cSopenharmony_ci Token::Tuple { len: 3 }, 2387e2e9c0cSopenharmony_ci Token::I32(1), 2397e2e9c0cSopenharmony_ci Token::I32(2), 2407e2e9c0cSopenharmony_ci Token::I32(3), 2417e2e9c0cSopenharmony_ci Token::TupleEnd, 2427e2e9c0cSopenharmony_ci ], 2437e2e9c0cSopenharmony_ci ); 2447e2e9c0cSopenharmony_ci} 2457e2e9c0cSopenharmony_ci 2467e2e9c0cSopenharmony_ci#[test] 2477e2e9c0cSopenharmony_cifn test_btreemap() { 2487e2e9c0cSopenharmony_ci assert_ser_tokens( 2497e2e9c0cSopenharmony_ci &btreemap![1 => 2], 2507e2e9c0cSopenharmony_ci &[ 2517e2e9c0cSopenharmony_ci Token::Map { len: Some(1) }, 2527e2e9c0cSopenharmony_ci Token::I32(1), 2537e2e9c0cSopenharmony_ci Token::I32(2), 2547e2e9c0cSopenharmony_ci Token::MapEnd, 2557e2e9c0cSopenharmony_ci ], 2567e2e9c0cSopenharmony_ci ); 2577e2e9c0cSopenharmony_ci assert_ser_tokens( 2587e2e9c0cSopenharmony_ci &btreemap![1 => 2, 3 => 4], 2597e2e9c0cSopenharmony_ci &[ 2607e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 2617e2e9c0cSopenharmony_ci Token::I32(1), 2627e2e9c0cSopenharmony_ci Token::I32(2), 2637e2e9c0cSopenharmony_ci Token::I32(3), 2647e2e9c0cSopenharmony_ci Token::I32(4), 2657e2e9c0cSopenharmony_ci Token::MapEnd, 2667e2e9c0cSopenharmony_ci ], 2677e2e9c0cSopenharmony_ci ); 2687e2e9c0cSopenharmony_ci assert_ser_tokens( 2697e2e9c0cSopenharmony_ci &btreemap![1 => btreemap![], 2 => btreemap![3 => 4, 5 => 6]], 2707e2e9c0cSopenharmony_ci &[ 2717e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 2727e2e9c0cSopenharmony_ci Token::I32(1), 2737e2e9c0cSopenharmony_ci Token::Map { len: Some(0) }, 2747e2e9c0cSopenharmony_ci Token::MapEnd, 2757e2e9c0cSopenharmony_ci Token::I32(2), 2767e2e9c0cSopenharmony_ci Token::Map { len: Some(2) }, 2777e2e9c0cSopenharmony_ci Token::I32(3), 2787e2e9c0cSopenharmony_ci Token::I32(4), 2797e2e9c0cSopenharmony_ci Token::I32(5), 2807e2e9c0cSopenharmony_ci Token::I32(6), 2817e2e9c0cSopenharmony_ci Token::MapEnd, 2827e2e9c0cSopenharmony_ci Token::MapEnd, 2837e2e9c0cSopenharmony_ci ], 2847e2e9c0cSopenharmony_ci ); 2857e2e9c0cSopenharmony_ci} 2867e2e9c0cSopenharmony_ci 2877e2e9c0cSopenharmony_ci#[test] 2887e2e9c0cSopenharmony_cifn test_hashmap() { 2897e2e9c0cSopenharmony_ci assert_ser_tokens( 2907e2e9c0cSopenharmony_ci &HashMap::<isize, isize>::new(), 2917e2e9c0cSopenharmony_ci &[Token::Map { len: Some(0) }, Token::MapEnd], 2927e2e9c0cSopenharmony_ci ); 2937e2e9c0cSopenharmony_ci assert_ser_tokens( 2947e2e9c0cSopenharmony_ci &hashmap![1 => 2], 2957e2e9c0cSopenharmony_ci &[ 2967e2e9c0cSopenharmony_ci Token::Map { len: Some(1) }, 2977e2e9c0cSopenharmony_ci Token::I32(1), 2987e2e9c0cSopenharmony_ci Token::I32(2), 2997e2e9c0cSopenharmony_ci Token::MapEnd, 3007e2e9c0cSopenharmony_ci ], 3017e2e9c0cSopenharmony_ci ); 3027e2e9c0cSopenharmony_ci assert_ser_tokens( 3037e2e9c0cSopenharmony_ci &hashmap![FnvHasher @ 1 => 2], 3047e2e9c0cSopenharmony_ci &[ 3057e2e9c0cSopenharmony_ci Token::Map { len: Some(1) }, 3067e2e9c0cSopenharmony_ci Token::I32(1), 3077e2e9c0cSopenharmony_ci Token::I32(2), 3087e2e9c0cSopenharmony_ci Token::MapEnd, 3097e2e9c0cSopenharmony_ci ], 3107e2e9c0cSopenharmony_ci ); 3117e2e9c0cSopenharmony_ci} 3127e2e9c0cSopenharmony_ci 3137e2e9c0cSopenharmony_ci#[test] 3147e2e9c0cSopenharmony_cifn test_unit_struct() { 3157e2e9c0cSopenharmony_ci assert_ser_tokens(&UnitStruct, &[Token::UnitStruct { name: "UnitStruct" }]); 3167e2e9c0cSopenharmony_ci} 3177e2e9c0cSopenharmony_ci 3187e2e9c0cSopenharmony_ci#[test] 3197e2e9c0cSopenharmony_cifn test_tuple_struct() { 3207e2e9c0cSopenharmony_ci assert_ser_tokens( 3217e2e9c0cSopenharmony_ci &TupleStruct(1, 2, 3), 3227e2e9c0cSopenharmony_ci &[ 3237e2e9c0cSopenharmony_ci Token::TupleStruct { 3247e2e9c0cSopenharmony_ci name: "TupleStruct", 3257e2e9c0cSopenharmony_ci len: 3, 3267e2e9c0cSopenharmony_ci }, 3277e2e9c0cSopenharmony_ci Token::I32(1), 3287e2e9c0cSopenharmony_ci Token::I32(2), 3297e2e9c0cSopenharmony_ci Token::I32(3), 3307e2e9c0cSopenharmony_ci Token::TupleStructEnd, 3317e2e9c0cSopenharmony_ci ], 3327e2e9c0cSopenharmony_ci ); 3337e2e9c0cSopenharmony_ci} 3347e2e9c0cSopenharmony_ci 3357e2e9c0cSopenharmony_ci#[test] 3367e2e9c0cSopenharmony_cifn test_struct() { 3377e2e9c0cSopenharmony_ci assert_ser_tokens( 3387e2e9c0cSopenharmony_ci &Struct { a: 1, b: 2, c: 3 }, 3397e2e9c0cSopenharmony_ci &[ 3407e2e9c0cSopenharmony_ci Token::Struct { 3417e2e9c0cSopenharmony_ci name: "Struct", 3427e2e9c0cSopenharmony_ci len: 3, 3437e2e9c0cSopenharmony_ci }, 3447e2e9c0cSopenharmony_ci Token::Str("a"), 3457e2e9c0cSopenharmony_ci Token::I32(1), 3467e2e9c0cSopenharmony_ci Token::Str("b"), 3477e2e9c0cSopenharmony_ci Token::I32(2), 3487e2e9c0cSopenharmony_ci Token::Str("c"), 3497e2e9c0cSopenharmony_ci Token::I32(3), 3507e2e9c0cSopenharmony_ci Token::StructEnd, 3517e2e9c0cSopenharmony_ci ], 3527e2e9c0cSopenharmony_ci ); 3537e2e9c0cSopenharmony_ci} 3547e2e9c0cSopenharmony_ci 3557e2e9c0cSopenharmony_ci#[test] 3567e2e9c0cSopenharmony_cifn test_enum() { 3577e2e9c0cSopenharmony_ci assert_ser_tokens( 3587e2e9c0cSopenharmony_ci &Enum::Unit, 3597e2e9c0cSopenharmony_ci &[Token::UnitVariant { 3607e2e9c0cSopenharmony_ci name: "Enum", 3617e2e9c0cSopenharmony_ci variant: "Unit", 3627e2e9c0cSopenharmony_ci }], 3637e2e9c0cSopenharmony_ci ); 3647e2e9c0cSopenharmony_ci assert_ser_tokens( 3657e2e9c0cSopenharmony_ci &Enum::One(42), 3667e2e9c0cSopenharmony_ci &[ 3677e2e9c0cSopenharmony_ci Token::NewtypeVariant { 3687e2e9c0cSopenharmony_ci name: "Enum", 3697e2e9c0cSopenharmony_ci variant: "One", 3707e2e9c0cSopenharmony_ci }, 3717e2e9c0cSopenharmony_ci Token::I32(42), 3727e2e9c0cSopenharmony_ci ], 3737e2e9c0cSopenharmony_ci ); 3747e2e9c0cSopenharmony_ci assert_ser_tokens( 3757e2e9c0cSopenharmony_ci &Enum::Seq(1, 2), 3767e2e9c0cSopenharmony_ci &[ 3777e2e9c0cSopenharmony_ci Token::TupleVariant { 3787e2e9c0cSopenharmony_ci name: "Enum", 3797e2e9c0cSopenharmony_ci variant: "Seq", 3807e2e9c0cSopenharmony_ci len: 2, 3817e2e9c0cSopenharmony_ci }, 3827e2e9c0cSopenharmony_ci Token::I32(1), 3837e2e9c0cSopenharmony_ci Token::I32(2), 3847e2e9c0cSopenharmony_ci Token::TupleVariantEnd, 3857e2e9c0cSopenharmony_ci ], 3867e2e9c0cSopenharmony_ci ); 3877e2e9c0cSopenharmony_ci assert_ser_tokens( 3887e2e9c0cSopenharmony_ci &Enum::Map { a: 1, b: 2 }, 3897e2e9c0cSopenharmony_ci &[ 3907e2e9c0cSopenharmony_ci Token::StructVariant { 3917e2e9c0cSopenharmony_ci name: "Enum", 3927e2e9c0cSopenharmony_ci variant: "Map", 3937e2e9c0cSopenharmony_ci len: 2, 3947e2e9c0cSopenharmony_ci }, 3957e2e9c0cSopenharmony_ci Token::Str("a"), 3967e2e9c0cSopenharmony_ci Token::I32(1), 3977e2e9c0cSopenharmony_ci Token::Str("b"), 3987e2e9c0cSopenharmony_ci Token::I32(2), 3997e2e9c0cSopenharmony_ci Token::StructVariantEnd, 4007e2e9c0cSopenharmony_ci ], 4017e2e9c0cSopenharmony_ci ); 4027e2e9c0cSopenharmony_ci assert_ser_tokens( 4037e2e9c0cSopenharmony_ci &Enum::OneWithSkipped(NotSerializable), 4047e2e9c0cSopenharmony_ci &[Token::UnitVariant { 4057e2e9c0cSopenharmony_ci name: "Enum", 4067e2e9c0cSopenharmony_ci variant: "OneWithSkipped", 4077e2e9c0cSopenharmony_ci }], 4087e2e9c0cSopenharmony_ci ); 4097e2e9c0cSopenharmony_ci} 4107e2e9c0cSopenharmony_ci 4117e2e9c0cSopenharmony_ci#[test] 4127e2e9c0cSopenharmony_cifn test_box() { 4137e2e9c0cSopenharmony_ci assert_ser_tokens(&Box::new(0i32), &[Token::I32(0)]); 4147e2e9c0cSopenharmony_ci} 4157e2e9c0cSopenharmony_ci 4167e2e9c0cSopenharmony_ci#[test] 4177e2e9c0cSopenharmony_cifn test_boxed_slice() { 4187e2e9c0cSopenharmony_ci assert_ser_tokens( 4197e2e9c0cSopenharmony_ci &Box::new([0, 1, 2]), 4207e2e9c0cSopenharmony_ci &[ 4217e2e9c0cSopenharmony_ci Token::Tuple { len: 3 }, 4227e2e9c0cSopenharmony_ci Token::I32(0), 4237e2e9c0cSopenharmony_ci Token::I32(1), 4247e2e9c0cSopenharmony_ci Token::I32(2), 4257e2e9c0cSopenharmony_ci Token::TupleEnd, 4267e2e9c0cSopenharmony_ci ], 4277e2e9c0cSopenharmony_ci ); 4287e2e9c0cSopenharmony_ci} 4297e2e9c0cSopenharmony_ci 4307e2e9c0cSopenharmony_ci#[test] 4317e2e9c0cSopenharmony_cifn test_duration() { 4327e2e9c0cSopenharmony_ci assert_ser_tokens( 4337e2e9c0cSopenharmony_ci &Duration::new(1, 2), 4347e2e9c0cSopenharmony_ci &[ 4357e2e9c0cSopenharmony_ci Token::Struct { 4367e2e9c0cSopenharmony_ci name: "Duration", 4377e2e9c0cSopenharmony_ci len: 2, 4387e2e9c0cSopenharmony_ci }, 4397e2e9c0cSopenharmony_ci Token::Str("secs"), 4407e2e9c0cSopenharmony_ci Token::U64(1), 4417e2e9c0cSopenharmony_ci Token::Str("nanos"), 4427e2e9c0cSopenharmony_ci Token::U32(2), 4437e2e9c0cSopenharmony_ci Token::StructEnd, 4447e2e9c0cSopenharmony_ci ], 4457e2e9c0cSopenharmony_ci ); 4467e2e9c0cSopenharmony_ci} 4477e2e9c0cSopenharmony_ci 4487e2e9c0cSopenharmony_ci#[test] 4497e2e9c0cSopenharmony_cifn test_system_time() { 4507e2e9c0cSopenharmony_ci let system_time = UNIX_EPOCH + Duration::new(1, 200); 4517e2e9c0cSopenharmony_ci assert_ser_tokens( 4527e2e9c0cSopenharmony_ci &system_time, 4537e2e9c0cSopenharmony_ci &[ 4547e2e9c0cSopenharmony_ci Token::Struct { 4557e2e9c0cSopenharmony_ci name: "SystemTime", 4567e2e9c0cSopenharmony_ci len: 2, 4577e2e9c0cSopenharmony_ci }, 4587e2e9c0cSopenharmony_ci Token::Str("secs_since_epoch"), 4597e2e9c0cSopenharmony_ci Token::U64(1), 4607e2e9c0cSopenharmony_ci Token::Str("nanos_since_epoch"), 4617e2e9c0cSopenharmony_ci Token::U32(200), 4627e2e9c0cSopenharmony_ci Token::StructEnd, 4637e2e9c0cSopenharmony_ci ], 4647e2e9c0cSopenharmony_ci ); 4657e2e9c0cSopenharmony_ci} 4667e2e9c0cSopenharmony_ci 4677e2e9c0cSopenharmony_ci#[test] 4687e2e9c0cSopenharmony_cifn test_range() { 4697e2e9c0cSopenharmony_ci assert_ser_tokens( 4707e2e9c0cSopenharmony_ci &(1u32..2u32), 4717e2e9c0cSopenharmony_ci &[ 4727e2e9c0cSopenharmony_ci Token::Struct { 4737e2e9c0cSopenharmony_ci name: "Range", 4747e2e9c0cSopenharmony_ci len: 2, 4757e2e9c0cSopenharmony_ci }, 4767e2e9c0cSopenharmony_ci Token::Str("start"), 4777e2e9c0cSopenharmony_ci Token::U32(1), 4787e2e9c0cSopenharmony_ci Token::Str("end"), 4797e2e9c0cSopenharmony_ci Token::U32(2), 4807e2e9c0cSopenharmony_ci Token::StructEnd, 4817e2e9c0cSopenharmony_ci ], 4827e2e9c0cSopenharmony_ci ); 4837e2e9c0cSopenharmony_ci} 4847e2e9c0cSopenharmony_ci 4857e2e9c0cSopenharmony_ci#[test] 4867e2e9c0cSopenharmony_cifn test_range_inclusive() { 4877e2e9c0cSopenharmony_ci assert_ser_tokens( 4887e2e9c0cSopenharmony_ci &(1u32..=2u32), 4897e2e9c0cSopenharmony_ci &[ 4907e2e9c0cSopenharmony_ci Token::Struct { 4917e2e9c0cSopenharmony_ci name: "RangeInclusive", 4927e2e9c0cSopenharmony_ci len: 2, 4937e2e9c0cSopenharmony_ci }, 4947e2e9c0cSopenharmony_ci Token::Str("start"), 4957e2e9c0cSopenharmony_ci Token::U32(1), 4967e2e9c0cSopenharmony_ci Token::Str("end"), 4977e2e9c0cSopenharmony_ci Token::U32(2), 4987e2e9c0cSopenharmony_ci Token::StructEnd, 4997e2e9c0cSopenharmony_ci ], 5007e2e9c0cSopenharmony_ci ); 5017e2e9c0cSopenharmony_ci} 5027e2e9c0cSopenharmony_ci 5037e2e9c0cSopenharmony_ci#[test] 5047e2e9c0cSopenharmony_cifn test_range_from() { 5057e2e9c0cSopenharmony_ci assert_ser_tokens( 5067e2e9c0cSopenharmony_ci &(1u32..), 5077e2e9c0cSopenharmony_ci &[ 5087e2e9c0cSopenharmony_ci Token::Struct { 5097e2e9c0cSopenharmony_ci name: "RangeFrom", 5107e2e9c0cSopenharmony_ci len: 1, 5117e2e9c0cSopenharmony_ci }, 5127e2e9c0cSopenharmony_ci Token::Str("start"), 5137e2e9c0cSopenharmony_ci Token::U32(1), 5147e2e9c0cSopenharmony_ci Token::StructEnd, 5157e2e9c0cSopenharmony_ci ], 5167e2e9c0cSopenharmony_ci ); 5177e2e9c0cSopenharmony_ci} 5187e2e9c0cSopenharmony_ci 5197e2e9c0cSopenharmony_ci#[test] 5207e2e9c0cSopenharmony_cifn test_range_to() { 5217e2e9c0cSopenharmony_ci assert_ser_tokens( 5227e2e9c0cSopenharmony_ci &(..2u32), 5237e2e9c0cSopenharmony_ci &[ 5247e2e9c0cSopenharmony_ci Token::Struct { 5257e2e9c0cSopenharmony_ci name: "RangeTo", 5267e2e9c0cSopenharmony_ci len: 1, 5277e2e9c0cSopenharmony_ci }, 5287e2e9c0cSopenharmony_ci Token::Str("end"), 5297e2e9c0cSopenharmony_ci Token::U32(2), 5307e2e9c0cSopenharmony_ci Token::StructEnd, 5317e2e9c0cSopenharmony_ci ], 5327e2e9c0cSopenharmony_ci ); 5337e2e9c0cSopenharmony_ci} 5347e2e9c0cSopenharmony_ci 5357e2e9c0cSopenharmony_ci#[test] 5367e2e9c0cSopenharmony_cifn test_bound() { 5377e2e9c0cSopenharmony_ci assert_ser_tokens( 5387e2e9c0cSopenharmony_ci &Bound::Unbounded::<()>, 5397e2e9c0cSopenharmony_ci &[ 5407e2e9c0cSopenharmony_ci Token::Enum { name: "Bound" }, 5417e2e9c0cSopenharmony_ci Token::Str("Unbounded"), 5427e2e9c0cSopenharmony_ci Token::Unit, 5437e2e9c0cSopenharmony_ci ], 5447e2e9c0cSopenharmony_ci ); 5457e2e9c0cSopenharmony_ci assert_ser_tokens( 5467e2e9c0cSopenharmony_ci &Bound::Included(0u8), 5477e2e9c0cSopenharmony_ci &[ 5487e2e9c0cSopenharmony_ci Token::Enum { name: "Bound" }, 5497e2e9c0cSopenharmony_ci Token::Str("Included"), 5507e2e9c0cSopenharmony_ci Token::U8(0), 5517e2e9c0cSopenharmony_ci ], 5527e2e9c0cSopenharmony_ci ); 5537e2e9c0cSopenharmony_ci assert_ser_tokens( 5547e2e9c0cSopenharmony_ci &Bound::Excluded(0u8), 5557e2e9c0cSopenharmony_ci &[ 5567e2e9c0cSopenharmony_ci Token::Enum { name: "Bound" }, 5577e2e9c0cSopenharmony_ci Token::Str("Excluded"), 5587e2e9c0cSopenharmony_ci Token::U8(0), 5597e2e9c0cSopenharmony_ci ], 5607e2e9c0cSopenharmony_ci ); 5617e2e9c0cSopenharmony_ci} 5627e2e9c0cSopenharmony_ci 5637e2e9c0cSopenharmony_ci#[test] 5647e2e9c0cSopenharmony_cifn test_path() { 5657e2e9c0cSopenharmony_ci assert_ser_tokens( 5667e2e9c0cSopenharmony_ci &Path::new("/usr/local/lib"), 5677e2e9c0cSopenharmony_ci &[Token::Str("/usr/local/lib")], 5687e2e9c0cSopenharmony_ci ); 5697e2e9c0cSopenharmony_ci} 5707e2e9c0cSopenharmony_ci 5717e2e9c0cSopenharmony_ci#[test] 5727e2e9c0cSopenharmony_cifn test_path_buf() { 5737e2e9c0cSopenharmony_ci assert_ser_tokens( 5747e2e9c0cSopenharmony_ci &PathBuf::from("/usr/local/lib"), 5757e2e9c0cSopenharmony_ci &[Token::Str("/usr/local/lib")], 5767e2e9c0cSopenharmony_ci ); 5777e2e9c0cSopenharmony_ci} 5787e2e9c0cSopenharmony_ci 5797e2e9c0cSopenharmony_ci#[test] 5807e2e9c0cSopenharmony_cifn test_cstring() { 5817e2e9c0cSopenharmony_ci assert_ser_tokens(&CString::new("abc").unwrap(), &[Token::Bytes(b"abc")]); 5827e2e9c0cSopenharmony_ci} 5837e2e9c0cSopenharmony_ci 5847e2e9c0cSopenharmony_ci#[test] 5857e2e9c0cSopenharmony_cifn test_cstr() { 5867e2e9c0cSopenharmony_ci let cstring = CString::new("abc").unwrap(); 5877e2e9c0cSopenharmony_ci assert_ser_tokens(cstring.as_c_str(), &[Token::Bytes(b"abc")]); 5887e2e9c0cSopenharmony_ci} 5897e2e9c0cSopenharmony_ci 5907e2e9c0cSopenharmony_ci#[test] 5917e2e9c0cSopenharmony_cifn test_rc() { 5927e2e9c0cSopenharmony_ci assert_ser_tokens(&Rc::new(true), &[Token::Bool(true)]); 5937e2e9c0cSopenharmony_ci} 5947e2e9c0cSopenharmony_ci 5957e2e9c0cSopenharmony_ci#[test] 5967e2e9c0cSopenharmony_cifn test_rc_weak_some() { 5977e2e9c0cSopenharmony_ci let rc = Rc::new(true); 5987e2e9c0cSopenharmony_ci assert_ser_tokens(&Rc::downgrade(&rc), &[Token::Some, Token::Bool(true)]); 5997e2e9c0cSopenharmony_ci} 6007e2e9c0cSopenharmony_ci 6017e2e9c0cSopenharmony_ci#[test] 6027e2e9c0cSopenharmony_cifn test_rc_weak_none() { 6037e2e9c0cSopenharmony_ci assert_ser_tokens(&RcWeak::<bool>::new(), &[Token::None]); 6047e2e9c0cSopenharmony_ci} 6057e2e9c0cSopenharmony_ci 6067e2e9c0cSopenharmony_ci#[test] 6077e2e9c0cSopenharmony_cifn test_arc() { 6087e2e9c0cSopenharmony_ci assert_ser_tokens(&Arc::new(true), &[Token::Bool(true)]); 6097e2e9c0cSopenharmony_ci} 6107e2e9c0cSopenharmony_ci 6117e2e9c0cSopenharmony_ci#[test] 6127e2e9c0cSopenharmony_cifn test_arc_weak_some() { 6137e2e9c0cSopenharmony_ci let arc = Arc::new(true); 6147e2e9c0cSopenharmony_ci assert_ser_tokens(&Arc::downgrade(&arc), &[Token::Some, Token::Bool(true)]); 6157e2e9c0cSopenharmony_ci} 6167e2e9c0cSopenharmony_ci 6177e2e9c0cSopenharmony_ci#[test] 6187e2e9c0cSopenharmony_cifn test_arc_weak_none() { 6197e2e9c0cSopenharmony_ci assert_ser_tokens(&ArcWeak::<bool>::new(), &[Token::None]); 6207e2e9c0cSopenharmony_ci} 6217e2e9c0cSopenharmony_ci 6227e2e9c0cSopenharmony_ci#[test] 6237e2e9c0cSopenharmony_cifn test_wrapping() { 6247e2e9c0cSopenharmony_ci assert_ser_tokens(&Wrapping(1usize), &[Token::U64(1)]); 6257e2e9c0cSopenharmony_ci} 6267e2e9c0cSopenharmony_ci 6277e2e9c0cSopenharmony_ci#[test] 6287e2e9c0cSopenharmony_cifn test_rc_dst() { 6297e2e9c0cSopenharmony_ci assert_ser_tokens(&Rc::<str>::from("s"), &[Token::Str("s")]); 6307e2e9c0cSopenharmony_ci assert_ser_tokens( 6317e2e9c0cSopenharmony_ci &Rc::<[bool]>::from(&[true][..]), 6327e2e9c0cSopenharmony_ci &[ 6337e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 6347e2e9c0cSopenharmony_ci Token::Bool(true), 6357e2e9c0cSopenharmony_ci Token::SeqEnd, 6367e2e9c0cSopenharmony_ci ], 6377e2e9c0cSopenharmony_ci ); 6387e2e9c0cSopenharmony_ci} 6397e2e9c0cSopenharmony_ci 6407e2e9c0cSopenharmony_ci#[test] 6417e2e9c0cSopenharmony_cifn test_arc_dst() { 6427e2e9c0cSopenharmony_ci assert_ser_tokens(&Arc::<str>::from("s"), &[Token::Str("s")]); 6437e2e9c0cSopenharmony_ci assert_ser_tokens( 6447e2e9c0cSopenharmony_ci &Arc::<[bool]>::from(&[true][..]), 6457e2e9c0cSopenharmony_ci &[ 6467e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 6477e2e9c0cSopenharmony_ci Token::Bool(true), 6487e2e9c0cSopenharmony_ci Token::SeqEnd, 6497e2e9c0cSopenharmony_ci ], 6507e2e9c0cSopenharmony_ci ); 6517e2e9c0cSopenharmony_ci} 6527e2e9c0cSopenharmony_ci 6537e2e9c0cSopenharmony_ci#[test] 6547e2e9c0cSopenharmony_cifn test_fmt_arguments() { 6557e2e9c0cSopenharmony_ci assert_ser_tokens(&format_args!("{}{}", 1, 'a'), &[Token::Str("1a")]); 6567e2e9c0cSopenharmony_ci} 6577e2e9c0cSopenharmony_ci 6587e2e9c0cSopenharmony_ci#[test] 6597e2e9c0cSopenharmony_cifn test_atomic() { 6607e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicBool::new(false), &[Token::Bool(false)]); 6617e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicBool::new(true), &[Token::Bool(true)]); 6627e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicI8::new(63i8), &[Token::I8(63i8)]); 6637e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicI16::new(-318i16), &[Token::I16(-318i16)]); 6647e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicI32::new(65792i32), &[Token::I32(65792i32)]); 6657e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicIsize::new(-65792isize), &[Token::I64(-65792i64)]); 6667e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicU8::new(192u8), &[Token::U8(192u8)]); 6677e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicU16::new(510u16), &[Token::U16(510u16)]); 6687e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicU32::new(131072u32), &[Token::U32(131072u32)]); 6697e2e9c0cSopenharmony_ci assert_ser_tokens(&AtomicUsize::new(655360usize), &[Token::U64(655360u64)]); 6707e2e9c0cSopenharmony_ci} 6717e2e9c0cSopenharmony_ci 6727e2e9c0cSopenharmony_ci#[cfg(target_arch = "x86_64")] 6737e2e9c0cSopenharmony_ci#[test] 6747e2e9c0cSopenharmony_cifn test_atomic64() { 6757e2e9c0cSopenharmony_ci assert_ser_tokens( 6767e2e9c0cSopenharmony_ci &AtomicI64::new(-4295032832i64), 6777e2e9c0cSopenharmony_ci &[Token::I64(-4295032832i64)], 6787e2e9c0cSopenharmony_ci ); 6797e2e9c0cSopenharmony_ci assert_ser_tokens( 6807e2e9c0cSopenharmony_ci &AtomicU64::new(12884901888u64), 6817e2e9c0cSopenharmony_ci &[Token::U64(12884901888u64)], 6827e2e9c0cSopenharmony_ci ); 6837e2e9c0cSopenharmony_ci} 6847e2e9c0cSopenharmony_ci 6857e2e9c0cSopenharmony_ci#[test] 6867e2e9c0cSopenharmony_cifn test_net_ipv4addr_readable() { 6877e2e9c0cSopenharmony_ci assert_ser_tokens( 6887e2e9c0cSopenharmony_ci &"1.2.3.4".parse::<net::Ipv4Addr>().unwrap().readable(), 6897e2e9c0cSopenharmony_ci &[Token::Str("1.2.3.4")], 6907e2e9c0cSopenharmony_ci ); 6917e2e9c0cSopenharmony_ci} 6927e2e9c0cSopenharmony_ci 6937e2e9c0cSopenharmony_ci#[test] 6947e2e9c0cSopenharmony_cifn test_net_ipv6addr_readable() { 6957e2e9c0cSopenharmony_ci assert_ser_tokens( 6967e2e9c0cSopenharmony_ci &"::1".parse::<net::Ipv6Addr>().unwrap().readable(), 6977e2e9c0cSopenharmony_ci &[Token::Str("::1")], 6987e2e9c0cSopenharmony_ci ); 6997e2e9c0cSopenharmony_ci} 7007e2e9c0cSopenharmony_ci 7017e2e9c0cSopenharmony_ci#[test] 7027e2e9c0cSopenharmony_cifn test_net_ipaddr_readable() { 7037e2e9c0cSopenharmony_ci assert_ser_tokens( 7047e2e9c0cSopenharmony_ci &"1.2.3.4".parse::<net::IpAddr>().unwrap().readable(), 7057e2e9c0cSopenharmony_ci &[Token::Str("1.2.3.4")], 7067e2e9c0cSopenharmony_ci ); 7077e2e9c0cSopenharmony_ci} 7087e2e9c0cSopenharmony_ci 7097e2e9c0cSopenharmony_ci#[test] 7107e2e9c0cSopenharmony_cifn test_net_socketaddr_readable() { 7117e2e9c0cSopenharmony_ci assert_ser_tokens( 7127e2e9c0cSopenharmony_ci &"1.2.3.4:1234" 7137e2e9c0cSopenharmony_ci .parse::<net::SocketAddr>() 7147e2e9c0cSopenharmony_ci .unwrap() 7157e2e9c0cSopenharmony_ci .readable(), 7167e2e9c0cSopenharmony_ci &[Token::Str("1.2.3.4:1234")], 7177e2e9c0cSopenharmony_ci ); 7187e2e9c0cSopenharmony_ci assert_ser_tokens( 7197e2e9c0cSopenharmony_ci &"1.2.3.4:1234" 7207e2e9c0cSopenharmony_ci .parse::<net::SocketAddrV4>() 7217e2e9c0cSopenharmony_ci .unwrap() 7227e2e9c0cSopenharmony_ci .readable(), 7237e2e9c0cSopenharmony_ci &[Token::Str("1.2.3.4:1234")], 7247e2e9c0cSopenharmony_ci ); 7257e2e9c0cSopenharmony_ci assert_ser_tokens( 7267e2e9c0cSopenharmony_ci &"[::1]:1234" 7277e2e9c0cSopenharmony_ci .parse::<net::SocketAddrV6>() 7287e2e9c0cSopenharmony_ci .unwrap() 7297e2e9c0cSopenharmony_ci .readable(), 7307e2e9c0cSopenharmony_ci &[Token::Str("[::1]:1234")], 7317e2e9c0cSopenharmony_ci ); 7327e2e9c0cSopenharmony_ci} 7337e2e9c0cSopenharmony_ci 7347e2e9c0cSopenharmony_ci#[test] 7357e2e9c0cSopenharmony_cifn test_net_ipv4addr_compact() { 7367e2e9c0cSopenharmony_ci assert_ser_tokens( 7377e2e9c0cSopenharmony_ci &net::Ipv4Addr::from(*b"1234").compact(), 7387e2e9c0cSopenharmony_ci &seq![ 7397e2e9c0cSopenharmony_ci Token::Tuple { len: 4 }, 7407e2e9c0cSopenharmony_ci b"1234".iter().copied().map(Token::U8), 7417e2e9c0cSopenharmony_ci Token::TupleEnd, 7427e2e9c0cSopenharmony_ci ], 7437e2e9c0cSopenharmony_ci ); 7447e2e9c0cSopenharmony_ci} 7457e2e9c0cSopenharmony_ci 7467e2e9c0cSopenharmony_ci#[test] 7477e2e9c0cSopenharmony_cifn test_net_ipv6addr_compact() { 7487e2e9c0cSopenharmony_ci assert_ser_tokens( 7497e2e9c0cSopenharmony_ci &net::Ipv6Addr::from(*b"1234567890123456").compact(), 7507e2e9c0cSopenharmony_ci &seq![ 7517e2e9c0cSopenharmony_ci Token::Tuple { len: 16 }, 7527e2e9c0cSopenharmony_ci b"1234567890123456".iter().copied().map(Token::U8), 7537e2e9c0cSopenharmony_ci Token::TupleEnd, 7547e2e9c0cSopenharmony_ci ], 7557e2e9c0cSopenharmony_ci ); 7567e2e9c0cSopenharmony_ci} 7577e2e9c0cSopenharmony_ci 7587e2e9c0cSopenharmony_ci#[test] 7597e2e9c0cSopenharmony_cifn test_net_ipaddr_compact() { 7607e2e9c0cSopenharmony_ci assert_ser_tokens( 7617e2e9c0cSopenharmony_ci &net::IpAddr::from(*b"1234").compact(), 7627e2e9c0cSopenharmony_ci &seq![ 7637e2e9c0cSopenharmony_ci Token::NewtypeVariant { 7647e2e9c0cSopenharmony_ci name: "IpAddr", 7657e2e9c0cSopenharmony_ci variant: "V4" 7667e2e9c0cSopenharmony_ci }, 7677e2e9c0cSopenharmony_ci Token::Tuple { len: 4 }, 7687e2e9c0cSopenharmony_ci b"1234".iter().copied().map(Token::U8), 7697e2e9c0cSopenharmony_ci Token::TupleEnd, 7707e2e9c0cSopenharmony_ci ], 7717e2e9c0cSopenharmony_ci ); 7727e2e9c0cSopenharmony_ci} 7737e2e9c0cSopenharmony_ci 7747e2e9c0cSopenharmony_ci#[test] 7757e2e9c0cSopenharmony_cifn test_net_socketaddr_compact() { 7767e2e9c0cSopenharmony_ci assert_ser_tokens( 7777e2e9c0cSopenharmony_ci &net::SocketAddr::from((*b"1234567890123456", 1234)).compact(), 7787e2e9c0cSopenharmony_ci &seq![ 7797e2e9c0cSopenharmony_ci Token::NewtypeVariant { 7807e2e9c0cSopenharmony_ci name: "SocketAddr", 7817e2e9c0cSopenharmony_ci variant: "V6" 7827e2e9c0cSopenharmony_ci }, 7837e2e9c0cSopenharmony_ci Token::Tuple { len: 2 }, 7847e2e9c0cSopenharmony_ci Token::Tuple { len: 16 }, 7857e2e9c0cSopenharmony_ci b"1234567890123456".iter().copied().map(Token::U8), 7867e2e9c0cSopenharmony_ci Token::TupleEnd, 7877e2e9c0cSopenharmony_ci Token::U16(1234), 7887e2e9c0cSopenharmony_ci Token::TupleEnd, 7897e2e9c0cSopenharmony_ci ], 7907e2e9c0cSopenharmony_ci ); 7917e2e9c0cSopenharmony_ci assert_ser_tokens( 7927e2e9c0cSopenharmony_ci &net::SocketAddrV4::new(net::Ipv4Addr::from(*b"1234"), 1234).compact(), 7937e2e9c0cSopenharmony_ci &seq![ 7947e2e9c0cSopenharmony_ci Token::Tuple { len: 2 }, 7957e2e9c0cSopenharmony_ci Token::Tuple { len: 4 }, 7967e2e9c0cSopenharmony_ci b"1234".iter().copied().map(Token::U8), 7977e2e9c0cSopenharmony_ci Token::TupleEnd, 7987e2e9c0cSopenharmony_ci Token::U16(1234), 7997e2e9c0cSopenharmony_ci Token::TupleEnd, 8007e2e9c0cSopenharmony_ci ], 8017e2e9c0cSopenharmony_ci ); 8027e2e9c0cSopenharmony_ci assert_ser_tokens( 8037e2e9c0cSopenharmony_ci &net::SocketAddrV6::new(net::Ipv6Addr::from(*b"1234567890123456"), 1234, 0, 0).compact(), 8047e2e9c0cSopenharmony_ci &seq![ 8057e2e9c0cSopenharmony_ci Token::Tuple { len: 2 }, 8067e2e9c0cSopenharmony_ci Token::Tuple { len: 16 }, 8077e2e9c0cSopenharmony_ci b"1234567890123456".iter().copied().map(Token::U8), 8087e2e9c0cSopenharmony_ci Token::TupleEnd, 8097e2e9c0cSopenharmony_ci Token::U16(1234), 8107e2e9c0cSopenharmony_ci Token::TupleEnd, 8117e2e9c0cSopenharmony_ci ], 8127e2e9c0cSopenharmony_ci ); 8137e2e9c0cSopenharmony_ci} 8147e2e9c0cSopenharmony_ci 8157e2e9c0cSopenharmony_ci#[cfg(feature = "unstable")] 8167e2e9c0cSopenharmony_ci#[test] 8177e2e9c0cSopenharmony_cifn test_never_result() { 8187e2e9c0cSopenharmony_ci assert_ser_tokens( 8197e2e9c0cSopenharmony_ci &Ok::<u8, !>(0), 8207e2e9c0cSopenharmony_ci &[ 8217e2e9c0cSopenharmony_ci Token::NewtypeVariant { 8227e2e9c0cSopenharmony_ci name: "Result", 8237e2e9c0cSopenharmony_ci variant: "Ok", 8247e2e9c0cSopenharmony_ci }, 8257e2e9c0cSopenharmony_ci Token::U8(0), 8267e2e9c0cSopenharmony_ci ], 8277e2e9c0cSopenharmony_ci ); 8287e2e9c0cSopenharmony_ci} 8297e2e9c0cSopenharmony_ci 8307e2e9c0cSopenharmony_ci#[test] 8317e2e9c0cSopenharmony_ci#[cfg(unix)] 8327e2e9c0cSopenharmony_cifn test_cannot_serialize_paths() { 8337e2e9c0cSopenharmony_ci use std::ffi::OsStr; 8347e2e9c0cSopenharmony_ci use std::os::unix::ffi::OsStrExt; 8357e2e9c0cSopenharmony_ci 8367e2e9c0cSopenharmony_ci assert_ser_tokens_error( 8377e2e9c0cSopenharmony_ci &Path::new(OsStr::from_bytes(b"Hello \xF0\x90\x80World")), 8387e2e9c0cSopenharmony_ci &[], 8397e2e9c0cSopenharmony_ci "path contains invalid UTF-8 characters", 8407e2e9c0cSopenharmony_ci ); 8417e2e9c0cSopenharmony_ci} 8427e2e9c0cSopenharmony_ci 8437e2e9c0cSopenharmony_ci#[test] 8447e2e9c0cSopenharmony_cifn test_cannot_serialize_mutably_borrowed_ref_cell() { 8457e2e9c0cSopenharmony_ci let ref_cell = RefCell::new(42); 8467e2e9c0cSopenharmony_ci let _reference = ref_cell.borrow_mut(); 8477e2e9c0cSopenharmony_ci assert_ser_tokens_error(&ref_cell, &[], "already mutably borrowed"); 8487e2e9c0cSopenharmony_ci} 8497e2e9c0cSopenharmony_ci 8507e2e9c0cSopenharmony_ci#[test] 8517e2e9c0cSopenharmony_cifn test_enum_skipped() { 8527e2e9c0cSopenharmony_ci assert_ser_tokens_error( 8537e2e9c0cSopenharmony_ci &Enum::SkippedUnit, 8547e2e9c0cSopenharmony_ci &[], 8557e2e9c0cSopenharmony_ci "the enum variant Enum::SkippedUnit cannot be serialized", 8567e2e9c0cSopenharmony_ci ); 8577e2e9c0cSopenharmony_ci assert_ser_tokens_error( 8587e2e9c0cSopenharmony_ci &Enum::SkippedOne(42), 8597e2e9c0cSopenharmony_ci &[], 8607e2e9c0cSopenharmony_ci "the enum variant Enum::SkippedOne cannot be serialized", 8617e2e9c0cSopenharmony_ci ); 8627e2e9c0cSopenharmony_ci assert_ser_tokens_error( 8637e2e9c0cSopenharmony_ci &Enum::SkippedSeq(1, 2), 8647e2e9c0cSopenharmony_ci &[], 8657e2e9c0cSopenharmony_ci "the enum variant Enum::SkippedSeq cannot be serialized", 8667e2e9c0cSopenharmony_ci ); 8677e2e9c0cSopenharmony_ci assert_ser_tokens_error( 8687e2e9c0cSopenharmony_ci &Enum::SkippedMap { _a: 1, _b: 2 }, 8697e2e9c0cSopenharmony_ci &[], 8707e2e9c0cSopenharmony_ci "the enum variant Enum::SkippedMap cannot be serialized", 8717e2e9c0cSopenharmony_ci ); 8727e2e9c0cSopenharmony_ci} 8737e2e9c0cSopenharmony_ci 8747e2e9c0cSopenharmony_ci#[test] 8757e2e9c0cSopenharmony_cifn test_integer128() { 8767e2e9c0cSopenharmony_ci assert_ser_tokens_error(&1i128, &[], "i128 is not supported"); 8777e2e9c0cSopenharmony_ci 8787e2e9c0cSopenharmony_ci assert_ser_tokens_error(&1u128, &[], "u128 is not supported"); 8797e2e9c0cSopenharmony_ci} 8807e2e9c0cSopenharmony_ci 8817e2e9c0cSopenharmony_ci#[test] 8827e2e9c0cSopenharmony_cifn test_refcell_dst() { 8837e2e9c0cSopenharmony_ci assert_ser_tokens( 8847e2e9c0cSopenharmony_ci &RefCell::new([true]) as &RefCell<[bool]>, 8857e2e9c0cSopenharmony_ci &[ 8867e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 8877e2e9c0cSopenharmony_ci Token::Bool(true), 8887e2e9c0cSopenharmony_ci Token::SeqEnd, 8897e2e9c0cSopenharmony_ci ], 8907e2e9c0cSopenharmony_ci ); 8917e2e9c0cSopenharmony_ci} 8927e2e9c0cSopenharmony_ci 8937e2e9c0cSopenharmony_ci#[test] 8947e2e9c0cSopenharmony_cifn test_mutex_dst() { 8957e2e9c0cSopenharmony_ci assert_ser_tokens( 8967e2e9c0cSopenharmony_ci &Mutex::new([true]) as &Mutex<[bool]>, 8977e2e9c0cSopenharmony_ci &[ 8987e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 8997e2e9c0cSopenharmony_ci Token::Bool(true), 9007e2e9c0cSopenharmony_ci Token::SeqEnd, 9017e2e9c0cSopenharmony_ci ], 9027e2e9c0cSopenharmony_ci ); 9037e2e9c0cSopenharmony_ci} 9047e2e9c0cSopenharmony_ci 9057e2e9c0cSopenharmony_ci#[test] 9067e2e9c0cSopenharmony_cifn test_rwlock_dst() { 9077e2e9c0cSopenharmony_ci assert_ser_tokens( 9087e2e9c0cSopenharmony_ci &RwLock::new([true]) as &RwLock<[bool]>, 9097e2e9c0cSopenharmony_ci &[ 9107e2e9c0cSopenharmony_ci Token::Seq { len: Some(1) }, 9117e2e9c0cSopenharmony_ci Token::Bool(true), 9127e2e9c0cSopenharmony_ci Token::SeqEnd, 9137e2e9c0cSopenharmony_ci ], 9147e2e9c0cSopenharmony_ci ); 9157e2e9c0cSopenharmony_ci} 916