|
|
|
@ -913,4 +913,156 @@ runTests { |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
## Levenshtein distance functions and co. |
|
|
|
|
testCommonPrefixLengthEmpty = { |
|
|
|
|
expr = strings.commonPrefixLength "" "hello"; |
|
|
|
|
expected = 0; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testCommonPrefixLengthSame = { |
|
|
|
|
expr = strings.commonPrefixLength "hello" "hello"; |
|
|
|
|
expected = 5; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testCommonPrefixLengthDiffering = { |
|
|
|
|
expr = strings.commonPrefixLength "hello" "hey"; |
|
|
|
|
expected = 2; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testCommonSuffixLengthEmpty = { |
|
|
|
|
expr = strings.commonSuffixLength "" "hello"; |
|
|
|
|
expected = 0; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testCommonSuffixLengthSame = { |
|
|
|
|
expr = strings.commonSuffixLength "hello" "hello"; |
|
|
|
|
expected = 5; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testCommonSuffixLengthDiffering = { |
|
|
|
|
expr = strings.commonSuffixLength "test" "rest"; |
|
|
|
|
expected = 3; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinEmpty = { |
|
|
|
|
expr = strings.levenshtein "" ""; |
|
|
|
|
expected = 0; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinOnlyAdd = { |
|
|
|
|
expr = strings.levenshtein "" "hello there"; |
|
|
|
|
expected = 11; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinOnlyRemove = { |
|
|
|
|
expr = strings.levenshtein "hello there" ""; |
|
|
|
|
expected = 11; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinOnlyTransform = { |
|
|
|
|
expr = strings.levenshtein "abcdef" "ghijkl"; |
|
|
|
|
expected = 6; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinMixed = { |
|
|
|
|
expr = strings.levenshtein "kitchen" "sitting"; |
|
|
|
|
expected = 5; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostZeroFalse = { |
|
|
|
|
expr = strings.levenshteinAtMost 0 "foo" "boo"; |
|
|
|
|
expected = false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostZeroTrue = { |
|
|
|
|
expr = strings.levenshteinAtMost 0 "foo" "foo"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostOneFalse = { |
|
|
|
|
expr = strings.levenshteinAtMost 1 "car" "ct"; |
|
|
|
|
expected = false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostOneTrue = { |
|
|
|
|
expr = strings.levenshteinAtMost 1 "car" "cr"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
# We test levenshteinAtMost 2 particularly well because it uses a complicated |
|
|
|
|
# implementation |
|
|
|
|
testLevenshteinAtMostTwoIsEmpty = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "" ""; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoIsZero = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "abcdef"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoIsOne = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "abddef"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff0False = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "aczyef"; |
|
|
|
|
expected = false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff0Outer = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "zbcdez"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff0DelLeft = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "bcdefz"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff0DelRight = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "zabcde"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff1False = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "bddez"; |
|
|
|
|
expected = false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff1DelLeft = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "bcdez"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff1DelRight = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "abcdef" "zbcde"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff2False = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "hello" "hxo"; |
|
|
|
|
expected = false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff2True = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "hello" "heo"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostTwoDiff3 = { |
|
|
|
|
expr = strings.levenshteinAtMost 2 "hello" "ho"; |
|
|
|
|
expected = false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostThreeFalse = { |
|
|
|
|
expr = strings.levenshteinAtMost 3 "hello" "Holla!"; |
|
|
|
|
expected = false; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
testLevenshteinAtMostThreeTrue = { |
|
|
|
|
expr = strings.levenshteinAtMost 3 "hello" "Holla"; |
|
|
|
|
expected = true; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|