| 448 | |
| 449 | #[test] |
| 450 | fn skips_three_way_conflicts() { |
| 451 | let txn = MockTxn::new(); |
| 452 | let store = MemoryChangeStore::new(); |
| 453 | let engine = SemanticMergeEngine::new(&txn, &store); |
| 454 | |
| 455 | let v1 = GraphNode::new( |
| 456 | NodeId::new(1), |
| 457 | ChangePosition::new(0), |
| 458 | ChangePosition::new(5), |
| 459 | ); |
| 460 | let v2 = GraphNode::new( |
| 461 | NodeId::new(2), |
| 462 | ChangePosition::new(0), |
| 463 | ChangePosition::new(5), |
| 464 | ); |
| 465 | let v3 = GraphNode::new( |
| 466 | NodeId::new(3), |
| 467 | ChangePosition::new(0), |
| 468 | ChangePosition::new(5), |
| 469 | ); |
| 470 | |
| 471 | let group = ConflictGroup::new(vec![v1, v2, v3]); |
| 472 | let outcome = engine.try_merge(&group).unwrap(); |
| 473 | assert!(matches!(outcome, MergeOutcome::NoCrdtData)); |
| 474 | } |
| 475 | |
| 476 | // ---- SemanticMergeEngine: no ancestor → NoCrdtData -------------------- |
| 477 | |