fix encoded value sign extention
This commit is contained in:
parent
e950b77475
commit
abe7fb6a50
2 changed files with 164 additions and 24 deletions
|
|
@ -290,7 +290,7 @@ impl Serializable for EncodedValue {
|
|||
})?;
|
||||
// Sign extention
|
||||
if (buffer[size - 1] & 0b1000_0000) != 0 {
|
||||
for b in buffer.iter_mut().take(size) {
|
||||
for b in buffer.iter_mut().skip(size) {
|
||||
*b = 0xff;
|
||||
}
|
||||
}
|
||||
|
|
@ -330,7 +330,7 @@ impl Serializable for EncodedValue {
|
|||
})?;
|
||||
// Sign extention
|
||||
if (buffer[size - 1] & 0b1000_0000) != 0 {
|
||||
for b in buffer.iter_mut().take(size) {
|
||||
for b in buffer.iter_mut().skip(size) {
|
||||
*b = 0xff;
|
||||
}
|
||||
}
|
||||
|
|
@ -353,7 +353,7 @@ impl Serializable for EncodedValue {
|
|||
})?;
|
||||
// Sign extention
|
||||
if (buffer[size - 1] & 0b1000_0000) != 0 {
|
||||
for b in buffer.iter_mut().take(size) {
|
||||
for b in buffer.iter_mut().skip(size) {
|
||||
*b = 0xff;
|
||||
}
|
||||
}
|
||||
|
|
@ -727,4 +727,139 @@ mod test {
|
|||
.unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn long_serialize() {
|
||||
assert_eq!(
|
||||
vec![
|
||||
0x06 | 7 << 5,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x80
|
||||
],
|
||||
EncodedValue::Long(-9223372036854775808)
|
||||
.serialize_to_vec()
|
||||
.unwrap(),
|
||||
);
|
||||
assert_eq!(
|
||||
vec![0x06 | 0 << 5, 0xff],
|
||||
EncodedValue::Long(-1).serialize_to_vec().unwrap(),
|
||||
);
|
||||
assert_eq!(
|
||||
vec![0x06 | 0 << 5, 0x01],
|
||||
EncodedValue::Long(1).serialize_to_vec().unwrap(),
|
||||
);
|
||||
assert_eq!(
|
||||
vec![0x06 | 1 << 5, 0x23, 0x01],
|
||||
EncodedValue::Long(0x0123).serialize_to_vec().unwrap(),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn long_deserialize() {
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[
|
||||
0x06 | 7 << 5,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x80
|
||||
])
|
||||
.unwrap(),
|
||||
EncodedValue::Long(-9223372036854775808),
|
||||
);
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x06 | 0 << 5, 0xff]).unwrap(),
|
||||
EncodedValue::Long(-1),
|
||||
);
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x06 | 0 << 5, 0x01]).unwrap(),
|
||||
EncodedValue::Long(1),
|
||||
);
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x06 | 1 << 5, 0x23, 0x01]).unwrap(),
|
||||
EncodedValue::Long(0x0123),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn short_serialize() {
|
||||
assert_eq!(
|
||||
vec![0x02 | 0 << 5, 0xff],
|
||||
EncodedValue::Short(-1).serialize_to_vec().unwrap(),
|
||||
);
|
||||
assert_eq!(
|
||||
vec![0x02 | 0 << 5, 0x01],
|
||||
EncodedValue::Short(1).serialize_to_vec().unwrap(),
|
||||
);
|
||||
assert_eq!(
|
||||
vec![0x02 | 1 << 5, 0x23, 0x01],
|
||||
EncodedValue::Short(0x0123).serialize_to_vec().unwrap(),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn short_deserialize() {
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x02 | 0 << 5, 0xff]).unwrap(),
|
||||
EncodedValue::Short(-1),
|
||||
);
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x02 | 0 << 5, 0x01]).unwrap(),
|
||||
EncodedValue::Short(1),
|
||||
);
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x02 | 1 << 5, 0x23, 0x01]).unwrap(),
|
||||
EncodedValue::Short(0x0123),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn int_serialize() {
|
||||
assert_eq!(
|
||||
vec![0x04 | 3 << 5, 0x00, 0x00, 0x00, 0x80],
|
||||
EncodedValue::Int(-2147483648).serialize_to_vec().unwrap(),
|
||||
);
|
||||
assert_eq!(
|
||||
vec![0x04 | 0 << 5, 0xff],
|
||||
EncodedValue::Int(-1).serialize_to_vec().unwrap(),
|
||||
);
|
||||
assert_eq!(
|
||||
vec![0x04 | 0 << 5, 0x01],
|
||||
EncodedValue::Int(1).serialize_to_vec().unwrap(),
|
||||
);
|
||||
assert_eq!(
|
||||
vec![0x04 | 1 << 5, 0x23, 0x01],
|
||||
EncodedValue::Int(0x0123).serialize_to_vec().unwrap(),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn int_deserialize() {
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x04 | 3 << 5, 0x00, 0x00, 0x00, 0x80]).unwrap(),
|
||||
EncodedValue::Int(-2147483648),
|
||||
);
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x04 | 0 << 5, 0xff]).unwrap(),
|
||||
EncodedValue::Int(-1),
|
||||
);
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x04 | 0 << 5, 0x01]).unwrap(),
|
||||
EncodedValue::Int(1),
|
||||
);
|
||||
assert_eq!(
|
||||
EncodedValue::deserialize_from_slice(&[0x04 | 1 << 5, 0x23, 0x01]).unwrap(),
|
||||
EncodedValue::Int(0x0123),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue