integer_encoding/
fixed_tests.rs
1#[cfg(test)]
2mod tests {
3 use crate::fixed::FixedInt;
4
5 #[cfg(any(feature = "tokio_async", feature = "futures_async"))]
6 use crate::reader::FixedIntAsyncReader;
7 #[cfg(any(feature = "tokio_async", feature = "futures_async"))]
8 use crate::writer::FixedIntAsyncWriter;
9
10 use crate::reader::FixedIntReader;
11 use crate::writer::FixedIntWriter;
12
13 #[test]
14 fn test_u32_enc() {
15 let result = (32 as u32).encode_fixed_vec();
16 assert_eq!(result, vec![32, 0, 0, 0]);
17 }
18 #[test]
19 fn test_u16_enc() {
20 let result = (256 as u16).encode_fixed_vec();
21 assert_eq!(result, vec![0, 1]);
22 }
23 #[test]
24 fn test_u16_endian() {
25 let le = 1 as u16;
26 let be = le.switch_endianness();
27 assert_eq!(be, 256);
28 }
29 #[test]
30 fn test_u32_endian() {
31 let le = 1 as u32;
32 let be = le.switch_endianness();
33 assert_eq!(be, 1 << 24);
34 assert_eq!(be.switch_endianness(), 1);
35 }
36 #[test]
37 fn test_allones_endian() {
38 assert_eq!(u64::MAX.switch_endianness(), u64::MAX);
39 }
40 #[test]
41 fn test_signed_endian() {
42 let le = -2 as i16;
44 let be = le.switch_endianness();
45 assert_eq!(be, -257);
46 }
47 #[test]
48 fn test_u8_enc() {
49 let result = (255 as u8).encode_fixed_vec();
50 assert_eq!(result, vec![255]);
51 }
52 #[test]
53 fn test_i8_enc() {
54 let result = (-1 as i8).encode_fixed_vec();
55 assert_eq!(result, vec![255]);
56 }
57 #[test]
58 fn test_i16_enc() {
59 let result = (-32768 as i16).encode_fixed_vec();
60 assert_eq!(result, vec![0, 128]);
61 }
62 #[test]
63 fn test_i32_enc() {
64 let result = (-32767 as i32).encode_fixed_vec();
65 assert_eq!(result, vec![1, 128, 255, 255]);
66 }
67
68 #[test]
79 fn test_i32_enc_light() {
80 let int = -32767 as i32;
81 let result = int.encode_fixed_light();
82 assert_eq!(result, [1, 128, 255, 255]);
83 }
84 #[test]
85 fn test_all_identity() {
86 let a: u8 = 17;
87 let b: u16 = 17;
88 let c: u32 = 17;
89 let d: u64 = 17;
90 let e: i8 = -17;
91 let f: i16 = -17;
92 let g: i32 = -17;
93 let h: i64 = -17;
94
95 assert_eq!(a, FixedInt::decode_fixed(&a.encode_fixed_light()).unwrap());
96 assert_eq!(b, FixedInt::decode_fixed(&b.encode_fixed_light()).unwrap());
97 assert_eq!(c, FixedInt::decode_fixed(&c.encode_fixed_light()).unwrap());
98 assert_eq!(d, FixedInt::decode_fixed(&d.encode_fixed_light()).unwrap());
99 assert_eq!(e, FixedInt::decode_fixed(&e.encode_fixed_light()).unwrap());
100 assert_eq!(f, FixedInt::decode_fixed(&f.encode_fixed_light()).unwrap());
101 assert_eq!(g, FixedInt::decode_fixed(&g.encode_fixed_light()).unwrap());
102 assert_eq!(h, FixedInt::decode_fixed(&h.encode_fixed_light()).unwrap());
103 }
104
105 #[test]
106 fn test_reader_writer() {
107 let mut buf = Vec::with_capacity(128);
108
109 let i1: u32 = 123;
110 let i2: u32 = 124;
111 let i3: u32 = 125;
112
113 assert!(buf.write_fixedint(i1).is_ok());
114 assert!(buf.write_fixedint(i2).is_ok());
115 assert!(buf.write_fixedint(i3).is_ok());
116
117 assert_eq!(3 * 4, buf.len());
118
119 let mut reader: &[u8] = buf.as_ref();
120
121 let i1_res = reader.read_fixedint().unwrap();
122 let i2_res = reader.read_fixedint().unwrap();
123 let i3_res = reader.read_fixedint().unwrap();
124
125 assert_eq!(i1, i1_res);
126 assert_eq!(i2, i2_res);
127 assert_eq!(i3, i3_res);
128
129 assert!(reader.read_fixedint::<u32>().is_err());
130 }
131
132 #[should_panic]
133 #[test]
134 fn test_invalid_decode_size() {
135 assert_eq!(33, u64::decode_fixed(&[1, 0, 0, 0, 0, 1]).unwrap());
136 }
137 #[should_panic]
138 #[test]
139 fn test_invalid_encode_size() {
140 let mut buf = [0 as u8; 4];
141 (11 as u64).encode_fixed(&mut buf).unwrap();
142 }
143
144 #[cfg(any(feature = "tokio_async", feature = "futures_async"))]
145 #[tokio::test]
146 async fn test_async_reader() {
147 let mut buf = Vec::with_capacity(128);
148
149 let i1: u32 = 1;
150 let i2: u32 = 65532;
151 let i3: u32 = 4200123456;
152 let i4: i64 = i3 as i64 * 1000;
153 let i5: i32 = -32456;
154 let i6: i8 = -128;
155 let i7: u8 = 255;
156
157 buf.write_fixedint_async(i1).await.unwrap();
158 buf.write_fixedint_async(i2).await.unwrap();
159 buf.write_fixedint_async(i3).await.unwrap();
160 buf.write_fixedint_async(i4).await.unwrap();
161 buf.write_fixedint_async(i5).await.unwrap();
162 buf.write_fixedint_async(i6).await.unwrap();
163 buf.write_fixedint_async(i7).await.unwrap();
164
165 let mut reader: &[u8] = buf.as_ref();
166
167 assert_eq!(i1, reader.read_fixedint_async().await.unwrap());
168 assert_eq!(i2, reader.read_fixedint_async().await.unwrap());
169 assert_eq!(i3, reader.read_fixedint_async().await.unwrap());
170 assert_eq!(i4, reader.read_fixedint_async().await.unwrap());
171 assert_eq!(i5, reader.read_fixedint_async().await.unwrap());
172 assert_eq!(i6, reader.read_fixedint_async().await.unwrap());
173 assert_eq!(i7, reader.read_fixedint_async().await.unwrap());
174 assert!(reader.read_fixedint_async::<u32>().await.is_err());
175 }
176}