JENA-1784 CacheSimple doesn't check keys for equality
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java
index 0ab01a7..2586bd9 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/cache/CacheSimple.java
@@ -76,7 +76,7 @@
private final int index(K key)
{
int x = (key.hashCode()&0x7fffffff) % size ;
- if ( keys[x] != null )
+ if (key.equals(keys[x]))
return x ;
return -x-1 ;
}
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/cache/CacheSimpleTest.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/cache/CacheSimpleTest.java
index 41f8dd5..c603cd6 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/cache/CacheSimpleTest.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/cache/CacheSimpleTest.java
@@ -21,6 +21,7 @@
import static java.util.stream.Collectors.toMap;
import static java.util.stream.IntStream.rangeClosed;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import org.apache.jena.atlas.lib.Cache;
import org.junit.Test;
@@ -40,4 +41,12 @@
.forEach(testCache::put);
assertEquals("Test cache failed to maintain fixed size!", maxSize, testCache.size());
}
+
+ @Test
+ public void testSameHash() {
+ Cache<String, Integer> cache = new CacheSimple<>(10);
+ assertEquals("Aa".hashCode(), "BB".hashCode());
+ cache.put("Aa", 1);
+ assertFalse("Keys with same hash code should not be considered equal", cache.containsKey("BB"));
+ }
}