use msgpack;
#[test]
fn pack_bool() {
let mut writer = vec![];
msgpack::pack_bool(&mut writer, true).unwrap();
msgpack::pack_bool(&mut writer, false).unwrap();
assert_eq!(writer, &[0xc3, 0xc2]);
}
#[test]
fn pack_nil() {
let mut writer = vec![];
msgpack::pack_nil(&mut writer).unwrap();
assert_eq!(writer, &[0xc0]);
}
#[test]
fn pack_u8() {
let mut writer = vec![];
let vals = vec![1, 127, 128, 255];
for v in vals {
msgpack::pack_u8(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xcc, 0x01, 0xcc, 0x7f, 0xcc, 0x80, 0xcc, 0xff, ]
);
}
#[test]
fn pack_u16() {
let mut writer = vec![];
let vals = vec![255, 256, 65535];
for v in vals {
msgpack::pack_u16(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xcd, 0x00, 0xff, 0xcd, 0x01, 0x00, 0xcd, 0xff, 0xff, ]
);
}
#[test]
fn pack_u32() {
let mut writer = vec![];
let vals = vec![65535, 65536, 4294967295];
for v in vals {
msgpack::pack_u32(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xce, 0x00, 0x00, 0xff, 0xff, 0xce, 0x00, 0x01, 0x00, 0x00, 0xce, 0xff, 0xff, 0xff, 0xff, ]
);
}
#[test]
fn pack_u64() {
let mut writer = vec![];
let vals = vec![4294967295, 4294967296, 18446744073709551615];
for v in vals {
msgpack::pack_u64(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xcf, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ]
);
}
#[test]
fn pack_i8() {
let mut writer = vec![];
let vals = vec![-1, -32, -33, -128];
for v in vals {
msgpack::pack_i8(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xd0, 0xff, 0xd0, 0xe0, 0xd0, 0xdf, 0xd0, 0x80, ]
);
}
#[test]
fn pack_i16() {
let mut writer = vec![];
let vals = vec![-128, -129, -32768];
for v in vals {
msgpack::pack_i16(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xd1, 0xff, 0x80, 0xd1, 0xff, 0x7f, 0xd1, 0x80, 0x00, ]
);
}
#[test]
fn pack_i32() {
let mut writer = vec![];
let vals = vec![-32768, -32769, -2147483648];
for v in vals {
msgpack::pack_i32(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xd2, 0xff, 0xff, 0x80, 0x00, 0xd2, 0xff, 0xff, 0x7f, 0xff, 0xd2, 0x80, 0x00, 0x00, 0x00, ]
);
}
#[test]
fn pack_i64() {
let mut writer = vec![];
let vals = vec![-2147483648, -2147483649, -9223372036854775808];
for v in vals {
msgpack::pack_i64(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xd3, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0xd3, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xd3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ]
);
}
#[test]
fn pack_from_u8() {
let mut writer = vec![];
let vals = vec![1, 127, 128, 255];
for v in vals {
msgpack::pack_from_u8(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0x01, 0x7f, 0xcc, 0x80, 0xcc, 0xff, ]
);
}
#[test]
fn pack_from_u16() {
let mut writer = vec![];
let vals = vec![255, 256, 65535];
for v in vals {
msgpack::pack_from_u16(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xcc, 0xff, 0xcd, 0x01, 0x00, 0xcd, 0xff, 0xff, ]
);
}
#[test]
fn pack_from_u32() {
let mut writer = vec![];
let vals = vec![65535, 65536, 4294967295];
for v in vals {
msgpack::pack_from_u32(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xcd, 0xff, 0xff, 0xce, 0x00, 0x01, 0x00, 0x00, 0xce, 0xff, 0xff, 0xff, 0xff, ]
);
}
#[test]
fn pack_from_u64() {
let mut writer = vec![];
let vals = vec![4294967295, 4294967296, 18446744073709551615];
for v in vals {
msgpack::pack_from_u64(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xce, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ]
);
}
#[test]
fn pack_from_i8() {
let mut writer = vec![];
let vals = vec![-1, -32, -33, -128];
for v in vals {
msgpack::pack_from_i8(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xff, 0xe0, 0xd0, 0xdf, 0xd0, 0x80, ]
);
}
#[test]
fn pack_from_i16() {
let mut writer = vec![];
let vals = vec![-129, -32768];
for v in vals {
msgpack::pack_from_i16(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xd1, 0xff, 0x7f, 0xd1, 0x80, 0x00, ]
);
}
#[test]
fn pack_from_i32() {
let mut writer = vec![];
let vals = vec![-32769, -2147483648];
for v in vals {
msgpack::pack_from_i32(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xd2, 0xff, 0xff, 0x7f, 0xff, 0xd2, 0x80, 0x00, 0x00, 0x00, ]
);
}
#[test]
fn pack_from_i64() {
let mut writer = vec![];
let vals = vec![-2147483649, -9223372036854775808];
for v in vals {
msgpack::pack_i64(&mut writer, v).unwrap();
}
assert_eq!(
writer,
&[
0xd3, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xd3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ]
);
}
fn gen_str(len: usize) -> String {
let mut a = String::new();
for _ in 0..len {
a += "a";
}
a
}
#[test]
fn pack_fixstr() {
let mut writer = vec![];
msgpack::pack_str(&mut writer, "hello").unwrap();
assert_eq!(writer, &[0xa5, 0x68, 0x65, 0x6c, 0x6c, 0x6f]);
let mut writer = vec![];
msgpack::pack_str(&mut writer, &gen_str(31)).unwrap();
assert_eq!(&writer[0..5], &[0xbf, 0x61, 0x61, 0x61, 0x61]);
}
#[test]
fn pack_str8() {
let mut writer = vec![];
msgpack::pack_str(&mut writer, &gen_str(32)).unwrap();
assert_eq!(&writer[0..5], &[0xd9, 0x20, 0x61, 0x61, 0x61]);
let mut writer = vec![];
msgpack::pack_str(&mut writer, &gen_str(255)).unwrap();
assert_eq!(&writer[0..5], &[0xd9, 0xff, 0x61, 0x61, 0x61]);
}
#[test]
fn pack_bin() {
let mut writer = vec![];
msgpack::pack_bin(&mut writer, gen_str(255).as_bytes()).unwrap();
assert_eq!(&writer[0..5], &[0xc4, 0xff, 0x61, 0x61, 0x61]);
let mut writer = vec![];
msgpack::pack_bin(&mut writer, gen_str(256).as_bytes()).unwrap();
assert_eq!(&writer[0..5], &[0xc5, 0x01, 0x00, 0x61, 0x61]);
}
#[test]
fn pack_fixary() {
let mut writer = vec![];
msgpack::pack_ary_header(&mut writer, 2).unwrap();
msgpack::pack_from_u8(&mut writer, 1).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
assert_eq!(writer, &[0x92, 0x01, 0x02]);
}
#[test]
fn pack_ary16() {
let mut writer = vec![];
msgpack::pack_ary_header(&mut writer, (1 << 16) - 1).unwrap();
for _ in 0..(1 << 16) {
msgpack::pack_from_u8(&mut writer, 5 as u8).unwrap();
}
assert_eq!(writer[0..=2], [0xdc, 0xff, 0xff]);
for i in 0..(1 << 16) {
assert_eq!(writer[i + 3], 5 as u8);
}
}
#[test]
fn pack_fixmap() {
let mut writer = vec![];
msgpack::pack_map_header(&mut writer, 1).unwrap();
msgpack::pack_from_u8(&mut writer, 1).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
assert_eq!(writer, &[0x81, 0x01, 0x02]);
}
#[test]
fn pack_fixext() {
let mut writer = vec![];
msgpack::pack_ext_header(&mut writer, 1, 1).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
assert_eq!(writer, &[0xd4, 0x01, 0x02]);
let mut writer = vec![];
msgpack::pack_ext_header(&mut writer, 1, 2).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
assert_eq!(writer, &[0xd5, 0x01, 0x02, 0x02]);
let mut writer = vec![];
msgpack::pack_ext_header(&mut writer, 1, 4).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
msgpack::pack_from_u8(&mut writer, 2).unwrap();
assert_eq!(writer, &[0xd6, 0x01, 0x02, 0x02, 0x02, 0x02]);
}
#[test]
fn pack_timestamp() {
let mut writer = vec![];
msgpack::pack_timestamp32(&mut writer, 1).unwrap();
assert_eq!(writer, &[0xd6, 0xff, 0x00, 0x00, 0x00, 0x01]);
let mut writer = vec![];
msgpack::pack_timestamp64(&mut writer, 1, 1).unwrap();
assert_eq!(
writer,
&[0xd7, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01]
);
let mut writer = vec![];
msgpack::pack_timestamp96(&mut writer, 1, 1).unwrap();
assert_eq!(
writer,
&[
0xc7, 0x0c, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01
]
);
}