From 2518a963aae4f344b70dd8bf2d615732cb818aaf Mon Sep 17 00:00:00 2001 From: Vladislav Fefelov Date: Tue, 28 May 2019 10:29:33 +0300 Subject: [PATCH 1/2] Fix replace missing value --- .../src/main/java/org/jctools/maps/NonBlockingHashMap.java | 1 - .../test/java/org/jctools/maps/nbhm_test/NBHM_Tester2.java | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java b/jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java index a4245cd7..4220cdb1 100644 --- a/jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java +++ b/jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java @@ -379,7 +379,6 @@ public final TypeV putIfMatch( Object key, Object newVal, Object oldVal ) { if (oldVal == null || newVal == null) throw new NullPointerException(); final Object res = putIfMatch( this, _kvs, key, newVal, oldVal ); assert !(res instanceof Prime); - assert res != null; return res == TOMBSTONE ? null : (TypeV)res; } diff --git a/jctools-core/src/test/java/org/jctools/maps/nbhm_test/NBHM_Tester2.java b/jctools-core/src/test/java/org/jctools/maps/nbhm_test/NBHM_Tester2.java index 922d60fc..94f929d9 100644 --- a/jctools-core/src/test/java/org/jctools/maps/nbhm_test/NBHM_Tester2.java +++ b/jctools-core/src/test/java/org/jctools/maps/nbhm_test/NBHM_Tester2.java @@ -484,6 +484,13 @@ public void testNonBlockingHashMapIteratorMultithreaded() throws InterruptedExce assertEquals("values().iterator() count", itemCount, iteratorCount); } + @Test + public void replaceMissingValue() { + NonBlockingHashMap map = new NonBlockingHashMap<>(); + assertNull(map.replace(1, 2)); + assertFalse(map.replace(1, 2, 3)); + } + // --- Tests on equality of values @Test public void replaceResultIsBasedOnEquality() { From 51a5900509e759e42eb4a932b4fe1761e39a6a80 Mon Sep 17 00:00:00 2001 From: Vladislav Fefelov Date: Tue, 28 May 2019 18:53:14 +0300 Subject: [PATCH 2/2] Revert NBHM change --- .../src/main/java/org/jctools/maps/NonBlockingHashMap.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java b/jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java index 4220cdb1..a4245cd7 100644 --- a/jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java +++ b/jctools-core/src/main/java/org/jctools/maps/NonBlockingHashMap.java @@ -379,6 +379,7 @@ public final TypeV putIfMatch( Object key, Object newVal, Object oldVal ) { if (oldVal == null || newVal == null) throw new NullPointerException(); final Object res = putIfMatch( this, _kvs, key, newVal, oldVal ); assert !(res instanceof Prime); + assert res != null; return res == TOMBSTONE ? null : (TypeV)res; }