diff options
| author | Josh Kingsley <josh@joshkingsley.me> | 2025-11-16 00:28:46 +0200 |
|---|---|---|
| committer | Josh Kingsley <josh@joshkingsley.me> | 2025-11-16 00:28:46 +0200 |
| commit | c35d50b48c73e7905711670b3add671d5204f618 (patch) | |
| tree | b6f46852ccbb83ac576248e772e99b35cee7ccc1 /crdt/src/lib.rs | |
| parent | 302ae521a95bb840467eebee60885e228034ae2a (diff) | |
feat(crdt): add VectorClock::is_concurrent_with
Diffstat (limited to 'crdt/src/lib.rs')
| -rw-r--r-- | crdt/src/lib.rs | 16 |
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); |
