diff --git a/w3af/core/controllers/misc/fuzzy_string_cmp.py b/w3af/core/controllers/misc/fuzzy_string_cmp.py index 24d5a415b4..829b255f40 100644 --- a/w3af/core/controllers/misc/fuzzy_string_cmp.py +++ b/w3af/core/controllers/misc/fuzzy_string_cmp.py @@ -116,7 +116,7 @@ def relative_distance(a_str, b_str): # return difflib.SequenceMatcher(None, a_str, b_str).quick_ratio() - return len(set_a.intersection(set_b)) / max(len(set_a), len(set_b)) + return 1.0 * len(set_a.intersection(set_b)) / max(len(set_a), len(set_b)) def _generate_upper_bounds(): diff --git a/w3af/core/controllers/misc/tests/test_fuzzy_string_cmp.py b/w3af/core/controllers/misc/tests/test_fuzzy_string_cmp.py index 400c325b74..24d68ca363 100644 --- a/w3af/core/controllers/misc/tests/test_fuzzy_string_cmp.py +++ b/w3af/core/controllers/misc/tests/test_fuzzy_string_cmp.py @@ -68,3 +68,17 @@ def test_all(self): ' - Threshold: %s\n'\ self.assertEqual(res1, res2, msg % (e, d, f)) + + def test_relative_distance(self): + acceptance_tests = [] + acceptance_tests.append(('a', 'a', 1.0)) + acceptance_tests.append(('ab ac ad', 'ab ae ad', 0.6)) + acceptance_tests.append(('ab ac ae', 'ab af ad', 0.3)) + acceptance_tests.append(('ab ac ad', 'aa ae af', 0.0)) + acceptance_tests.append(('a', 'b', 0.0)) + acceptance_tests.append(('aaaa', 'aaab', 0.75)) + acceptance_tests.append(('a' * 25, 'a', 0.04)) + for e, d, f in acceptance_tests: + res = relative_distance(e, d) + msg = "return value:%f, given value:%f" % (res, f) + self.assertTrue(res >= f, msg) \ No newline at end of file