bugfix: find_near_matches() could return wrong Match.end with max_l_dist=0

This commit is contained in:
Tal Einat
2017-09-07 12:52:52 +03:00
parent 549bce4127
commit b6cb8d361d
2 changed files with 12 additions and 12 deletions
+6 -6
View File
@@ -57,9 +57,9 @@ def choose_search_func(search_params):
# if the limitations are so strict that only exact matches are allowed,
# use search_exact()
if search_params.max_l_dist == 0:
return lambda sequence, subsequence, search_params: [
return lambda subsequence, sequence, search_params: [
Match(index, index + len(subsequence), 0)
for index in search_exact(sequence, subsequence)
for index in search_exact(subsequence, sequence)
]
# return [
# Match(start_index, start_index + len(subsequence), 0)
@@ -70,9 +70,9 @@ def choose_search_func(search_params):
elif max_insertions == 0 and max_deletions == 0:
# max_subs = \
# min([x for x in [max_l_dist, max_substitutions] if x is not None])
return lambda sequence, subsequence, search_params:\
return lambda subsequence, sequence, search_params:\
find_near_matches_substitutions(
sequence, subsequence,
subsequence, sequence,
min([x for x in [search_params.max_l_dist, search_params.max_substitutions] if x is not None])
)
@@ -83,8 +83,8 @@ def choose_search_func(search_params):
(max_insertions if max_insertions is not None else (1 << 29)),
(max_deletions if max_deletions is not None else (1 << 29)),
):
return lambda sequence, subsequence, search_params:\
find_near_matches_levenshtein(sequence, subsequence, search_params.max_l_dist)
return lambda subsequence, sequence, search_params:\
find_near_matches_levenshtein(subsequence, sequence, search_params.max_l_dist)
# if none of the special cases above are met, use the most generic version
else:
+6 -6
View File
@@ -38,7 +38,7 @@ class TestGroupMatches(unittest.TestCase):
class TestSearchExactBase(object):
def search(self, sequence, subsequence, start_index=0, end_index=None):
def search(self, subsequence, sequence, start_index=0, end_index=None):
raise NotImplementedError
def test_empty_sequence(self):
@@ -130,8 +130,8 @@ class TestSearchExactBase(object):
self.assertEqual(self.search(pattern, sequence, 3, 7), [])
class TestSearchExact(TestSearchExactBase, unittest.TestCase):
def search(self, sequence, subsequence, start_index=0, end_index=None):
return list(search_exact(sequence, subsequence, start_index, end_index))
def search(self, subsequence, sequence, start_index=0, end_index=None):
return list(search_exact(subsequence, sequence, start_index, end_index))
def get_supported_sequence_types(self):
types_to_test = [b, u, list, tuple]
@@ -222,11 +222,11 @@ else:
max_diffs)
class TestSearchExactByteslike(TestSearchExactBase, unittest.TestCase):
def search(self, sequence, subsequence, start_index=0, end_index=None):
def search(self, subsequence, sequence, start_index=0, end_index=None):
if end_index is not None:
return search_exact_byteslike(b(sequence), b(subsequence), start_index, end_index)
return search_exact_byteslike(b(subsequence), b(sequence), start_index, end_index)
else:
return search_exact_byteslike(b(sequence), b(subsequence), start_index)
return search_exact_byteslike(b(subsequence), b(sequence), start_index)
def get_supported_sequence_types(self):
types_to_test = [b]