You've already forked fuzzysearch
mirror of
https://github.com/Dasharo/fuzzysearch.git
synced 2026-03-06 15:27:05 -08:00
bugfix: find_near_matches() could return wrong Match.end with max_l_dist=0
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user