30 lines
1.4 KiB
Python
30 lines
1.4 KiB
Python
"""Direct coverage for the shared bounded edit-distance primitive."""
|
|
|
|
from band_aider.judgement.bounded_levenshtein import bounded_levenshtein
|
|
|
|
|
|
def test_bounded_levenshtein_exact_and_single_edits() -> None:
|
|
assert bounded_levenshtein("ClassMeta", "ClassMeta", 0) == 0
|
|
assert bounded_levenshtein("ClassMeta", "ClassMata", 1) == 1
|
|
assert bounded_levenshtein("ClassMeta", "ClassMetas", 1) == 1
|
|
assert bounded_levenshtein("ClassMeta", "ClassMet", 1) == 1
|
|
|
|
|
|
def test_bounded_levenshtein_threshold_and_empty_values() -> None:
|
|
assert bounded_levenshtein("abcdef", "abqdefz", 2) == 2
|
|
assert bounded_levenshtein("ClassMeta", "CompletelyDifferentThing", 2) is None
|
|
assert bounded_levenshtein("", "abc", 2) is None
|
|
assert bounded_levenshtein("", "ab", 2) == 2
|
|
assert bounded_levenshtein("same", "same", 0) == 0
|
|
assert bounded_levenshtein("same", "sane", 0) is None
|
|
|
|
|
|
def test_bounded_levenshtein_is_symmetric_and_early_rejects_length_delta() -> None:
|
|
forward = bounded_levenshtein("kitten", "sitting", 3)
|
|
backward = bounded_levenshtein("sitting", "kitten", 3)
|
|
|
|
assert forward == backward == 3
|
|
assert bounded_levenshtein("short", "considerably-longer", 2) is None
|
|
# This diverges early in the dynamic-programming rows but still preserves
|
|
# the public bounded result rather than computing an unbounded distance.
|
|
assert bounded_levenshtein("aaaaaaaaaaaa", "bbbbbbbbbbbb", 2) is None
|