1mod reader;
2mod writer;
3
4pub use reader::{Reader, BasicReader};
5pub use writer::{Writer, BasicWriter, CountWriter};
6
7#[cfg(test)]
8mod tests {
9 use super::*;
10 use std;
11 use std::io::{Cursor, BufWriter};
12
13 fn check(res: std::io::Result<()>) {
14 match res {
15 Ok(()) => {},
16 Err(err) => {
17 panic!(format!("unexpected error: {}", err))
18 }
19 }
20 }
21
22 #[test]
23 fn count_u8_one_byte() {
24 let mut cw = CountWriter::new();
25 check(cw.write_u8(1));
26 assert_eq!(cw.count(), 1)
27 }
28
29 #[test]
30 fn count_u16_two_bytes() {
31 let mut cw = CountWriter::new();
32 check(cw.write_u16(3));
33 assert_eq!(cw.count(), 2)
34 }
35
36 #[test]
37 fn count_u32_four_bytes() {
38 let mut cw = CountWriter::new();
39 check(cw.write_u32(123));
40 assert_eq!(cw.count(), 4)
41 }
42
43 #[test]
44 fn count_u64_eight_bytes() {
45 let mut cw = CountWriter::new();
46 check(cw.write_u64(123));
47 assert_eq!(cw.count(), 8)
48 }
49
50 #[test]
51 fn count_bytes() {
52 let mut cw = CountWriter::new();
53 check(cw.write_bytes(&[1, 2, 3, 4]));
54 assert_eq!(cw.count(), 4)
55 }
56
57 #[test]
58 fn count_str() {
59 let mut cw = CountWriter::new();
60 check(cw.write_str("testing"));
61 assert_eq!(cw.count(), 9)
62 }
63
64 #[test]
65 fn count_string() {
66 let mut cw = CountWriter::new();
67 check(cw.write_string(&"testing".to_string()));
68 assert_eq!(cw.count(), 9)
69 }
70
71 #[test]
72 fn can_write_and_read() {
73 let mut buf = [0 as u8; 64];
74 {
75 let mut write = BufWriter::new(&mut buf[..]);
76 let mut writer = BasicWriter::new(&mut write);
77 check(writer.write_u8(0xab));
78 check(writer.write_u16(0xfedc));
79 check(writer.write_u32(0xabcdef01));
80 check(writer.write_u64(0xabcdef0102030405));
81 check(writer.write_bytes(&[1, 2, 3, 4]));
82 check(writer.write_string(&"Hello World".to_string()));
83 }
84 let mut cursor = Cursor::new(&mut buf[..]);
85 let mut reader = BasicReader::new(&mut cursor);
86 assert!(reader.read_u8().unwrap().unwrap() == 0xab);
87 assert!(reader.read_u16().unwrap().unwrap() == 0xfedc);
88 assert!(reader.read_u32().unwrap().unwrap() == 0xabcdef01);
89 assert!(reader.read_u64().unwrap().unwrap() == 0xabcdef0102030405);
90
91 let mut tmp = [0 as u8; 4];
92 match reader.read_bytes(&mut tmp[..]) {
93 Ok(4) => {
94 assert!(tmp == [1, 2, 3, 4]);
95 },
96 Ok(n) => {
97 assert!(false, format!("unexpected number of bytes read: {}", n));
98 },
99 Err(err) => {
100 assert!(false, format!("read_bytes() failed unexpectedly: {}", err));
101 }
102 }
103
104 match reader.read_string() {
105 Ok(s) => {
106 assert!(s.unwrap() == "Hello World".to_string());
107 },
108 Err(err) => panic!(format!("failed to read string: {}", err))
109 }
110 }
111}
112