sdk: Add ShortU16 deser test

This commit is contained in:
Trent Nelson 2021-03-02 16:03:35 -07:00 committed by Trent Nelson
parent b7aa366758
commit cc6dcb48d4
1 changed files with 55 additions and 13 deletions

View File

@ -248,10 +248,56 @@ mod tests {
assert_len_encoding(0xffff, &[0xff, 0xff, 0x03]);
}
fn assert_good_deserialized_value(value: u16, bytes: &[u8]) {
assert_eq!(value, deserialize::<ShortU16>(bytes).unwrap().0);
}
fn assert_bad_deserialized_value(bytes: &[u8]) {
assert!(deserialize::<ShortU16>(bytes).is_err());
}
#[test]
#[should_panic]
fn test_short_vec_decode_zero_len() {
decode_len(&[]).unwrap();
fn test_deserialize() {
assert_good_deserialized_value(0x0000, &[0x00]);
assert_good_deserialized_value(0x007f, &[0x7f]);
assert_good_deserialized_value(0x0080, &[0x80, 0x01]);
assert_good_deserialized_value(0x00ff, &[0xff, 0x01]);
assert_good_deserialized_value(0x0100, &[0x80, 0x02]);
assert_good_deserialized_value(0x07ff, &[0xff, 0x0f]);
assert_good_deserialized_value(0x3fff, &[0xff, 0x7f]);
assert_good_deserialized_value(0x4000, &[0x80, 0x80, 0x01]);
assert_good_deserialized_value(0xffff, &[0xff, 0xff, 0x03]);
// aliases
// 0x0000
assert_bad_deserialized_value(&[0x80, 0x00]);
assert_bad_deserialized_value(&[0x80, 0x80, 0x00]);
// 0x007f
assert_bad_deserialized_value(&[0xff, 0x00]);
assert_bad_deserialized_value(&[0xff, 0x80, 0x00]);
// 0x0080
assert_bad_deserialized_value(&[0x80, 0x81, 0x00]);
// 0x00ff
assert_bad_deserialized_value(&[0xff, 0x81, 0x00]);
// 0x0100
assert_bad_deserialized_value(&[0x80, 0x82, 0x00]);
// 0x07ff
assert_bad_deserialized_value(&[0xff, 0x8f, 0x00]);
// 0x3fff
assert_bad_deserialized_value(&[0xff, 0xff, 0x00]);
// too short
assert_bad_deserialized_value(&[]);
assert_bad_deserialized_value(&[0x80]);
// too long
assert_bad_deserialized_value(&[0x80, 0x80, 0x80, 0x00]);
// too large
// 0x0001_0000
assert_bad_deserialized_value(&[0x80, 0x80, 0x04]);
// 0x0001_8000
assert_bad_deserialized_value(&[0x80, 0x80, 0x06]);
}
#[test]
@ -281,15 +327,11 @@ mod tests {
}
#[test]
fn test_decode_len_aliased_values() {
let one1 = [0x01];
let one2 = [0x81, 0x00];
let one3 = [0x81, 0x80, 0x00];
let one4 = [0x81, 0x80, 0x80, 0x00];
assert_eq!(decode_len(&one1).unwrap(), (1, 1));
assert_eq!(decode_len(&one2).unwrap(), (1, 2));
assert_eq!(decode_len(&one3).unwrap(), (1, 3));
assert!(decode_len(&one4).is_err());
fn test_short_vec_aliased_length() {
let bytes = [
0x81, 0x80, 0x00, // 3-byte alias of 1
0x00,
];
assert!(deserialize::<ShortVec<u8>>(&bytes).is_err());
}
}