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