| use super::Cursor; |
| |
| use crate::msgpack::decode::*; |
| use crate::msgpack::Marker; |
| |
| #[test] |
| fn from_positive_fixnum() { |
| let buf = [0x00, 0x7f, 0x20]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(0u8, read_pfix(&mut cur).unwrap()); |
| assert_eq!(1, cur.position()); |
| |
| assert_eq!(127u8, read_pfix(&mut cur).unwrap()); |
| assert_eq!(2, cur.position()); |
| |
| assert_eq!(32u8, read_pfix(&mut cur).unwrap()); |
| assert_eq!(3, cur.position()); |
| } |
| |
| #[test] |
| fn from_u8_min() { |
| let buf = [0xcc, 0x00]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(0, read_u8(&mut cur).unwrap()); |
| assert_eq!(2, cur.position()); |
| } |
| |
| #[test] |
| fn from_u8_max() { |
| let buf = [0xcc, 0xff]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(255, read_u8(&mut cur).unwrap()); |
| assert_eq!(2, cur.position()); |
| } |
| |
| #[test] |
| fn from_u8_type_mismatch() { |
| let buf = [0xc0, 0x80]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| match read_u8(&mut cur) { |
| Err(ValueReadError::TypeMismatch(Marker::Null)) => (), |
| other => panic!("unexpected result: {:?}", other), |
| } |
| assert_eq!(1, cur.position()); |
| } |
| |
| #[test] |
| fn from_u8_unexpected_eof() { |
| let buf = [0xcc]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| read_u8(&mut cur).err().unwrap(); |
| assert_eq!(1, cur.position()); |
| } |
| |
| #[test] |
| fn from_u16_min() { |
| let buf = [0xcd, 0x00, 0x00]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(0, read_u16(&mut cur).unwrap()); |
| assert_eq!(3, cur.position()); |
| } |
| |
| #[test] |
| fn from_u32_max() { |
| let buf = [0xce, 0xff, 0xff, 0xff, 0xff]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(4294967295, read_u32(&mut cur).unwrap()); |
| assert_eq!(5, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_fixnum_read_int() { |
| let buf = [0x00, 0x7f, 0x20]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(0u64, read_int(&mut cur).unwrap()); |
| assert_eq!(1, cur.position()); |
| |
| assert_eq!(127u64, read_int(&mut cur).unwrap()); |
| assert_eq!(2, cur.position()); |
| |
| assert_eq!(32u64, read_int(&mut cur).unwrap()); |
| assert_eq!(3, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_u8_read_int() { |
| let buf = [0xcc, 0x80, 0xcc, 0xff]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(128u64, read_int(&mut cur).unwrap()); |
| assert_eq!(2, cur.position()); |
| |
| assert_eq!(255u64, read_int(&mut cur).unwrap()); |
| assert_eq!(4, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_u8_incomplete_read_int() { |
| let buf = [0xcc]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| read_int::<u64, _>(&mut cur).err().unwrap(); |
| assert_eq!(1, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_u16_read_int() { |
| let buf = [0xcd, 0x01, 0x00, 0xcd, 0xff, 0xff]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(256u64, read_int(&mut cur).unwrap()); |
| assert_eq!(3, cur.position()); |
| |
| assert_eq!(65535u64, read_int(&mut cur).unwrap()); |
| assert_eq!(6, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_u16_incomplete_read_int() { |
| let buf = [0xcd]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| read_int::<u64, _>(&mut cur).err().unwrap(); |
| assert_eq!(1, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_u32_read_int() { |
| let buf = [0xce, 0x00, 0x01, 0x00, 0x00, 0xce, 0xff, 0xff, 0xff, 0xff]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(65536u64, read_int(&mut cur).unwrap()); |
| assert_eq!(5, cur.position()); |
| |
| assert_eq!(4294967295u64, read_int(&mut cur).unwrap()); |
| assert_eq!(10, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_u32_incomplete_read_int() { |
| let buf = [0xce]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| read_int::<u64, _>(&mut cur).err().unwrap(); |
| assert_eq!(1, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_u64_read_int() { |
| let buf = [ |
| 0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, |
| 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff |
| ]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| assert_eq!(4294967296u64, read_int(&mut cur).unwrap()); |
| assert_eq!(9, cur.position()); |
| |
| assert_eq!(18446744073709551615u64, read_int(&mut cur).unwrap()); |
| assert_eq!(18, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_u64_incomplete_read_int() { |
| let buf = [0xcf]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| read_int::<u64, _>(&mut cur).err().unwrap(); |
| assert_eq!(1, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_invalid_marker_read_int() { |
| let buf = [0xc0]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| match read_int::<u64, _>(&mut cur) { |
| Err(NumValueReadError::TypeMismatch(Marker::Null)) => (), |
| other => panic!("unexpected result: {:?}", other) |
| } |
| assert_eq!(1, cur.position()); |
| } |
| |
| #[test] |
| fn from_unsigned_invalid_unknown_marker_read_int() { |
| let buf = [0xc1]; |
| let mut cur = Cursor::new(&buf[..]); |
| |
| match read_int::<u64, _>(&mut cur) { |
| Err(NumValueReadError::TypeMismatch(Marker::Reserved)) => (), |
| other => panic!("unexpected result: {:?}", other) |
| } |
| assert_eq!(1, cur.position()); |
| } |