fix: map fuzz diff delete LoroValue::Null

This commit is contained in:
leeeon233 2023-03-02 20:55:06 +08:00
parent d2fa09cd00
commit 398ddcb25a
2 changed files with 455 additions and 400 deletions

View file

@ -115,13 +115,15 @@ impl Actor {
Box::new(move |event| {
let mut map = map.lock().unwrap();
for diff in event.diff.iter() {
println!("diff {:?}", diff);
match diff {
Diff::Map(map_diff) => {
for (key, value) in map_diff.added.iter() {
map.insert(key.to_string(), value.clone());
}
for key in map_diff.deleted.iter() {
map.remove(&key.to_string());
// map.remove(&key.to_string());
map.insert(key.to_string(), LoroValue::Null);
}
for (key, value) in map_diff.updated.iter() {
map.insert(key.to_string(), value.new.clone());
@ -584,7 +586,6 @@ fn assert_value_eq(a: &LoroValue, b: &LoroValue) {
if is_empty {
continue;
}
assert_value_eq(v, b.get(k).unwrap());
}
@ -1305,49 +1306,13 @@ mod failed_tests {
#[test]
fn list_slice_err() {
test_multi_sites(
5,
&mut [
Map {
site: 1,
container_idx: 0,
key: 21,
value: Null,
},
SyncAll,
Map {
site: 0,
container_idx: 0,
key: 0,
value: Container(C::Text),
},
List {
site: 4,
container_idx: 0,
key: 0,
value: I32(1),
},
Sync { from: 2, to: 4 },
Sync { from: 1, to: 2 },
Map {
site: 1,
container_idx: 0,
key: 21,
value: Null,
},
Sync { from: 1, to: 0 },
Map {
site: 1,
container_idx: 0,
key: 21,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 251,
value: Container(C::Text),
},
],
3,
&mut [Map {
site: 1,
container_idx: 0,
key: 21,
value: Null,
}],
)
}
@ -1357,35 +1322,56 @@ mod failed_tests {
minify_error(
5,
vec![
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
Text {
site: 149,
container_idx: 149,
pos: 149,
value: 38293,
is_del: true,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
Text {
site: 149,
container_idx: 149,
pos: 149,
value: 38293,
is_del: true,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
Text {
site: 149,
container_idx: 149,
pos: 149,
value: 38293,
is_del: true,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
Text {
site: 149,
container_idx: 149,
pos: 149,
value: 38293,
is_del: true,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Container(C::Text),
Text {
site: 149,
container_idx: 149,
pos: 149,
value: 38293,
is_del: true,
},
Text {
site: 149,
container_idx: 149,
pos: 149,
value: 38293,
is_del: true,
},
Map {
site: 21,
@ -1394,371 +1380,439 @@ mod failed_tests {
value: Container(C::List),
},
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Container(C::List),
},
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
SyncAll,
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Container(C::Text),
},
Map {
site: 21,
container_idx: 21,
key: 235,
value: Container(C::Text),
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Container(C::Text),
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
List {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 41,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Container(C::List),
},
Sync { from: 191, to: 191 },
Sync { from: 21, to: 21 },
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 20,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Container(C::List),
},
SyncAll,
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 255,
key: 255,
value: Null,
},
Map {
site: 255,
container_idx: 255,
key: 255,
value: Container(C::List),
},
Sync { from: 197, to: 64 },
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
Sync { from: 191, to: 191 },
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 5,
container_idx: 5,
key: 5,
value: Null,
},
Map {
site: 5,
container_idx: 5,
key: 5,
value: Null,
},
Map {
site: 5,
container_idx: 5,
key: 5,
value: Null,
},
Map {
site: 5,
container_idx: 5,
key: 5,
value: Null,
},
Map {
site: 5,
container_idx: 5,
key: 5,
value: Null,
},
Map {
site: 5,
container_idx: 5,
key: 5,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 61,
container_idx: 61,
key: 61,
value: Null,
},
List {
site: 61,
container_idx: 61,
key: 61,
value: Null,
},
List {
site: 61,
container_idx: 61,
key: 61,
value: Null,
},
List {
site: 61,
container_idx: 61,
key: 61,
value: Null,
},
List {
site: 61,
container_idx: 61,
key: 61,
value: Null,
},
Sync { from: 191, to: 46 },
Sync { from: 191, to: 191 },
Sync { from: 191, to: 191 },
Sync { from: 191, to: 191 },
Sync { from: 191, to: 65 },
Sync { from: 191, to: 191 },
Sync { from: 191, to: 191 },
Sync { from: 191, to: 191 },
Sync { from: 191, to: 191 },
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
value: Null,
},
Map {
site: 4,
container_idx: 58,
key: 21,
value: Null,
},
Map {
site: 64,
container_idx: 64,
key: 64,
value: Null,
},
List {
site: 64,
container_idx: 1,
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 5,
container_idx: 15,
key: 255,
value: Container(C::Text),
},
Map {
site: 21,
container_idx: 21,
key: 21,
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 21,
container_idx: 21,
key: 21,
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
List {
site: 64,
container_idx: 64,
key: 64,
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
List {
site: 64,
container_idx: 66,
key: 64,
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Sync { from: 64, to: 64 },
List {
site: 191,
container_idx: 191,
key: 191,
value: Container(C::List),
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Map {
site: 0,
container_idx: 0,
key: 0,
value: Null,
},
Sync { from: 191, to: 191 },
Sync { from: 191, to: 191 },
],
test_multi_sites,
normalize,

View file

@ -282,7 +282,8 @@ impl LoroValue {
map.insert(v.0.to_string(), unresolved_to_collection(v.1));
}
for v in diff.deleted.iter() {
map.remove(v.as_ref());
// map.remove(v.as_ref());
map.insert(v.to_string(), LoroValue::Null);
}
for (key, value) in diff.updated.iter() {
map.insert(key.to_string(), unresolved_to_collection(&value.new));