summaryrefslogtreecommitdiff
path: root/crdt/src/lib.rs
diff options
context:
space:
mode:
authorJosh Kingsley <josh@joshkingsley.me>2025-11-16 00:28:46 +0200
committerJosh Kingsley <josh@joshkingsley.me>2025-11-16 00:28:46 +0200
commitc35d50b48c73e7905711670b3add671d5204f618 (patch)
treeb6f46852ccbb83ac576248e772e99b35cee7ccc1 /crdt/src/lib.rs
parent302ae521a95bb840467eebee60885e228034ae2a (diff)
feat(crdt): add VectorClock::is_concurrent_with
Diffstat (limited to 'crdt/src/lib.rs')
-rw-r--r--crdt/src/lib.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/crdt/src/lib.rs b/crdt/src/lib.rs
index 7b426fc..88133a6 100644
--- a/crdt/src/lib.rs
+++ b/crdt/src/lib.rs
@@ -66,7 +66,12 @@ impl Doc {
}
}
- self.ops.sort_by(|op1, op2| op1.clock.cmp(&op2.clock));
+ self.ops.sort_by(|op1, op2| {
+ op1.clock
+ .partial_cmp(&op2.clock)
+ // Tie-breaker: yse op ID
+ .unwrap_or_else(|| op1.id.cmp(&op2.id))
+ });
}
pub fn realize(&self) -> Result<RealizedDoc, Error> {
@@ -317,6 +322,15 @@ mod tests {
);
}
+ assert_eq!(
+ doc1.ops
+ .last()
+ .unwrap()
+ .clock
+ .partial_cmp(&doc2.ops.last().unwrap().clock),
+ None
+ );
+
doc1.merge(&doc2);
assert_eq!(doc1.ops.len(), 3);