Fixed bug in overlap elimination.
Added UT to reflect an example use case that should not have been
failing.
diff --git a/diffmatchpatch/dmp.go b/diffmatchpatch/dmp.go
index 0350978..2f5ba3d 100644
--- a/diffmatchpatch/dmp.go
+++ b/diffmatchpatch/dmp.go
@@ -967,7 +967,7 @@
float64(overlapLength2) >= float64(len(insertion))/2 {
// Reverse overlap found.
// Insert an equality and swap and trim the surrounding edits.
- overlap := Diff{DiffEqual, insertion[overlapLength2:]}
+ overlap := Diff{DiffEqual, insertion[len(insertion)-overlapLength2:]}
diffs = append(
diffs[:pointer],
append([]Diff{overlap}, diffs[pointer:]...)...)
diff --git a/diffmatchpatch/dmp_test.go b/diffmatchpatch/dmp_test.go
index ee4766b..0b7cd5d 100644
--- a/diffmatchpatch/dmp_test.go
+++ b/diffmatchpatch/dmp_test.go
@@ -563,6 +563,29 @@
Diff{DiffEqual, "1234"},
Diff{DiffDelete, "wxyz"}}, diffs)
+ // No elimination #3.
+ diffs = []Diff{
+ Diff{DiffEqual, "2016-09-01T03:07:1"},
+ Diff{DiffInsert, "5.15"},
+ Diff{DiffEqual, "4"},
+ Diff{DiffDelete, "."},
+ Diff{DiffEqual, "80"},
+ Diff{DiffInsert, "0"},
+ Diff{DiffEqual, "78"},
+ Diff{DiffDelete, "3074"},
+ Diff{DiffEqual, "1Z"}}
+ diffs = dmp.DiffCleanupSemantic(diffs)
+ assertDiffEqual(t, []Diff{
+ Diff{DiffEqual, "2016-09-01T03:07:1"},
+ Diff{DiffInsert, "5.15"},
+ Diff{DiffEqual, "4"},
+ Diff{DiffDelete, "."},
+ Diff{DiffEqual, "80"},
+ Diff{DiffInsert, "0"},
+ Diff{DiffEqual, "78"},
+ Diff{DiffDelete, "3074"},
+ Diff{DiffEqual, "1Z"}}, diffs)
+
// Simple elimination.
diffs = []Diff{
Diff{DiffDelete, "a"},