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 <[email protected]>
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