import itertools import unittest import pylev test_data = [ ("classic", "kitten", "sitting", 3), ("same", "kitten", "kitten", 0), ("empty", "", "", 0), ("a", "meilenstein", "levenshtein", 4), ("b", "levenshtein", "frankenstein", 6), ("c", "confide", "deceit", 6), ("d", "CUNsperrICY", "conspiracy", 8), ] test_functions = [ # pylev.classic_levenshtein, # disabled because it is so slow pylev.recursive_levenshtein, pylev.wf_levenshtein, pylev.wfi_levenshtein, ] class Tests(unittest.TestCase): def test_damerau_levenshtein(seld): assert pylev.damerau_levenshtein("ba", "abc") == 2 assert pylev.damerau_levenshtein("foobar", "foobra") == 1 assert pylev.damerau_levenshtein("fee", "deed") == 2 def _mk_test_fn(fn, a, b, expected): def _test_fn(self): self.assertEqual(fn(a, b), expected) self.assertEqual(fn(b, a), expected) return _test_fn for lev_fn, data in itertools.product(test_functions, test_data): name, a, b, expected = data test_fn = _mk_test_fn(lev_fn, a, b, expected) setattr(Tests, "test_%s_%s" % (name, lev_fn.__name__), test_fn) if __name__ == "__main__": unittest.main()