in cas_object/src/cas_chunk_format.rs [289:320]
fn test_deserialize_multiple_chunks() {
for (num_chunks, chunk_size, compression_scheme) in CASES {
let (c, cas_data, raw_data, raw_chunk_boundaries) =
build_cas_object(*num_chunks, *chunk_size, *compression_scheme);
let mut deserialized = Vec::new();
let res = deserialize_chunks_to_writer(&mut Cursor::new(&cas_data), &mut deserialized);
assert!(res.is_ok());
assert_eq!(deserialized.len(), raw_data.len());
assert_eq!(deserialized, raw_data);
let (num_read, chunk_byte_indices) = res.unwrap();
assert_eq!(num_read, cas_data.len());
assert_eq!(chunk_byte_indices[0], 0);
assert_eq!(
chunk_byte_indices.iter().skip(1).map(|v| *v).collect::<Vec<_>>(),
raw_chunk_boundaries.iter().map(|v| v.1).collect::<Vec<_>>()
);
assert_eq!(
chunk_byte_indices.iter().skip(1).map(|v| *v).collect::<Vec<_>>(),
c.info.unpacked_chunk_offsets,
);
let ChunkSize::Fixed(chunk_size) = chunk_size else {
// not testing chunk length for random chunk sizes
return;
};
// verify that chunk boundaries are correct
for i in 0..chunk_byte_indices.len() - 1 {
assert_eq!(chunk_byte_indices[i + 1] - chunk_byte_indices[i], *chunk_size);
}
}
}