202 lines
4.8 KiB
Rust
202 lines
4.8 KiB
Rust
use super::Cursor;
|
|
|
|
use rmp::decode::*;
|
|
use rmp::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());
|
|
}
|