| 560 | |
| 561 | #[test] |
| 562 | fn skips_three_way_conflicts() { |
| 563 | let txn = MockTxn::new(); |
| 564 | let store = MemoryChangeStore::new(); |
| 565 | let engine = SemanticMergeEngine::new(&txn, &store); |
| 566 | |
| 567 | let v1 = GraphNode::new( |
| 568 | NodeId::new(1), |
| 569 | ChangePosition::new(0), |
| 570 | ChangePosition::new(5), |
| 571 | ); |
| 572 | let v2 = GraphNode::new( |
| 573 | NodeId::new(2), |
| 574 | ChangePosition::new(0), |
| 575 | ChangePosition::new(5), |
| 576 | ); |
| 577 | let v3 = GraphNode::new( |
| 578 | NodeId::new(3), |
| 579 | ChangePosition::new(0), |
| 580 | ChangePosition::new(5), |
| 581 | ); |
| 582 | |
| 583 | let group = ConflictGroup::new(vec![v1, v2, v3]); |
| 584 | let outcome = engine.try_merge(&group).unwrap(); |
| 585 | assert!(matches!(outcome, MergeOutcome::NoCrdtData)); |
| 586 | } |
| 587 | |
| 588 | // ---- SemanticMergeEngine: no ancestor → NoCrdtData -------------------- |
| 589 | |