endecode/
lib.rs

1pub mod decode;
2pub mod encode;
3
4pub use decode::Decode;
5pub use encode::Encode;
6
7#[cfg(feature = "derive")]
8pub use endecode_derive::{Decode, Encode};
9
10#[cfg(test)]
11mod test {
12    use std::collections::HashMap;
13
14    use rand::{thread_rng, Rng};
15
16    use crate::{Decode, Encode};
17
18    #[test]
19    fn test_ints() {
20        macro_rules! test_ints {
21            ($rng:ident, $($t:ty),*) => {
22                $(
23                    for _ in 0..1024 {
24                        let v = $rng.gen_range(<$t>::MIN..=<$t>::MAX);
25                        assert_eq!(<$t>::decode(&mut v.encode().into_iter()), v);
26                    }
27                )*
28            };
29        }
30
31        let mut rng = thread_rng();
32        test_ints!(rng, u8, u16, u32, u64, u128, usize);
33        test_ints!(rng, i8, i16, i32, i64, i128, isize);
34    }
35
36    #[test]
37    fn test_vecs() {
38        assert_eq!(
39            Vec::<i32>::decode(
40                &mut vec![
41                    -1481226730,
42                    -2050900860,
43                    1398413233,
44                    1179549798,
45                    57731936,
46                    987165288,
47                    520248252,
48                    -216621864,
49                    310968107,
50                    1116392241
51                ]
52                .encode()
53                .into_iter()
54            ),
55            vec![
56                -1481226730,
57                -2050900860,
58                1398413233,
59                1179549798,
60                57731936,
61                987165288,
62                520248252,
63                -216621864,
64                310968107,
65                1116392241
66            ]
67        );
68    }
69
70    #[test]
71    fn test_strs() {
72        assert_eq!(
73            "asd".encode(),
74            vec![0, 0, 0, 0, 0, 0, 0, 3, 0x61, 0x73, 0x64]
75        );
76        assert_eq!(
77            String::decode(&mut "asd".encode().into_iter()),
78            "asd".to_owned()
79        );
80        assert_eq!(
81            String::decode(&mut "asd".to_owned().encode().into_iter()),
82            "asd".to_owned()
83        );
84    }
85
86    #[test]
87    fn test_hashmaps() {
88        let mut map = HashMap::new();
89        map.insert((0, 2, 5), "acf".to_owned());
90        map.insert((20, 10, 0), "zka".to_owned());
91
92        assert_eq!(HashMap::decode(&mut map.encode().into_iter()), map);
93    }
94}