From 3b84e6e5fb60faf1439973a8cdd3c3dfb9bb1827 Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Wed, 19 Mar 2014 23:50:33 +0200 Subject: [PATCH] bugfix: generic search would raise an exception on certain input values --- fuzzysearch/generic_search.py | 11 +++++++---- tests/test_generic_search.py | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/fuzzysearch/generic_search.py b/fuzzysearch/generic_search.py index 14b74fd..8b42b92 100644 --- a/fuzzysearch/generic_search.py +++ b/fuzzysearch/generic_search.py @@ -3,7 +3,7 @@ from fuzzysearch.common import Match GenericSearchCandidate = namedtuple( - 'SuperKevinSearchCandidate', + 'GenericSearchCandidate', ['start', 'subseq_index', 'l_dist', 'n_subs', 'n_ins', 'n_dels'], ) @@ -29,9 +29,12 @@ def find_near_matches_generic_linear_programming(subsequence, sequence, # optimization: prepare some often used things in advance _subseq_len = len(subsequence) - if max_l_dist is None or \ - max_l_dist >= max_substitutions + max_insertions + max_deletions: - max_l_dist = max_substitutions + max_insertions + max_deletions + maxes_sum = sum( + (x if x is not None else 0) + for x in [max_substitutions, max_insertions, max_deletions] + ) + if max_l_dist is None or max_l_dist >= maxes_sum: + max_l_dist = maxes_sum candidates = [] for index, char in enumerate(sequence): diff --git a/tests/test_generic_search.py b/tests/test_generic_search.py index 74d768a..d70d28d 100644 --- a/tests/test_generic_search.py +++ b/tests/test_generic_search.py @@ -125,3 +125,25 @@ class TestGenericSearch(unittest.TestCase): self.search('bde', 'abcdefg', 1, 1, 1, 3), )) ) + + def test_argument_handling(self): + # check that no exception is raised when some values are None + self.assertEqual( + self.search('a', 'b', 0, None, None, None), + [], + ) + + self.assertEqual( + self.search('a', 'b', None, 0, None, None), + [], + ) + + self.assertEqual( + self.search('a', 'b', None, None, 0, None), + [], + ) + + self.assertEqual( + self.search('a', 'b', None, None, None, 0), + [], + )