Fix failing SOS tests, add new failing tests

This commit is contained in:
Paul Hauner 2019-05-03 13:14:26 +10:00
parent 3f9430ddff
commit 9943e70cb9
No known key found for this signature in database
GPG Key ID: 303E4494BB28068C
3 changed files with 16 additions and 12 deletions

View File

@ -43,6 +43,8 @@ impl<T: Decodable> Decodable for Vec<T> {
return Ok(vec![]); return Ok(vec![]);
} }
// The list is non-empty.
if T::is_ssz_fixed_len() { if T::is_ssz_fixed_len() {
Ok(bytes Ok(bytes
.chunks(T::ssz_fixed_len()) .chunks(T::ssz_fixed_len())
@ -65,19 +67,16 @@ impl<T: Decodable> Decodable for Vec<T> {
for i in 1..=num_elems { for i in 1..=num_elems {
let chunk = &bytes[(i - 1) * BYTES_PER_LENGTH_OFFSET..i * BYTES_PER_LENGTH_OFFSET]; let chunk = &bytes[(i - 1) * BYTES_PER_LENGTH_OFFSET..i * BYTES_PER_LENGTH_OFFSET];
dbg!(offset); let slice = if i == num_elems {
&variable[offset..]
} else {
let start = offset;
offset = decode_length(chunk)? - fixed.len();
let end = offset + decode_length(chunk)?; &variable[start..offset]
let slice = &variable[offset..end]; };
offset += end;
values.push(T::from_ssz_bytes(slice)?); values.push(T::from_ssz_bytes(slice)?);
if i == num_elems {
let slice = &variable[offset..];
dbg!(slice);
values.push(T::from_ssz_bytes(slice)?)
}
} }
Ok(values) Ok(values)

View File

@ -157,6 +157,9 @@ mod tests {
#[test] #[test]
fn vec_of_vec_of_u8() { fn vec_of_vec_of_u8() {
let vec: Vec<Vec<u8>> = vec![];
assert_eq!(vec.as_ssz_bytes(), vec![]);
let vec: Vec<Vec<u8>> = vec![vec![]]; let vec: Vec<Vec<u8>> = vec![vec![]];
assert_eq!(vec.as_ssz_bytes(), vec![4, 0, 0, 0]); assert_eq!(vec.as_ssz_bytes(), vec![4, 0, 0, 0]);

View File

@ -16,7 +16,9 @@ fn vec_u16_round_trip() {
#[test] #[test]
fn vec_of_vec_u16_round_trip() { fn vec_of_vec_u16_round_trip() {
// round_trip::<Vec<Vec<u16>>>(vec![]); round_trip::<Vec<Vec<u16>>>(vec![]);
round_trip::<Vec<Vec<u16>>>(vec![vec![]]); round_trip::<Vec<Vec<u16>>>(vec![vec![]]);
// round_trip::<Vec<Vec<u16>>>(vec![vec![], vec![]]); round_trip::<Vec<Vec<u16>>>(vec![vec![], vec![]]);
round_trip::<Vec<Vec<u16>>>(vec![vec![], vec![1, 2, 3]]);
round_trip::<Vec<Vec<u16>>>(vec![vec![1, 2, 3], vec![1, 2, 3]]);
} }