summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2020-07-25 19:54:19 +0200
committerProfpatsch <mail@profpatsch.de>2022-04-01 22:03:05 +0200
commitf8c1aee5dac656dac5bab6de54b06ea2ccf3242a (patch)
treea47dbf8521feedee708ccda4984142773d79eda5 /lib
parentlib/strings: Add levenshtein distance functions (diff)
downloadnixpkgs-f8c1aee5dac656dac5bab6de54b06ea2ccf3242a.tar.gz
lib/tests: Add tests for levenshtein functions
Diffstat (limited to 'lib')
-rw-r--r--lib/tests/misc.nix152
1 files changed, 152 insertions, 0 deletions
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index 271119031395..1eb2d953ebbe 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.nix
@@ -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;
+ };
}