Skip to content
Snippets Groups Projects
test_levenshtein.py 1.04 KiB
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))