public void diff_cleanupSemanticTest() { diff_match_patchTest dmp = new diff_match_patchTest(); // Cleanup semantically trivial equalities. // Null case. List<Diff> diffs = new List<Diff>(); dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>(), diffs); // No elimination #1. diffs = new List<Diff> { new Diff(Operation.DELETE, "ab"), new Diff(Operation.INSERT, "cd"), new Diff(Operation.EQUAL, "12"), new Diff(Operation.DELETE, "e")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff> { new Diff(Operation.DELETE, "ab"), new Diff(Operation.INSERT, "cd"), new Diff(Operation.EQUAL, "12"), new Diff(Operation.DELETE, "e")}, diffs); // No elimination #2. diffs = new List<Diff> { new Diff(Operation.DELETE, "abc"), new Diff(Operation.INSERT, "ABC"), new Diff(Operation.EQUAL, "1234"), new Diff(Operation.DELETE, "wxyz")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff> { new Diff(Operation.DELETE, "abc"), new Diff(Operation.INSERT, "ABC"), new Diff(Operation.EQUAL, "1234"), new Diff(Operation.DELETE, "wxyz")}, diffs); // Simple elimination. diffs = new List<Diff> { new Diff(Operation.DELETE, "a"), new Diff(Operation.EQUAL, "b"), new Diff(Operation.DELETE, "c")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff> { new Diff(Operation.DELETE, "abc"), new Diff(Operation.INSERT, "b")}, diffs); // Backpass elimination. diffs = new List<Diff> { new Diff(Operation.DELETE, "ab"), new Diff(Operation.EQUAL, "cd"), new Diff(Operation.DELETE, "e"), new Diff(Operation.EQUAL, "f"), new Diff(Operation.INSERT, "g")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff> { new Diff(Operation.DELETE, "abcdef"), new Diff(Operation.INSERT, "cdfg")}, diffs); // Multiple eliminations. diffs = new List<Diff> { new Diff(Operation.INSERT, "1"), new Diff(Operation.EQUAL, "A"), new Diff(Operation.DELETE, "B"), new Diff(Operation.INSERT, "2"), new Diff(Operation.EQUAL, "_"), new Diff(Operation.INSERT, "1"), new Diff(Operation.EQUAL, "A"), new Diff(Operation.DELETE, "B"), new Diff(Operation.INSERT, "2")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff> { new Diff(Operation.DELETE, "AB_AB"), new Diff(Operation.INSERT, "1A2_1A2")}, diffs); // Word boundaries. diffs = new List<Diff> { new Diff(Operation.EQUAL, "The c"), new Diff(Operation.DELETE, "ow and the c"), new Diff(Operation.EQUAL, "at.")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff> { new Diff(Operation.EQUAL, "The "), new Diff(Operation.DELETE, "cow and the "), new Diff(Operation.EQUAL, "cat.")}, diffs); // Overlap elimination #1. diffs = new List<Diff> { new Diff(Operation.DELETE, "abcxx"), new Diff(Operation.INSERT, "xxdef")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff> { new Diff(Operation.DELETE, "abc"), new Diff(Operation.EQUAL, "xx"), new Diff(Operation.INSERT, "def")}, diffs); // Overlap elimination #2. diffs = new List<Diff> { new Diff(Operation.DELETE, "abcxx"), new Diff(Operation.INSERT, "xxdef"), new Diff(Operation.DELETE, "ABCXX"), new Diff(Operation.INSERT, "XXDEF")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff> { new Diff(Operation.DELETE, "abc"), new Diff(Operation.EQUAL, "xx"), new Diff(Operation.INSERT, "def"), new Diff(Operation.DELETE, "ABC"), new Diff(Operation.EQUAL, "XX"), new Diff(Operation.INSERT, "DEF")}, diffs); }
public void diff_cleanupSemanticTest() { var dmp = new diff_match_patchTest(); // Cleanup semantically trivial equalities. // Null case. var diffs = new List<Diff>(); dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>(), diffs); // No elimination #1. diffs = new List<Diff>{ new Diff(Operation.Delete, "ab"), new Diff(Operation.Insert, "cd"), new Diff(Operation.Equal, "12"), new Diff(Operation.Delete, "e") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Delete, "ab"), new Diff(Operation.Insert, "cd"), new Diff(Operation.Equal, "12"), new Diff(Operation.Delete, "e") }, diffs); // No elimination #2. diffs = new List<Diff>{ new Diff(Operation.Delete, "abc"), new Diff(Operation.Insert, "ABC"), new Diff(Operation.Equal, "1234"), new Diff(Operation.Delete, "wxyz") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Delete, "abc"), new Diff(Operation.Insert, "ABC"), new Diff(Operation.Equal, "1234"), new Diff(Operation.Delete, "wxyz") }, diffs); // Simple elimination. diffs = new List<Diff>{ new Diff(Operation.Delete, "a"), new Diff(Operation.Equal, "b"), new Diff(Operation.Delete, "c") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Delete, "abc"), new Diff(Operation.Insert, "b") }, diffs); // Backpass elimination. diffs = new List<Diff>{ new Diff(Operation.Delete, "ab"), new Diff(Operation.Equal, "cd"), new Diff(Operation.Delete, "e"), new Diff(Operation.Equal, "f"), new Diff(Operation.Insert, "g") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Delete, "abcdef"), new Diff(Operation.Insert, "cdfg") }, diffs); // Multiple eliminations. diffs = new List<Diff>{ new Diff(Operation.Insert, "1"), new Diff(Operation.Equal, "A"), new Diff(Operation.Delete, "B"), new Diff(Operation.Insert, "2"), new Diff(Operation.Equal, "_"), new Diff(Operation.Insert, "1"), new Diff(Operation.Equal, "A"), new Diff(Operation.Delete, "B"), new Diff(Operation.Insert, "2") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Delete, "AB_AB"), new Diff(Operation.Insert, "1A2_1A2") }, diffs); // Word boundaries. diffs = new List<Diff>{ new Diff(Operation.Equal, "The c"), new Diff(Operation.Delete, "ow and the c"), new Diff(Operation.Equal, "at.") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Equal, "The "), new Diff(Operation.Delete, "cow and the "), new Diff(Operation.Equal, "cat.") }, diffs); // No overlap elimination. diffs = new List<Diff>{ new Diff(Operation.Delete, "abcxx"), new Diff(Operation.Insert, "xxdef") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Delete, "abcxx"), new Diff(Operation.Insert, "xxdef") }, diffs); // Overlap elimination. diffs = new List<Diff>{ new Diff(Operation.Delete, "abcxxx"), new Diff(Operation.Insert, "xxxdef") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Delete, "abc"), new Diff(Operation.Equal, "xxx"), new Diff(Operation.Insert, "def") }, diffs); // Two overlap eliminations. diffs = new List<Diff>{ new Diff(Operation.Delete, "abcd1212"), new Diff(Operation.Insert, "1212efghi"), new Diff(Operation.Equal, "----"), new Diff(Operation.Delete, "A3"), new Diff(Operation.Insert, "3BC") }; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.Delete, "abcd"), new Diff(Operation.Equal, "1212"), new Diff(Operation.Insert, "efghi"), new Diff(Operation.Equal, "----"), new Diff(Operation.Delete, "A"), new Diff(Operation.Equal, "3"), new Diff(Operation.Insert, "BC") }, diffs); }
public void diff_cleanupSemanticTest() { diff_match_patchTest dmp = new diff_match_patchTest(); // Cleanup semantically trivial equalities. List<Diff> diffs = new List<Diff>(); dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>(), diffs); diffs = new List<Diff>{ new Diff(Operation.DELETE, "a"), new Diff(Operation.INSERT, "b"), new Diff(Operation.EQUAL, "cd"), new Diff(Operation.DELETE, "e")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual( new List<Diff>{ new Diff(Operation.DELETE, "a"), new Diff(Operation.INSERT, "b"), new Diff(Operation.EQUAL, "cd"), new Diff(Operation.DELETE, "e")}, diffs); diffs = new List<Diff>{ new Diff(Operation.DELETE, "a"), new Diff(Operation.EQUAL, "b"), new Diff(Operation.DELETE, "c")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual( new List<Diff>{ new Diff(Operation.DELETE, "abc"), new Diff(Operation.INSERT, "b")}, diffs); diffs = new List<Diff>{ new Diff(Operation.DELETE, "ab"), new Diff(Operation.EQUAL, "cd"), new Diff(Operation.DELETE, "e"), new Diff(Operation.EQUAL, "f"), new Diff(Operation.INSERT, "g")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.DELETE, "abcdef"), new Diff(Operation.INSERT, "cdfg")}, diffs); diffs = new List<Diff>{ new Diff(Operation.INSERT, "1"), new Diff(Operation.EQUAL, "A"), new Diff(Operation.DELETE, "B"), new Diff(Operation.INSERT, "2"), new Diff(Operation.EQUAL, "_"), new Diff(Operation.INSERT, "1"), new Diff(Operation.EQUAL, "A"), new Diff(Operation.DELETE, "B"), new Diff(Operation.INSERT, "2")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.DELETE, "AB_AB"), new Diff(Operation.INSERT, "1A2_1A2")}, diffs); diffs = new List<Diff>{ new Diff(Operation.EQUAL, "The c"), new Diff(Operation.DELETE, "ow and the c"), new Diff(Operation.EQUAL, "at.")}; dmp.diff_cleanupSemantic(diffs); CollectionAssert.AreEqual(new List<Diff>{ new Diff(Operation.EQUAL, "The "), new Diff(Operation.DELETE, "cow and the "), new Diff(Operation.EQUAL, "cat.")}, diffs); }