This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-text.git
The following commit(s) were added to refs/heads/master by this push: new d315258 TEXT-151: Use StringUtils.equals to test for CharSequence equality. (#105) d315258 is described below commit d31525853b43114a6c49eb8ab15d75719bbbd19d Author: Alex Herbert <a.herb...@sussex.ac.uk> AuthorDate: Sat Mar 2 22:25:17 2019 +0000 TEXT-151: Use StringUtils.equals to test for CharSequence equality. (#105) --- .../text/similarity/JaroWinklerSimilarity.java | 4 +- .../text/similarity/JaroWinklerSimilarityTest.java | 57 ++++++++++++++++------ 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/apache/commons/text/similarity/JaroWinklerSimilarity.java b/src/main/java/org/apache/commons/text/similarity/JaroWinklerSimilarity.java index 82d1092..a159ba8 100644 --- a/src/main/java/org/apache/commons/text/similarity/JaroWinklerSimilarity.java +++ b/src/main/java/org/apache/commons/text/similarity/JaroWinklerSimilarity.java @@ -16,6 +16,8 @@ */ package org.apache.commons.text.similarity; +import org.apache.commons.lang3.StringUtils; + import java.util.Arrays; /** @@ -81,7 +83,7 @@ public class JaroWinklerSimilarity implements SimilarityScore<Double> { throw new IllegalArgumentException("CharSequences must not be null"); } - if (left.equals(right)) { + if (StringUtils.equals(left, right)) { return 1d; } diff --git a/src/test/java/org/apache/commons/text/similarity/JaroWinklerSimilarityTest.java b/src/test/java/org/apache/commons/text/similarity/JaroWinklerSimilarityTest.java index 6832b2c..842f632 100644 --- a/src/test/java/org/apache/commons/text/similarity/JaroWinklerSimilarityTest.java +++ b/src/test/java/org/apache/commons/text/similarity/JaroWinklerSimilarityTest.java @@ -36,23 +36,48 @@ public class JaroWinklerSimilarityTest { @Test public void testGetJaroWinklerSimilarity_StringString() { - assertEquals(1d, similarity.apply("", ""), 0.00001d); - assertEquals(1d, similarity.apply("foo", "foo"), 0.00001d); - assertEquals(0.94166d, similarity.apply("foo", "foo "), 0.00001d); - assertEquals(0.90666d, similarity.apply("foo", "foo "), 0.00001d); - assertEquals(0.86666d, similarity.apply("foo", " foo "), 0.00001d); - assertEquals(0.51111d, similarity.apply("foo", " foo"), 0.00001d); - assertEquals(0.92499d, similarity.apply("frog", "fog"), 0.00001d); - assertEquals(0.0d, similarity.apply("fly", "ant"), 0.00000000000000000001d); - assertEquals(0.44166d, similarity.apply("elephant", "hippo"), 0.00001d); - assertEquals(0.90666d, similarity.apply("ABC Corporation", "ABC Corp"), 0.00001d); - assertEquals(0.95251d, similarity.apply("D N H Enterprises Inc", "D & H Enterprises, Inc."), 0.00001d); + assertEquals(1d, similarity.apply(wrap(""), ""), 0.00001d); + assertEquals(1d, similarity.apply(wrap("foo"), "foo"), 0.00001d); + assertEquals(0.94166d, similarity.apply(wrap("foo"), "foo "), 0.00001d); + assertEquals(0.90666d, similarity.apply(wrap("foo"), "foo "), 0.00001d); + assertEquals(0.86666d, similarity.apply(wrap("foo"), " foo "), 0.00001d); + assertEquals(0.51111d, similarity.apply(wrap("foo"), " foo"), 0.00001d); + assertEquals(0.92499d, similarity.apply(wrap("frog"), "fog"), 0.00001d); + assertEquals(0.0d, similarity.apply(wrap("fly"), "ant"), 0.00000000000000000001d); + assertEquals(0.44166d, similarity.apply(wrap("elephant"), "hippo"), 0.00001d); + assertEquals(0.90666d, similarity.apply(wrap("ABC Corporation"), "ABC Corp"), 0.00001d); + assertEquals(0.95251d, similarity.apply(wrap("D N H Enterprises Inc"), "D & H Enterprises, Inc."), 0.00001d); assertEquals(0.942d, - similarity.apply("My Gym Children's Fitness Center", "My Gym. Childrens Fitness"), 0.00001d); - assertEquals(0.898018d, similarity.apply("PENNSYLVANIA", "PENNCISYLVNIA"), 0.00001d); - assertEquals(0.971428d, similarity.apply("/opt/software1", "/opt/software2"), 0.00001d); - assertEquals(0.941666d, similarity.apply("aaabcd", "aaacdb"), 0.00001d); - assertEquals(0.911111d, similarity.apply("John Horn", "John Hopkins"), 0.00001d); + similarity.apply(wrap("My Gym Children's Fitness Center"), "My Gym. Childrens Fitness"), 0.00001d); + assertEquals(0.898018d, similarity.apply(wrap("PENNSYLVANIA"), "PENNCISYLVNIA"), 0.00001d); + assertEquals(0.971428d, similarity.apply(wrap("/opt/software1"), "/opt/software2"), 0.00001d); + assertEquals(0.941666d, similarity.apply(wrap("aaabcd"), "aaacdb"), 0.00001d); + assertEquals(0.911111d, similarity.apply(wrap("John Horn"), "John Hopkins"), 0.00001d); + } + + /** + * Wrap the string to a {@link CharSequence}. This ensures that using the + * {@link Object#equals(Object)} method on the input CharSequence to test for + * equality will fail. + * + * @param string the string + * @return the char sequence + */ + private static CharSequence wrap(String string) { + return new CharSequence() { + @Override + public int length() { + return string.length(); + } + @Override + public char charAt(int index) { + return string.charAt(index); + } + @Override + public CharSequence subSequence(int start, int end) { + return string.subSequence(start, end); + } + }; } @Test