summaryrefslogtreecommitdiff
path: root/crdt/src/lib.rs
diff options
context:
space:
mode:
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);