From 16f3cb42991b2968e6d3f93328dacd925c1f672a Mon Sep 17 00:00:00 2001 From: Kim Shrier Date: Thu, 30 Apr 2026 17:32:30 -0600 Subject: [PATCH] strings: fix edge case for 1 byte strings for jaro similarity (#27042) --- vlib/strings/similarity.v | 2 +- vlib/strings/similarity_test.v | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/vlib/strings/similarity.v b/vlib/strings/similarity.v index 88548f0ab..71690b1f1 100644 --- a/vlib/strings/similarity.v +++ b/vlib/strings/similarity.v @@ -151,7 +151,7 @@ pub fn jaro_similarity(a string, b string) f64 { } // Maximum distance upto which matching is allowed - match_distance := max2(a_len, b_len) / 2 - 1 + match_distance := max2(max2(a_len, b_len) / 2 - 1, 0) mut a_matches := []bool{len: a_len} mut b_matches := []bool{len: b_len} diff --git a/vlib/strings/similarity_test.v b/vlib/strings/similarity_test.v index 8d053dba3..8268dd790 100644 --- a/vlib/strings/similarity_test.v +++ b/vlib/strings/similarity_test.v @@ -48,6 +48,8 @@ fn test_jaro_similarity() { assert strings.jaro_similarity('MARTHA', 'MARHTA') == 0.9444444444444445 assert strings.jaro_similarity('DIXON', 'DICKSONX') == 0.7666666666666666 assert strings.jaro_similarity('JELLYFISH', 'SMELLYFISH') == 0.8962962962962964 + assert strings.jaro_similarity('a', 'a') == 1 + assert strings.jaro_similarity('a', 'b') == 0 } fn test_jaro_winkler_similarity() { @@ -60,4 +62,5 @@ fn test_jaro_winkler_similarity() { assert strings.jaro_winkler_similarity('accomodate', 'accompanist') == 0.8672727272727273 assert strings.jaro_winkler_similarity('untill', 'huntsville') == 0.8666666666666667 assert strings.jaro_winkler_similarity('wich', 'wichita') == 0.9142857142857143 + assert strings.jaro_winkler_similarity('a', 'a') == 1 } -- 2.39.5