import unittest from itertools import combinations from levenshtein import distance class TestDistance(unittest.TestCase): corpus = [ # equal strings ('', '', 0), ('a', 'a', 0), ('aaa', 'aaa', 0), # character insertion ('a', '', 1), ('ab', '', 2), # character replacement ('a', 'b', 1), ('ab', 'ac', 1), ('aba', 'acb', 2), # character deletion ('abc', 'ac', 1), ('abcd', 'ad', 2), ('abcde', 'ace', 2), ] strings = [x[0] for x in corpus] + [x[1] for x in corpus] def test_distance(self): for a, b, d in self.corpus: self.assertEqual(distance(a, b), d) self.assertEqual(distance(b, a), d) def test_symmetric(self): for a, b in combinations(self.strings, 2): self.assertEqual(distance(a, b), distance(b, a)) def test_triangular(self): for a, b, c in combinations(self.strings, 3): self.assertLessEqual(distance(a, c), distance(a, b) + distance(b, c))