bugfix: fixed invalid offset in unified format difference when difference is too large.
This commit is contained in:
parent
18e674e4a6
commit
ebd9a49db9
19
dtl/Diff.hpp
19
dtl/Diff.hpp
@ -67,6 +67,8 @@ namespace dtl {
|
|||||||
bool editDistanceOnly;
|
bool editDistanceOnly;
|
||||||
uniHunkVec uniHunks;
|
uniHunkVec uniHunks;
|
||||||
comparator cmp;
|
comparator cmp;
|
||||||
|
long long ox;
|
||||||
|
long long oy;
|
||||||
public :
|
public :
|
||||||
Diff () {}
|
Diff () {}
|
||||||
|
|
||||||
@ -260,7 +262,8 @@ namespace dtl {
|
|||||||
if (isHuge()) {
|
if (isHuge()) {
|
||||||
pathCordinates.reserve(MAX_CORDINATES_SIZE);
|
pathCordinates.reserve(MAX_CORDINATES_SIZE);
|
||||||
}
|
}
|
||||||
|
ox = 0;
|
||||||
|
oy = 0;
|
||||||
long long p = -1;
|
long long p = -1;
|
||||||
fp = new long long[M + N + 3];
|
fp = new long long[M + N + 3];
|
||||||
fill(&fp[0], &fp[M + N + 3], -1);
|
fill(&fp[0], &fp[M + N + 3], -1);
|
||||||
@ -595,18 +598,18 @@ namespace dtl {
|
|||||||
while(px_idx < v[i].x || py_idx < v[i].y) {
|
while(px_idx < v[i].x || py_idx < v[i].y) {
|
||||||
if (v[i].y - v[i].x > py_idx - px_idx) {
|
if (v[i].y - v[i].x > py_idx - px_idx) {
|
||||||
if (!wasSwapped()) {
|
if (!wasSwapped()) {
|
||||||
ses.addSequence(*y, 0, y_idx, SES_ADD);
|
ses.addSequence(*y, 0, y_idx + oy, SES_ADD);
|
||||||
} else {
|
} else {
|
||||||
ses.addSequence(*y, y_idx, 0, SES_DELETE);
|
ses.addSequence(*y, y_idx + oy, 0, SES_DELETE);
|
||||||
}
|
}
|
||||||
++y;
|
++y;
|
||||||
++y_idx;
|
++y_idx;
|
||||||
++py_idx;
|
++py_idx;
|
||||||
} else if (v[i].y - v[i].x < py_idx - px_idx) {
|
} else if (v[i].y - v[i].x < py_idx - px_idx) {
|
||||||
if (!wasSwapped()) {
|
if (!wasSwapped()) {
|
||||||
ses.addSequence(*x, x_idx, 0, SES_DELETE);
|
ses.addSequence(*x, x_idx + ox, 0, SES_DELETE);
|
||||||
} else {
|
} else {
|
||||||
ses.addSequence(*x, 0, x_idx, SES_ADD);
|
ses.addSequence(*x, 0, x_idx + ox, SES_ADD);
|
||||||
}
|
}
|
||||||
++x;
|
++x;
|
||||||
++x_idx;
|
++x_idx;
|
||||||
@ -614,10 +617,10 @@ namespace dtl {
|
|||||||
} else {
|
} else {
|
||||||
if (!wasSwapped()) {
|
if (!wasSwapped()) {
|
||||||
lcs.addSequence(*x);
|
lcs.addSequence(*x);
|
||||||
ses.addSequence(*x, x_idx, y_idx, SES_COMMON);
|
ses.addSequence(*x, x_idx + ox, y_idx + oy, SES_COMMON);
|
||||||
} else {
|
} else {
|
||||||
lcs.addSequence(*y);
|
lcs.addSequence(*y);
|
||||||
ses.addSequence(*y, y_idx, x_idx, SES_COMMON);
|
ses.addSequence(*y, y_idx + oy, x_idx + ox, SES_COMMON);
|
||||||
}
|
}
|
||||||
++x;
|
++x;
|
||||||
++y;
|
++y;
|
||||||
@ -658,6 +661,8 @@ namespace dtl {
|
|||||||
fp = new long long[M + N + 3];
|
fp = new long long[M + N + 3];
|
||||||
fill(&fp[0], &fp[M + N + 3], -1);
|
fill(&fp[0], &fp[M + N + 3], -1);
|
||||||
fill(path.begin(), path.end(), -1);
|
fill(path.begin(), path.end(), -1);
|
||||||
|
ox = x_idx - 1;
|
||||||
|
oy = y_idx - 1;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -35,6 +35,7 @@ protected :
|
|||||||
cases.push_back(createCase("abcdefq3wefarhgorequgho4euhfteowauhfwehogfewrquhoi23hroewhoahfotrhguoiewahrgqqabcdef",
|
cases.push_back(createCase("abcdefq3wefarhgorequgho4euhfteowauhfwehogfewrquhoi23hroewhoahfotrhguoiewahrgqqabcdef",
|
||||||
"3abcdef4976fd86ouofita67t85r876e5e746578tgliuhopoqqabcdef")); // 8
|
"3abcdef4976fd86ouofita67t85r876e5e746578tgliuhopoqqabcdef")); // 8
|
||||||
cases.push_back(createCase("abcqqqeqqqccc", "abdqqqeqqqddd")); // 9
|
cases.push_back(createCase("abcqqqeqqqccc", "abdqqqeqqqddd")); // 9
|
||||||
|
cases.push_back(createCase("aaaaaaaaaaaaa>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>aaaadsafabcaaaaaaaaaaaaaaaaaaewaaabdaaaaaabbb", "aaaaaaaaaaaaaaadasfdsafsadasdafbaaaaaaaaaaaaaaaaaeaaaaaaaaaae&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&saaabcaaaaaaccc")); // 10
|
||||||
}
|
}
|
||||||
|
|
||||||
void TearDown () {}
|
void TearDown () {}
|
||||||
@ -96,3 +97,8 @@ TEST_F (Patchtest, patch_test9) {
|
|||||||
ASSERT_EQ(cases[9].B, cases[9].diff.patch(cases[9].A));
|
ASSERT_EQ(cases[9].B, cases[9].diff.patch(cases[9].A));
|
||||||
ASSERT_EQ(cases[9].B, cases[9].diff.uniPatch(cases[9].A));
|
ASSERT_EQ(cases[9].B, cases[9].diff.uniPatch(cases[9].A));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F (Patchtest, patch_test10) {
|
||||||
|
ASSERT_EQ(cases[10].B, cases[10].diff.patch(cases[10].A));
|
||||||
|
ASSERT_EQ(cases[10].B, cases[10].diff.uniPatch(cases[10].A));
|
||||||
|
}
|
||||||
|
@ -11,6 +11,7 @@ def path_chomp(path):
|
|||||||
env = Environment(
|
env = Environment(
|
||||||
CPPFLAGS=['-Wall', '-O2'],
|
CPPFLAGS=['-Wall', '-O2'],
|
||||||
CPPPATH=['..'],
|
CPPPATH=['..'],
|
||||||
|
CXXFLAGS="-std=c++11",
|
||||||
)
|
)
|
||||||
|
|
||||||
conf = Configure(env);
|
conf = Configure(env);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user