summaryrefslogtreecommitdiff
path: root/src/tests.rs
blob: b0136431499e57e478fe47838848ec16664ec2f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use super::*;

fn reserialize<C: MtCfg, T: MtSerialize + MtDeserialize>(item: &T) -> T {
    let mut writer = Vec::new();
    item.mt_serialize::<C>(&mut writer).unwrap();

    let mut reader = std::io::Cursor::new(writer);
    T::mt_deserialize::<C>(&mut reader).unwrap()
}

#[test]
fn test_reserialize() {
    let vec = vec![1, 2, 3];
    // encoded with 8-bit length
    assert_eq!(vec, reserialize::<u8, _>(&vec));

    let vec2 = vec![1, 2, 3];
    // encoded without length - drains the Reader
    assert_eq!(vec2, reserialize::<(), _>(&vec2));

    let st: String = "µ ß 私 😀\n".into();
    // encoded as UTF-16 with 32-bit length (also works with () or other types)
    assert_eq!(st, reserialize::<Utf16<u32>, _>(&st));

    let long: Vec<_> = (0..=256).collect();
    assert!(matches!(
        long.mt_serialize::<u8>(&mut Vec::new()),
        Err(SerializeError::TooBig(_))
    ));
}