Skip to content
This repository was archived by the owner on Dec 20, 2024. It is now read-only.

Commit 7eddb22

Browse files
committed
Fixed: equals()/hashCode() bug
AbstractKeyword equals() and hashCode() do not consider userData #1
1 parent 3ba4b45 commit 7eddb22

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed

mensa/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.dell.mensa</groupId>
55
<artifactId>mensa</artifactId>
6-
<version>1.0.0</version>
6+
<version>1.0.1</version>
77
<name>Mensa</name>
88
<description>Mensa is a generic, flexible, enhanced, and efficient Java implementation of a pattern matching state machine as described by the 1975 paper by Alfred Aho and Margaret Corasick.</description>
99
<organization>

mensa/src/main/java/com/dell/mensa/impl/generic/AbstractKeyword.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ public int hashCode()
132132
result = prime * result + (isCaseSensitive() ? 1231 : 1237);
133133
result = prime * result + (isPunctuationSensitive() ? 1231 : 1237);
134134

135+
final Object userData = getUserData();
136+
result = prime * result + (userData == null ? 0 : userData.hashCode());
137+
135138
final int length = length();
136139
for (int i = 0; i < length; i++)
137140
{
@@ -178,6 +181,24 @@ public boolean equals(final Object object_)
178181
return false;
179182
}
180183

184+
final Object userData = getUserData();
185+
final Object otherUserData = other.getUserData();
186+
187+
if (userData == null)
188+
{
189+
if (otherUserData != null)
190+
{
191+
return false;
192+
}
193+
}
194+
else
195+
{
196+
if (!userData.equals(otherUserData))
197+
{
198+
return false;
199+
}
200+
}
201+
181202
final int length = length();
182203
if (length != other.length())
183204
{

mensa/src/test/java/com/dell/mensa/impl/generic/KeywordAndCharacterKeywordTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,4 +313,45 @@ public void testEqualsObject()
313313
}
314314
}
315315
}
316+
317+
/**
318+
* Test code for <a href="https://github.com/dell-oss/Mensa/issues/1">issue #1</a>:
319+
* AbstractKeyword equals() and hashCode() do not consider userData
320+
*/
321+
@SuppressWarnings("static-method")
322+
@Test
323+
public void testIssue_1_equals()
324+
{
325+
final String userData = "myData";
326+
327+
final IKeyword<Character> a = new Keyword<>(HE);
328+
final IKeyword<Character> au = new Keyword<>(HE, userData);
329+
final IKeyword<Character> b = new CharacterKeyword(STR_HE);
330+
final IKeyword<Character> bu = new CharacterKeyword(STR_HE, userData);
331+
332+
Assert.assertTrue(a.equals(a));
333+
Assert.assertFalse(a.equals(au));
334+
Assert.assertTrue(a.equals(b));
335+
Assert.assertFalse(a.equals(bu));
336+
337+
Assert.assertFalse(au.equals(a));
338+
Assert.assertTrue(au.equals(au));
339+
Assert.assertFalse(au.equals(b));
340+
Assert.assertTrue(au.equals(bu));
341+
342+
Assert.assertTrue(b.equals(a));
343+
Assert.assertFalse(b.equals(au));
344+
Assert.assertTrue(b.equals(b));
345+
Assert.assertFalse(b.equals(bu));
346+
347+
Assert.assertFalse(bu.equals(a));
348+
Assert.assertTrue(bu.equals(au));
349+
Assert.assertFalse(bu.equals(b));
350+
Assert.assertTrue(bu.equals(bu));
351+
352+
Assert.assertEquals(a.hashCode(), a.hashCode());
353+
Assert.assertEquals(a.hashCode(), b.hashCode());
354+
Assert.assertEquals(au.hashCode(), au.hashCode());
355+
Assert.assertEquals(au.hashCode(), bu.hashCode());
356+
}
316357
}

0 commit comments

Comments
 (0)