/// The `assert` function should have the body `|(stack, zero)| assert_eq!(stack, &U::zero_from(&zero))` /// /// We cannot do this internally because we technically need a different `U` with a shorter lifetime here /// which would require some gnarly lifetime bounds and perhaps a Yoke dependency. This is just a test, so it's /// not important to get this 100% perfect fn assert_zerovec<T, U, F>(slice: &[U], assert: F) where
T: ule::VarULE + ?Sized + serde::Serialize,
U: ule::EncodeAsVarULE<T> + serde::Serialize,
F: Fn(&U, &T), for<'a> Box<T>: serde::Deserialize<'a>,
{ let varzerovec: VarZeroVec<T> = slice.into();
assert_eq!(varzerovec.len(), slice.len());
for (stack, zero) in slice.iter().zip(varzerovec.iter()) {
assert(stack, zero)
}
let bytes = varzerovec.as_bytes(); let name = std::any::type_name::<T>(); let reparsed: VarZeroVec<T> = VarZeroVec::parse_byte_slice(bytes)
.unwrap_or_else(|_| panic!("Parsing VarZeroVec<{name}> should succeed"));
assert_eq!(reparsed.len(), slice.len());
for (stack, zero) in slice.iter().zip(reparsed.iter()) {
assert(stack, zero)
}
let bincode = bincode::serialize(&varzerovec).unwrap(); let deserialized: VarZeroVec<T> = bincode::deserialize(&bincode).unwrap();
for (stack, zero) in slice.iter().zip(deserialized.iter()) {
assert(stack, zero)
}
let json_slice = serde_json::to_string(&slice).unwrap(); let json_vzv = serde_json::to_string(&varzerovec).unwrap();
assert_eq!(json_slice, json_vzv);
let deserialized: VarZeroVec<T> = serde_json::from_str(&json_vzv).unwrap();
for (stack, zero) in slice.iter().zip(deserialized.iter()) {
assert(stack, zero)
}
}
// Test that all fields are accessible on a type using multifieldule let multi_ule = ule::encode_varule_to_box(&TEST_MULTIFIELD[0]);
assert_eq!(multi_ule.a, TEST_MULTIFIELD[0].a.to_unaligned());
assert_eq!(multi_ule.b, TEST_MULTIFIELD[0].b.to_unaligned());
assert_eq!(multi_ule.c(), TEST_MULTIFIELD[0].c);
assert_eq!(multi_ule.d, TEST_MULTIFIELD[0].d);
assert_eq!(multi_ule.e(), TEST_MULTIFIELD[0].e);
assert_eq!(multi_ule.f, TEST_MULTIFIELD[0].f.to_unaligned());
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.