You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/03/02 22:25:24 UTC
[commons-text] branch master updated: TEXT-151: Use
StringUtils.equals to test for CharSequence equality. (#105)
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....@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