from pyphonetics.distance_metrics import levenshtein_distance, hamming_distance
def test_levenshtein():
tests = [
(('b', 'o', 'o', 'k'), ('b', 'a', 'c', 'k'), 2),
('book', 'back', 2),
('hello', 'helo', 1),
('good sir', 'baal', 8),
('say', 'shiver', 5),
('feature', 'get-project-features', 13),
('example', 'samples', 3),
('sturgeon', 'urgently', 6),
('levenshtein', 'frankenstein', 6),
('distance', 'difference', 5),
('a', 'b', 1),
('ab', 'ac', 1),
('ac', 'bc', 1),
('abc', 'axc', 1),
('xabxcdxxefxgx', '1ab2cd34ef5g6', 6),
('a', '', 1),
('ab', 'a', 1),
('ab', 'b', 1),
('abc', 'ac', 1),
('xabxcdxxefxgx', 'abcdefg', 6),
('', 'a', 1),
('a', 'ab', 1),
('b', 'ab', 1),
('ac', 'abc', 1),
('abcdefg', 'xabxcdxxefxgx', 6),
('', '', 0),
('a', 'a', 0),
('abc', 'abc', 0),
('', '', 0),
('a', '', 1),
('', 'a', 1),
('abc', '', 3),
('', 'abc', 3)
]
for test in tests:
assert levenshtein_distance(test[0], test[1]) == test[2]
def test_hamming():
tests = [
('1011101', '1001001', 2),
('2143896', '2233796', 3),
('ramer', 'cases', 3),
('abc', 'abc', 0),
('abc', 'abd', 1),
('night', 'nacht', 2),
((0, 1, 0, 1), (1, 2, 0, 1), 2)
]
for test in tests:
assert hamming_distance(test[0], test[1]) == test[2]