This is an automated email from the ASF dual-hosted git repository.

arne-bdt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/main by this push:
     new fbff38a1dd GH-3941: Fixed spliterator characteristics
fbff38a1dd is described below

commit fbff38a1dd92ca4033cab84d6cad964d4e2601e2
Author: bern-SOPTIM <[email protected]>
AuthorDate: Sat May 23 16:47:24 2026 +0200

    GH-3941: Fixed spliterator characteristics
    
    The spliterators claim not NULL, which was not explicitly documented and 
checked in the set and map implementations for keys and values.
    
    Now non-null key and value are ensured by assertions and documented in the 
interfaces.
    
    Also: The Spliterator claimed IMMUTABLE, which is not correct since the 
spliterators may throw ConcurrentModificationException.
---
 .../apache/jena/mem/collection/FastHashMap.java    |  6 ++
 .../apache/jena/mem/collection/FastHashSet.java    |  7 +-
 .../apache/jena/mem/collection/HashCommonMap.java  |  5 ++
 .../apache/jena/mem/collection/HashCommonSet.java  |  2 +
 .../org/apache/jena/mem/collection/JenaMap.java    | 11 +--
 .../apache/jena/mem/collection/JenaMapIndexed.java |  4 +-
 .../org/apache/jena/mem/collection/JenaSet.java    |  4 +-
 .../jena/mem/collection/JenaSetHashOptimized.java  |  8 +-
 .../apache/jena/mem/collection/JenaSetIndexed.java |  2 +-
 .../jena/mem/spliterator/ArraySpliterator.java     |  2 +-
 .../jena/mem/spliterator/ArraySubSpliterator.java  |  2 +-
 .../mem/spliterator/SparseArraySpliterator.java    |  2 +-
 .../mem/spliterator/SparseArraySubSpliterator.java |  2 +-
 .../mem/collection/AbstractJenaMapNodeTest.java    | 96 +++++++++++-----------
 .../jena/mem/collection/FastHashMapTest2.java      | 10 +--
 .../jena/mem/spliterator/ArraySpliteratorTest.java |  2 +-
 .../mem/spliterator/ArraySubSpliteratorTest.java   |  2 +-
 .../spliterator/SparseArraySpliteratorTest.java    |  2 +-
 .../spliterator/SparseArraySubSpliteratorTest.java |  2 +-
 19 files changed, 94 insertions(+), 77 deletions(-)

diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/FastHashMap.java 
b/jena-core/src/main/java/org/apache/jena/mem/collection/FastHashMap.java
index 04f1d64878..5a3fa8fc23 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/collection/FastHashMap.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/collection/FastHashMap.java
@@ -132,6 +132,8 @@ public abstract class FastHashMap<K, V> extends 
FastHashBase<K> implements JenaM
 
     @Override
     public boolean tryPut(K key, V value) {
+        assert(key != null);
+        assert(value != null);
         growPositionsArrayIfNeeded();
         final var hashCode = key.hashCode();
         final var pIndex = findPosition(key, hashCode);
@@ -150,6 +152,8 @@ public abstract class FastHashMap<K, V> extends 
FastHashBase<K> implements JenaM
 
     @Override
     public void put(K key, V value) {
+        assert(key != null);
+        assert(value != null);
         growPositionsArrayIfNeeded();
         final var hashCode = key.hashCode();
         final var pIndex = findPosition(key, hashCode);
@@ -166,6 +170,8 @@ public abstract class FastHashMap<K, V> extends 
FastHashBase<K> implements JenaM
 
     @Override
     public int putAndGetIndex(K key, V value) {
+        assert(key != null);
+        assert(value != null);
         growPositionsArrayIfNeeded();
         final int hashCode = key.hashCode();
         final var pIndex = findPosition(key, hashCode);
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/FastHashSet.java 
b/jena-core/src/main/java/org/apache/jena/mem/collection/FastHashSet.java
index c793164432..9c8d6ca526 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/collection/FastHashSet.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/collection/FastHashSet.java
@@ -69,6 +69,7 @@ public abstract class FastHashSet<K> extends FastHashBase<K> 
implements JenaSetI
 
     @Override
     public boolean tryAdd(K key, int hashCode) {
+        assert(key != null);
         growPositionsArrayIfNeeded();
         final var pIndex = findPosition(key, hashCode);
         if (pIndex < 0) {
@@ -93,6 +94,7 @@ public abstract class FastHashSet<K> extends FastHashBase<K> 
implements JenaSetI
      */
     @Override
     public int addAndGetIndex(K key) {
+        assert(key != null);
         growPositionsArrayIfNeeded();
         final var hashCode = key.hashCode();
         final var pIndex = findPosition(key, hashCode);
@@ -113,10 +115,11 @@ public abstract class FastHashSet<K> extends 
FastHashBase<K> implements JenaSetI
     }
 
     @Override
-    public void addUnchecked(K value, int hashCode) {
+    public void addUnchecked(K key, int hashCode) {
+        assert(key != null);
         growPositionsArrayIfNeeded();
         final var eIndex = getFreeKeyIndex();
-        keys[eIndex] = value;
+        keys[eIndex] = key;
         hashCodesOrDeletedIndices[eIndex] = hashCode;
         positions[findEmptySlotWithoutEqualityCheck(hashCode)] = ~eIndex;
     }
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/HashCommonMap.java 
b/jena-core/src/main/java/org/apache/jena/mem/collection/HashCommonMap.java
index dcdd555765..563243f8a6 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/collection/HashCommonMap.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/collection/HashCommonMap.java
@@ -84,6 +84,8 @@ public abstract class HashCommonMap<K, V> extends 
HashCommonBase<K> implements J
 
     @Override
     public boolean tryPut(K key, V value) {
+        assert(key != null);
+        assert(value != null);
         final var slot = findSlot(key);
         if (slot < 0) {
             values[~slot] = value;
@@ -97,6 +99,8 @@ public abstract class HashCommonMap<K, V> extends 
HashCommonBase<K> implements J
 
     @Override
     public void put(K key, V value) {
+        assert(key != null);
+        assert(value != null);
         final var slot = findSlot(key);
         if (slot < 0) {
             values[~slot] = value;
@@ -126,6 +130,7 @@ public abstract class HashCommonMap<K, V> extends 
HashCommonBase<K> implements J
         final var slot = findSlot(key);
         if (slot < 0) return values[~slot];
         final var value = absentValueSupplier.get();
+        assert(value != null);
         keys[slot] = key;
         values[slot] = value;
         if (++size > threshold) grow();
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/HashCommonSet.java 
b/jena-core/src/main/java/org/apache/jena/mem/collection/HashCommonSet.java
index acdb91a2be..4628e1b700 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/collection/HashCommonSet.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/collection/HashCommonSet.java
@@ -46,6 +46,7 @@ public abstract class HashCommonSet<K> extends 
HashCommonBase<K> implements Jena
 
     @Override
     public boolean tryAdd(K key) {
+        assert(key != null);
         final var slot = findSlot(key);
         if (slot < 0) return false;
         keys[slot] = key;
@@ -55,6 +56,7 @@ public abstract class HashCommonSet<K> extends 
HashCommonBase<K> implements Jena
 
     @Override
     public void addUnchecked(K key) {
+        assert(key != null);
         final var slot = findSlot(key);
         if (slot < 0) return;
         keys[slot] = key;
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaMap.java 
b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaMap.java
index 6d2423e009..8f92463db6 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaMap.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaMap.java
@@ -30,7 +30,8 @@ import java.util.stream.StreamSupport;
 
 /**
  * A map from keys of type {@code K} to values of type {@code V}.
- * Not thread-safe and does not allow {@code null} keys.
+ * Not thread-safe and does not allow {@code null} keys
+ * and does not allow {@code null} values.
  *
  * @param <K> the type of the keys in the map
  * @param <V> the type of the values in the map
@@ -40,8 +41,8 @@ public interface JenaMap<K, V> extends JenaMapSetCommon<K> {
     /**
      * Try to put a key-value pair into the map. If the key is already 
present, the value is updated.
      *
-     * @param key   the key to put
-     * @param value the value to put
+     * @param key   the key to put. ({@code null} is not allowed)
+     * @param value the value to put. ({@code null} is not allowed)
      * @return true if the key-value pair was put into the map, false if the 
key was already present
      */
     boolean tryPut(K key, V value);
@@ -49,8 +50,8 @@ public interface JenaMap<K, V> extends JenaMapSetCommon<K> {
     /**
      * Put a key-value pair into the map. If the key is already present, the 
value is updated.
      *
-     * @param key   the key to put
-     * @param value the value to put
+     * @param key   the key to put. ({@code null} is not allowed)
+     * @param value the value to put. ({@code null} is not allowed)
      */
     void put(K key, V value);
 
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaMapIndexed.java 
b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaMapIndexed.java
index 67c366d00e..2805568e15 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaMapIndexed.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaMapIndexed.java
@@ -66,8 +66,8 @@ public interface JenaMapIndexed<K, V> extends JenaMap<K, V> {
      * If the key is already present, its value is updated and the existing
      * index is returned.
      *
-     * @param key   the key to put
-     * @param value the value to put
+     * @param key   the key to put. ({@code null} is not allowed)
+     * @param value the value to put. ({@code null} is not allowed)
      * @return the index of the entry holding {@code key}
      */
     int putAndGetIndex(K key, V value);
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSet.java 
b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSet.java
index 03848073f5..a540e34278 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSet.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSet.java
@@ -31,7 +31,7 @@ public interface JenaSet<E> extends JenaMapSetCommon<E> {
     /**
      * Add the key to the set if it is not already present.
      *
-     * @param key the key to add
+     * @param key the key to add. ({@code null} is not allowed)
      * @return {@code true} if the key was added, {@code false} if it was 
already present
      */
     boolean tryAdd(E key);
@@ -43,7 +43,7 @@ public interface JenaSet<E> extends JenaMapSetCommon<E> {
      * the key is not already in the set; otherwise the set's invariants will
      * break (duplicates may be inserted).
      *
-     * @param key the key to add
+     * @param key the key to add. ({@code null} is not allowed)
      */
     void addUnchecked(E key);
 }
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSetHashOptimized.java
 
b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSetHashOptimized.java
index 0e1d032b35..e812d392c2 100644
--- 
a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSetHashOptimized.java
+++ 
b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSetHashOptimized.java
@@ -36,8 +36,8 @@ public interface JenaSetHashOptimized<E> extends JenaSet<E> {
      * Add an element with the given precomputed hash code if it is not
      * already present.
      *
-     * @param key      the element to add
-     * @param hashCode {@code key.hashCode()}
+     * @param key      the element to add. ({@code null} is not allowed)
+     * @param hashCode {@code key.hashCode()}.
      * @return {@code true} if added, {@code false} if already present
      */
     boolean tryAdd(E key, int hashCode);
@@ -46,8 +46,8 @@ public interface JenaSetHashOptimized<E> extends JenaSet<E> {
      * Add an element with the given precomputed hash code without checking
      * whether it is already present. The caller MUST ensure the key is absent.
      *
-     * @param key      the element to add
-     * @param hashCode {@code key.hashCode()}
+     * @param key      the element to add. ({@code null} is not allowed)
+     * @param hashCode {@code key.hashCode()}. ({@code null} is not allowed)
      */
     void addUnchecked(E key, int hashCode);
 
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSetIndexed.java 
b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSetIndexed.java
index c7c3d2e1dd..07887c8c60 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSetIndexed.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/collection/JenaSetIndexed.java
@@ -35,7 +35,7 @@ public interface JenaSetIndexed<E> extends 
JenaSetHashOptimized<E> {
      * is already present, returns a negative value (typically the bitwise
      * complement of the existing index).
      *
-     * @param key      the element to add
+     * @param key      the element to add. ({@code null} is not allowed)
      * @return the index of the inserted element, or a negative value if the
      *         element was already present
      */
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/spliterator/ArraySpliterator.java 
b/jena-core/src/main/java/org/apache/jena/mem/spliterator/ArraySpliterator.java
index a5033c22cd..023adea27a 100644
--- 
a/jena-core/src/main/java/org/apache/jena/mem/spliterator/ArraySpliterator.java
+++ 
b/jena-core/src/main/java/org/apache/jena/mem/spliterator/ArraySpliterator.java
@@ -104,6 +104,6 @@ public class ArraySpliterator<E> implements Spliterator<E> {
 
     @Override
     public int characteristics() {
-        return DISTINCT | SIZED | SUBSIZED | NONNULL | IMMUTABLE;
+        return DISTINCT | SIZED | SUBSIZED | NONNULL ;
     }
 }
\ No newline at end of file
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/spliterator/ArraySubSpliterator.java
 
b/jena-core/src/main/java/org/apache/jena/mem/spliterator/ArraySubSpliterator.java
index 638f2bb0c9..2e8e34fce2 100644
--- 
a/jena-core/src/main/java/org/apache/jena/mem/spliterator/ArraySubSpliterator.java
+++ 
b/jena-core/src/main/java/org/apache/jena/mem/spliterator/ArraySubSpliterator.java
@@ -109,6 +109,6 @@ public class ArraySubSpliterator<E> implements 
Spliterator<E> {
 
     @Override
     public int characteristics() {
-        return DISTINCT | SIZED | SUBSIZED | NONNULL | IMMUTABLE;
+        return DISTINCT | SIZED | SUBSIZED | NONNULL ;
     }
 }
\ No newline at end of file
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/spliterator/SparseArraySpliterator.java
 
b/jena-core/src/main/java/org/apache/jena/mem/spliterator/SparseArraySpliterator.java
index add45739dc..c8250a6464 100644
--- 
a/jena-core/src/main/java/org/apache/jena/mem/spliterator/SparseArraySpliterator.java
+++ 
b/jena-core/src/main/java/org/apache/jena/mem/spliterator/SparseArraySpliterator.java
@@ -113,6 +113,6 @@ public class SparseArraySpliterator<E> implements 
Spliterator<E> {
 
     @Override
     public int characteristics() {
-        return DISTINCT | NONNULL | IMMUTABLE;
+        return DISTINCT | NONNULL ;
     }
 }
diff --git 
a/jena-core/src/main/java/org/apache/jena/mem/spliterator/SparseArraySubSpliterator.java
 
b/jena-core/src/main/java/org/apache/jena/mem/spliterator/SparseArraySubSpliterator.java
index d79242ac78..b7a2f87fa8 100644
--- 
a/jena-core/src/main/java/org/apache/jena/mem/spliterator/SparseArraySubSpliterator.java
+++ 
b/jena-core/src/main/java/org/apache/jena/mem/spliterator/SparseArraySubSpliterator.java
@@ -118,6 +118,6 @@ public class SparseArraySubSpliterator<E> implements 
Spliterator<E> {
 
     @Override
     public int characteristics() {
-        return DISTINCT | NONNULL | IMMUTABLE;
+        return DISTINCT | NONNULL ;
     }
 }
diff --git 
a/jena-core/src/test/java/org/apache/jena/mem/collection/AbstractJenaMapNodeTest.java
 
b/jena-core/src/test/java/org/apache/jena/mem/collection/AbstractJenaMapNodeTest.java
index c3ae6f94a2..4fc8fc6031 100644
--- 
a/jena-core/src/test/java/org/apache/jena/mem/collection/AbstractJenaMapNodeTest.java
+++ 
b/jena-core/src/test/java/org/apache/jena/mem/collection/AbstractJenaMapNodeTest.java
@@ -51,7 +51,7 @@ public abstract class AbstractJenaMapNodeTest {
     @Test
     public void isEmpty() {
         assertTrue(sut.isEmpty());
-        sut.tryPut(node("s"), null);
+        sut.tryPut(node("s"), "v");
         assertFalse(sut.isEmpty());
     }
 
@@ -89,7 +89,7 @@ public abstract class AbstractJenaMapNodeTest {
 
     @Test
     public void testTryRemove() {
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         assertTrue(sut.tryRemove(node("s")));
         assertEquals(0, sut.size());
         assertFalse(sut.tryRemove(node("s")));
@@ -97,7 +97,7 @@ public abstract class AbstractJenaMapNodeTest {
 
     @Test
     public void testRemoveUnchecked() {
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         sut.removeUnchecked(node("s"));
         assertEquals(0, sut.size());
     }
@@ -154,7 +154,7 @@ public abstract class AbstractJenaMapNodeTest {
 
     @Test
     public void testClear() {
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         sut.clear();
         assertEquals(0, sut.size());
     }
@@ -162,7 +162,7 @@ public abstract class AbstractJenaMapNodeTest {
     @Test
     public void testContainKey() {
         assertFalse(sut.containsKey(node("s")));
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         assertTrue(sut.containsKey(node("s")));
         assertFalse(sut.containsKey(node("s2")));
     }
@@ -183,34 +183,34 @@ public abstract class AbstractJenaMapNodeTest {
 
     @Test
     public void testKeyIteratorNextThrowsConcurrentModificationException() {
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         var iter = sut.keyIterator();
-        sut.put(node("s2"), null);
+        sut.put(node("s2"), "v2");
         assertThrows(ConcurrentModificationException.class, iter::next);
     }
 
     @Test
     public void 
testKeySpliteratorAdvanceThrowsConcurrentModificationException() {
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         var spliterator = sut.keySpliterator();
-        sut.put(node("s2"), null);
+        sut.put(node("s2"), "v1");
         assertThrows(ConcurrentModificationException.class, () -> 
spliterator.tryAdvance(t -> {
         }));
     }
 
     @Test
     public void testValueIteratorNextThrowsConcurrentModificationException() {
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         var iter = sut.keyIterator();
-        sut.put(node("s2"), null);
+        sut.put(node("s2"), "v2");
         assertThrows(ConcurrentModificationException.class, iter::next);
     }
 
     @Test
     public void 
testValueSpliteratorAdvanceThrowsConcurrentModificationException() {
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v1");
         var spliterator = sut.valueSpliterator();
-        sut.put(node("s2"), null);
+        sut.put(node("s2"), "v2");
         assertThrows(ConcurrentModificationException.class, () -> 
spliterator.tryAdvance(t -> {
         }));
     }
@@ -219,7 +219,7 @@ public abstract class AbstractJenaMapNodeTest {
     public void testKeyIterator1() {
         final var n0 = node("s");
 
-        sut.put(n0, null);
+        sut.put(n0, "v");
 
         final var iter = sut.keyIterator();
         assertThat(iter.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0));
@@ -241,8 +241,8 @@ public abstract class AbstractJenaMapNodeTest {
         final var n0 = node("s");
         final var n1 = node("s2");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
+        sut.put(n0, "v0");
+        sut.put(n1, "v1");
 
         final var iter = sut.keyIterator();
         assertThat(iter.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0, n1));
@@ -266,9 +266,9 @@ public abstract class AbstractJenaMapNodeTest {
         final var n1 = node("s2");
         final var n2 = node("s3");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
-        sut.put(n2, null);
+        sut.put(n0, "v0");
+        sut.put(n1, "v1");
+        sut.put(n2, "v2");
 
         final var iter = sut.keyIterator();
         assertThat(iter.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0, n1, n2));
@@ -304,7 +304,7 @@ public abstract class AbstractJenaMapNodeTest {
     public void testKeySpliterator1() {
         final var n0 = node("s");
 
-        sut.put(n0, null);
+        sut.put(n0, "v0");
 
         final var spliterator = sut.keySpliterator();
         final var list = StreamSupport.stream(spliterator, false).toList();
@@ -325,8 +325,8 @@ public abstract class AbstractJenaMapNodeTest {
         final var n0 = node("s");
         final var n1 = node("s2");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
+        sut.put(n0, "v0");
+        sut.put(n1, "v1");
 
         final var spliterator = sut.keySpliterator();
         final var list = StreamSupport.stream(spliterator, false).toList();
@@ -349,9 +349,9 @@ public abstract class AbstractJenaMapNodeTest {
         final var n1 = node("s2");
         final var n2 = node("s3");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
-        sut.put(n2, null);
+        sut.put(n0, "v0");
+        sut.put(n1, "v1");
+        sut.put(n2, "v2");
 
         final var spliterator = sut.keySpliterator();
         final var list = StreamSupport.stream(spliterator, false).toList();
@@ -385,7 +385,7 @@ public abstract class AbstractJenaMapNodeTest {
     public void testKeyStream1() {
         final var n0 = node("s");
 
-        sut.put(n0, null);
+        sut.put(n0, "v");
 
         final var stream = sut.keyStream();
         assertThat(stream.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0));
@@ -404,8 +404,8 @@ public abstract class AbstractJenaMapNodeTest {
         final var n0 = node("s");
         final var n1 = node("s2");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
+        sut.put(n0, "v");
+        sut.put(n1, "v2");
 
         final var stream = sut.keyStream();
         assertThat(stream.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0, n1));
@@ -426,9 +426,9 @@ public abstract class AbstractJenaMapNodeTest {
         final var n1 = node("s2");
         final var n2 = node("s3");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
-        sut.put(n2, null);
+        sut.put(n0, "v");
+        sut.put(n1, "v2");
+        sut.put(n2, "v3");
 
         final var stream = sut.keyStream();
         assertThat(stream.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0, n1, n2));
@@ -460,7 +460,7 @@ public abstract class AbstractJenaMapNodeTest {
     public void testKeyStreamParallel1() {
         final var n0 = node("s");
 
-        sut.put(n0, null);
+        sut.put(n0, "v");
 
         final var stream = sut.keyStreamParallel();
         assertThat(stream.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0));
@@ -479,8 +479,8 @@ public abstract class AbstractJenaMapNodeTest {
         final var n0 = node("s");
         final var n1 = node("s2");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
+        sut.put(n0, "v");
+        sut.put(n1, "v2");
 
         final var stream = sut.keyStreamParallel();
         assertThat(stream.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0, n1));
@@ -501,9 +501,9 @@ public abstract class AbstractJenaMapNodeTest {
         final var n1 = node("s2");
         final var n2 = node("s3");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
-        sut.put(n2, null);
+        sut.put(n0, "v");
+        sut.put(n1, "v1");
+        sut.put(n2, "v2");
 
         final var stream = sut.keyStreamParallel();
         assertThat(stream.toList(), 
IsIterableContainingInAnyOrder.containsInAnyOrder(n0, n1, n2));
@@ -522,11 +522,11 @@ public abstract class AbstractJenaMapNodeTest {
     @Test
     public void testSize() {
         assertEquals(0, sut.size());
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         assertEquals(1, sut.size());
-        sut.put(node("s2"), null);
+        sut.put(node("s2"), "v2");
         assertEquals(2, sut.size());
-        sut.put(node("s3"), null);
+        sut.put(node("s3"), "v3");
         assertEquals(3, sut.size());
     }
 
@@ -535,7 +535,7 @@ public abstract class AbstractJenaMapNodeTest {
         assertFalse(sut.anyMatch(t -> true));
         assertFalse(sut.anyMatch(t -> false));
 
-        sut.put(node("s"), null);
+        sut.put(node("s"), "v");
         assertTrue(sut.anyMatch(t -> true));
         assertFalse(sut.anyMatch(t -> false));
     }
@@ -546,9 +546,9 @@ public abstract class AbstractJenaMapNodeTest {
         final var n1 = node("s2");
         final var n2 = node("s3");
 
-        sut.put(n0, null);
-        sut.put(n1, null);
-        sut.put(n2, null);
+        sut.put(n0, "v");
+        sut.put(n1, "v1");
+        sut.put(n2, "v2");
 
         final var list = new ArrayList<Node>();
         sut.anyMatch(n -> {
@@ -561,7 +561,7 @@ public abstract class AbstractJenaMapNodeTest {
     @Test
     public void put1000Nodes() {
         for (int i = 0; i < 1000; i++) {
-            sut.put(node("s" + i), null);
+            sut.put(node("s" + i), "v" + i);
         }
         assertEquals(1000, sut.size());
     }
@@ -569,7 +569,7 @@ public abstract class AbstractJenaMapNodeTest {
     @Test
     public void tryPut1000Nodes() {
         for (int i = 0; i < 1000; i++) {
-            sut.tryPut(node("s" + i), null);
+            sut.tryPut(node("s" + i), "v" + i);
         }
         assertEquals(1000, sut.size());
     }
@@ -587,7 +587,7 @@ public abstract class AbstractJenaMapNodeTest {
         final var nodes = new ArrayList<Node>();
         for (int i = 0; i < 1000; i++) {
             final var n = node("s" + i);
-            sut.put(n, null);
+            sut.put(n, "v" + i);
             nodes.add(n);
         }
         assertEquals(1000, sut.size());
@@ -603,7 +603,7 @@ public abstract class AbstractJenaMapNodeTest {
         final var nodes = new ArrayList<Node>();
         for (int i = 0; i < 1000; i++) {
             final var n = node("s" + i);
-            sut.tryPut(n, null);
+            sut.tryPut(n, "v" + i);
             nodes.add(n);
         }
         assertEquals(1000, sut.size());
diff --git 
a/jena-core/src/test/java/org/apache/jena/mem/collection/FastHashMapTest2.java 
b/jena-core/src/test/java/org/apache/jena/mem/collection/FastHashMapTest2.java
index d932ce2320..3e1983278a 100644
--- 
a/jena-core/src/test/java/org/apache/jena/mem/collection/FastHashMapTest2.java
+++ 
b/jena-core/src/test/java/org/apache/jena/mem/collection/FastHashMapTest2.java
@@ -35,11 +35,11 @@ public class FastHashMapTest2 {
     @Test
     public void testConstructWithInitialSizeAndAdd() {
         var sut = new FastNodeHashMap(3);
-        sut.put(node("s"), null);
-        sut.put(node("s1"), null);
-        sut.put(node("s2"), null);
-        sut.put(node("s3"), null);
-        sut.put(node("s4"), null);
+        sut.put(node("s"), "v");
+        sut.put(node("s1"), "v1");
+        sut.put(node("s2"), "v2");
+        sut.put(node("s3"), "v3");
+        sut.put(node("s4"), "v4");
         assertEquals(5, sut.size());
     }
 
diff --git 
a/jena-core/src/test/java/org/apache/jena/mem/spliterator/ArraySpliteratorTest.java
 
b/jena-core/src/test/java/org/apache/jena/mem/spliterator/ArraySpliteratorTest.java
index ae2afc7fd4..f9d2d4a019 100644
--- 
a/jena-core/src/test/java/org/apache/jena/mem/spliterator/ArraySpliteratorTest.java
+++ 
b/jena-core/src/test/java/org/apache/jena/mem/spliterator/ArraySpliteratorTest.java
@@ -233,7 +233,7 @@ public class ArraySpliteratorTest {
     public void characteristics() {
         Integer[] array = new Integer[]{1, 2, 3, 4, 5};
         Spliterator<Integer> spliterator = new ArraySpliterator<>(array, 
dummySetForConcurrencyCheck);
-        assertEquals(DISTINCT | SIZED | SUBSIZED | NONNULL | IMMUTABLE, 
spliterator.characteristics());
+        assertEquals(DISTINCT | SIZED | SUBSIZED | NONNULL, 
spliterator.characteristics());
     }
 
     @Test
diff --git 
a/jena-core/src/test/java/org/apache/jena/mem/spliterator/ArraySubSpliteratorTest.java
 
b/jena-core/src/test/java/org/apache/jena/mem/spliterator/ArraySubSpliteratorTest.java
index 696b6be7be..0f7b33f881 100644
--- 
a/jena-core/src/test/java/org/apache/jena/mem/spliterator/ArraySubSpliteratorTest.java
+++ 
b/jena-core/src/test/java/org/apache/jena/mem/spliterator/ArraySubSpliteratorTest.java
@@ -232,7 +232,7 @@ public class ArraySubSpliteratorTest {
     public void characteristics() {
         Integer[] array = new Integer[]{1, 2, 3, 4, 5};
         Spliterator<Integer> spliterator = new ArraySubSpliterator<>(array, 
dummySetForConcurrencyCheck);
-        assertEquals(DISTINCT | SIZED | SUBSIZED | NONNULL | IMMUTABLE, 
spliterator.characteristics());
+        assertEquals(DISTINCT | SIZED | SUBSIZED | NONNULL, 
spliterator.characteristics());
     }
 
     @Test
diff --git 
a/jena-core/src/test/java/org/apache/jena/mem/spliterator/SparseArraySpliteratorTest.java
 
b/jena-core/src/test/java/org/apache/jena/mem/spliterator/SparseArraySpliteratorTest.java
index bef1779184..1fad90d737 100644
--- 
a/jena-core/src/test/java/org/apache/jena/mem/spliterator/SparseArraySpliteratorTest.java
+++ 
b/jena-core/src/test/java/org/apache/jena/mem/spliterator/SparseArraySpliteratorTest.java
@@ -441,7 +441,7 @@ public class SparseArraySpliteratorTest {
     public void characteristics() {
         Integer[] array = new Integer[]{1, 2, 3, 4, 5};
         Spliterator<Integer> spliterator = new SparseArraySpliterator<>(array, 
dummySetForConcurrencyCheck);
-        assertEquals(DISTINCT | NONNULL | IMMUTABLE, 
spliterator.characteristics());
+        assertEquals(DISTINCT | NONNULL, spliterator.characteristics());
     }
 
     @Test
diff --git 
a/jena-core/src/test/java/org/apache/jena/mem/spliterator/SparseArraySubSpliteratorTest.java
 
b/jena-core/src/test/java/org/apache/jena/mem/spliterator/SparseArraySubSpliteratorTest.java
index 8b83aeb373..46940c97c1 100644
--- 
a/jena-core/src/test/java/org/apache/jena/mem/spliterator/SparseArraySubSpliteratorTest.java
+++ 
b/jena-core/src/test/java/org/apache/jena/mem/spliterator/SparseArraySubSpliteratorTest.java
@@ -444,7 +444,7 @@ public class SparseArraySubSpliteratorTest {
     public void characteristics() {
         Integer[] array = new Integer[]{1, 2, 3, 4, 5};
         Spliterator<Integer> spliterator = new 
SparseArraySubSpliterator<>(array, dummySetForConcurrencyCheck);
-        assertEquals(DISTINCT | NONNULL | IMMUTABLE, 
spliterator.characteristics());
+        assertEquals(DISTINCT | NONNULL, spliterator.characteristics());
     }
 
     @Test

Reply via email to