reader_writer/
lib.rs

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