diff --git a/crates/loro-internal/src/fuzz/recursive.rs b/crates/loro-internal/src/fuzz/recursive.rs index f62c345d..32d96355 100644 --- a/crates/loro-internal/src/fuzz/recursive.rs +++ b/crates/loro-internal/src/fuzz/recursive.rs @@ -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, diff --git a/crates/loro-internal/src/value.rs b/crates/loro-internal/src/value.rs index 757d0b75..89c0b1ef 100644 --- a/crates/loro-internal/src/value.rs +++ b/crates/loro-internal/src/value.rs @@ -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));