From 75eebb516f15450064a01bd3db1d3a1b59535fb9 Mon Sep 17 00:00:00 2001 From: joe-conigliaro Date: Tue, 4 Feb 2020 14:21:40 +1100 Subject: [PATCH] fix bug in levenshtein distance & add tests --- vlib/strings/similarity.v | 3 +++ vlib/strings/similarity_test.v | 13 +++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 vlib/strings/similarity_test.v diff --git a/vlib/strings/similarity.v b/vlib/strings/similarity.v index 30c5730db0..93f1d58369 100644 --- a/vlib/strings/similarity.v +++ b/vlib/strings/similarity.v @@ -4,6 +4,9 @@ module strings // the distance between between two strings (lower is closer) pub fn levenshtein_distance(a, b string) int { mut f := [0].repeat(b.len + 1) + for j in 0..f.len { + f[j] = j + } for ca in a { mut j := 1 mut fj1 := f[0] diff --git a/vlib/strings/similarity_test.v b/vlib/strings/similarity_test.v new file mode 100644 index 0000000000..8621857071 --- /dev/null +++ b/vlib/strings/similarity_test.v @@ -0,0 +1,13 @@ +import strings + +fn test_levenshtein_distance() { + assert strings.levenshtein_distance('', '') == 0 + assert strings.levenshtein_distance('one', 'one') == 0 + assert strings.levenshtein_distance('', 'two') == 3 + assert strings.levenshtein_distance('three', '') == 5 + assert strings.levenshtein_distance('bananna', '') == 7 + assert strings.levenshtein_distance('cats', 'hats') == 1 + assert strings.levenshtein_distance('hugs', 'shrugs') == 2 + assert strings.levenshtein_distance('broom', 'shroom') == 2 + assert strings.levenshtein_distance('flomax', 'volmax') == 3 +} \ No newline at end of file