1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.text.similarity;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertThrows;
21
22 import org.junit.jupiter.api.BeforeAll;
23 import org.junit.jupiter.api.Test;
24 import org.junit.jupiter.params.ParameterizedTest;
25 import org.junit.jupiter.params.provider.MethodSource;
26
27
28
29
30 class JaccardDistanceTest {
31
32 private static JaccardDistance classBeingTested;
33
34 @BeforeAll
35 public static void setUp() {
36 classBeingTested = new JaccardDistance();
37 }
38
39 @ParameterizedTest
40 @MethodSource("org.apache.commons.text.similarity.SimilarityInputTest#similarityInputsEquals()")
41 void testGettingJaccardDistance(final Class<?> cls) {
42
43 assertEquals(0.0, classBeingTested.apply(SimilarityInputTest.build(cls, ""), SimilarityInputTest.build(cls, "")));
44 assertEquals(1.0, classBeingTested.apply(SimilarityInputTest.build(cls, "left"), SimilarityInputTest.build(cls, "")));
45 assertEquals(1.0, classBeingTested.apply(SimilarityInputTest.build(cls, ""), SimilarityInputTest.build(cls, "right")));
46 assertEquals(1.0 - 3.0 / 4, classBeingTested.apply(SimilarityInputTest.build(cls, "frog"), SimilarityInputTest.build(cls, "fog")));
47 assertEquals(1.0, classBeingTested.apply(SimilarityInputTest.build(cls, "fly"), SimilarityInputTest.build(cls, "ant")));
48 assertEquals(1.0 - 2.0 / 9, classBeingTested.apply(SimilarityInputTest.build(cls, "elephant"), SimilarityInputTest.build(cls, "hippo")));
49 assertEquals(1.0 - 7.0 / 11, classBeingTested.apply(SimilarityInputTest.build(cls, "ABC Corporation"), SimilarityInputTest.build(cls, "ABC Corp")));
50 assertEquals(1.0 - 13.0 / 17,
51 classBeingTested.apply(SimilarityInputTest.build(cls, "D N H Enterprises Inc"), SimilarityInputTest.build(cls, "D & H Enterprises, Inc.")));
52 assertEquals(1.0 - 16.0 / 18, classBeingTested.apply(SimilarityInputTest.build(cls, "My Gym Children's Fitness Center"),
53 SimilarityInputTest.build(cls, "My Gym. Childrens Fitness")));
54 assertEquals(1.0 - 9.0 / 10, classBeingTested.apply(SimilarityInputTest.build(cls, "PENNSYLVANIA"), SimilarityInputTest.build(cls, "PENNCISYLVNIA")));
55 assertEquals(1.0 - 1.0 / 8, classBeingTested.apply(SimilarityInputTest.build(cls, "left"), SimilarityInputTest.build(cls, "right")));
56 assertEquals(1.0 - 1.0 / 8, classBeingTested.apply(SimilarityInputTest.build(cls, "leettteft"), SimilarityInputTest.build(cls, "ritttght")));
57 assertEquals(0.0, classBeingTested.apply(SimilarityInputTest.build(cls, "the same string"), SimilarityInputTest.build(cls, "the same string")));
58 }
59
60 @Test
61 void testGettingJaccardDistanceCharSequence() {
62
63 assertEquals(0.0, classBeingTested.apply("", ""));
64 assertEquals(1.0, classBeingTested.apply("left", ""));
65 assertEquals(1.0, classBeingTested.apply("", "right"));
66 assertEquals(1.0 - 3.0 / 4, classBeingTested.apply("frog", "fog"));
67 assertEquals(1.0, classBeingTested.apply("fly", "ant"));
68 assertEquals(1.0 - 2.0 / 9, classBeingTested.apply("elephant", "hippo"));
69 assertEquals(1.0 - 7.0 / 11, classBeingTested.apply("ABC Corporation", "ABC Corp"));
70 assertEquals(1.0 - 13.0 / 17, classBeingTested.apply("D N H Enterprises Inc", "D & H Enterprises, Inc."));
71 assertEquals(1.0 - 16.0 / 18, classBeingTested.apply("My Gym Children's Fitness Center", "My Gym. Childrens Fitness"));
72 assertEquals(1.0 - 9.0 / 10, classBeingTested.apply("PENNSYLVANIA", "PENNCISYLVNIA"));
73 assertEquals(1.0 - 1.0 / 8, classBeingTested.apply("left", "right"));
74 assertEquals(1.0 - 1.0 / 8, classBeingTested.apply("leettteft", "ritttght"));
75 assertEquals(0.0, classBeingTested.apply("the same string", "the same string"));
76 }
77
78 @Test
79 void testGettingJaccardDistanceNullNull() {
80 assertThrows(IllegalArgumentException.class, () -> classBeingTested.apply((String) null, null));
81 }
82
83 @Test
84 void testGettingJaccardDistanceNullString() {
85 assertThrows(IllegalArgumentException.class, () -> classBeingTested.apply(null, "right"));
86 }
87
88 @Test
89 void testGettingJaccardDistanceStringNull() {
90 assertThrows(IllegalArgumentException.class, () -> classBeingTested.apply(" ", null));
91 }
92 }