1 extern crate podio;
2 
3 use std::io;
4 use podio::{LittleEndian, BigEndian};
5 use podio::{ReadPodExt, WritePodExt};
6 
7 #[test]
write_be()8 fn write_be() {
9     let buf: &mut [u8] = &mut [0u8; 8];
10     let mut writer = io::Cursor::new(buf);
11 
12     writer.set_position(0);
13     writer.write_u64::<BigEndian>(0x01_23_45_67_89_ab_cd_ef).unwrap();
14     assert_eq!(&writer.get_ref()[0..8], &[0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]);
15 
16     writer.set_position(0);
17     writer.write_u32::<BigEndian>(0x01_23_45_67).unwrap();
18     assert_eq!(&writer.get_ref()[0..4], &[0x01, 0x23, 0x45, 0x67]);
19 
20     writer.set_position(0);
21     writer.write_u16::<BigEndian>(0x01_23).unwrap();
22     assert_eq!(&writer.get_ref()[0..2], &[0x01, 0x23]);
23 }
24 
25 #[test]
write_le()26 fn write_le() {
27     let buf: &mut [u8] = &mut [0u8; 8];
28     let mut writer = io::Cursor::new(buf);
29 
30     writer.set_position(0);
31     writer.write_u64::<LittleEndian>(0x01_23_45_67_89_ab_cd_ef).unwrap();
32     assert_eq!(&writer.get_ref()[0..8], &[0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01]);
33 
34     writer.set_position(0);
35     writer.write_u32::<LittleEndian>(0x01_23_45_67).unwrap();
36     assert_eq!(&writer.get_ref()[0..4], &[0x67, 0x45, 0x23, 0x01]);
37 
38     writer.set_position(0);
39     writer.write_u16::<LittleEndian>(0x01_23).unwrap();
40     assert_eq!(&writer.get_ref()[0..2], &[0x23, 0x01]);
41 }
42 
43 #[test]
write_octet()44 fn write_octet() {
45     let buf: &mut [u8] = &mut [0u8; 8];
46     let mut writer = io::Cursor::new(buf);
47 
48     writer.set_position(0);
49     writer.write_u8(0x01).unwrap();
50     assert_eq!(&writer.get_ref()[0..1], &[0x01]);
51 }
52 
53 #[test]
write_float()54 fn write_float() {
55     let buf: &mut [u8] = &mut [0u8; 8];
56     let mut writer = io::Cursor::new(buf);
57 
58     writer.set_position(0);
59     writer.write_f32::<LittleEndian>(10.12f32).unwrap();
60     assert_eq!(&writer.get_ref()[0..4], &[0x85, 0xEB, 0x21, 0x41]);
61 
62     writer.set_position(0);
63     writer.write_f32::<BigEndian>(10.12f32).unwrap();
64     assert_eq!(&writer.get_ref()[0..4], &[0x41, 0x21, 0xEB, 0x85]);
65 
66     writer.set_position(0);
67     writer.write_f64::<LittleEndian>(10.12f64).unwrap();
68     assert_eq!(&writer.get_ref()[0..8], &[0x3D, 0x0A, 0xD7, 0xA3, 0x70, 0x3D, 0x24, 0x40]);
69 
70     writer.set_position(0);
71     writer.write_f64::<BigEndian>(10.12f64).unwrap();
72     assert_eq!(&writer.get_ref()[0..8], &[0x40, 0x24, 0x3D, 0x70, 0xA3, 0xD7, 0x0A, 0x3D]);
73 }
74 
75 #[test]
read_be()76 fn read_be() {
77     let buf: &[u8] = &[0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef];
78     let mut reader = io::Cursor::new(buf);
79 
80     reader.set_position(0);
81     assert_eq!(reader.read_u64::<BigEndian>().unwrap(), 0x0123456789abcdef);
82 
83     reader.set_position(0);
84     assert_eq!(reader.read_u32::<BigEndian>().unwrap(), 0x01234567);
85 
86     reader.set_position(0);
87     assert_eq!(reader.read_u16::<BigEndian>().unwrap(), 0x0123);
88 }
89 
90 #[test]
read_le()91 fn read_le() {
92     let buf: &[u8] = &[0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef];
93     let mut reader = io::Cursor::new(buf);
94 
95     reader.set_position(0);
96     assert_eq!(reader.read_u64::<LittleEndian>().unwrap(), 0xefcdab8967452301);
97 
98     reader.set_position(0);
99     assert_eq!(reader.read_u32::<LittleEndian>().unwrap(), 0x67452301);
100 
101     reader.set_position(0);
102     assert_eq!(reader.read_u16::<LittleEndian>().unwrap(), 0x2301);
103 }
104 
105 #[test]
read_octet()106 fn read_octet() {
107     let buf: &[u8] = &[0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef];
108     let mut reader = io::Cursor::new(buf);
109 
110     reader.set_position(0);
111     assert_eq!(reader.read_u8().unwrap(), 0x01);
112 }
113 
114 #[test]
read_float()115 fn read_float() {
116     let mut buf: &[u8] = &[0x41, 0x21, 0xEB, 0x85];
117     assert_eq!(buf.read_f32::<BigEndian>().unwrap(), 10.12f32);
118 
119     let mut buf: &[u8] = &[0x85, 0xEB, 0x21, 0x41];
120     assert_eq!(buf.read_f32::<LittleEndian>().unwrap(), 10.12f32);
121 
122     let mut buf: &[u8] = &[0x40, 0x24, 0x3D, 0x70, 0xA3, 0xD7, 0x0A, 0x3D];
123     assert_eq!(buf.read_f64::<BigEndian>().unwrap(), 10.12f64);
124 
125     let mut buf: &[u8] = &[0x3D, 0x0A, 0xD7, 0xA3, 0x70, 0x3D, 0x24, 0x40];
126     assert_eq!(buf.read_f64::<LittleEndian>().unwrap(), 10.12f64);
127 }
128 
129 #[test]
read_exact()130 fn read_exact() {
131     let mut buf: &[u8] = &[1, 2, 3, 4, 5, 6, 7, 8];
132     assert_eq!(buf.read_exact(2).unwrap(), [1,2]);
133     assert_eq!(buf.read_exact(1).unwrap(), [3]);
134     assert_eq!(buf.read_exact(0).unwrap(), []);
135     assert_eq!(buf.read_exact(5).unwrap(), [4,5,6,7,8]);
136     assert_eq!(buf.read_exact(0).unwrap(), []);
137     assert!(buf.read_exact(1).is_err());
138     assert_eq!(buf.read_exact(0).unwrap(), []);
139 }
140