in src/primitives.rs [702:742]
fn test_ser_de_option() {
let vm = VersionMap::new();
let mut snapshot_mem = vec![0u8; 64];
let mut store = Some("test".to_owned());
store
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 1)
.unwrap();
let mut restore =
<Option<String> as Versionize>::deserialize(&mut snapshot_mem.as_slice(), &vm, 1)
.unwrap();
assert_eq!(store, restore);
// Check that ser_de also works for `None` variant.
store = None;
store
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 1)
.unwrap();
restore = <Option<String> as Versionize>::deserialize(&mut snapshot_mem.as_slice(), &vm, 1)
.unwrap();
assert_eq!(store, restore);
store = Some("test".to_owned());
store
.serialize(&mut snapshot_mem.as_mut_slice(), &vm, 1)
.unwrap();
// Corrupt `snapshot_mem` by changing the most significant bit to a value different than 0 or 1.
snapshot_mem[0] = 2;
let restore_err =
<Option<String> as Versionize>::deserialize(&mut snapshot_mem.as_slice(), &vm, 1)
.unwrap_err();
assert_eq!(
restore_err,
VersionizeError::Deserialize("Invalid option value 2".to_string())
);
// Corrupt `snapshot_mem` by changing the most significant bit from 1 (`Some(type)`) to 0 (`None`).
snapshot_mem[0] = 0;
restore = <Option<String> as Versionize>::deserialize(&mut snapshot_mem.as_slice(), &vm, 1)
.unwrap();
assert_ne!(store, restore);
}