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}