Description
Out of curiosity I ran Guava's testlib Map tests against the Apache types. This uncovered a contract bug where Iterator.remove() is invalidated by hasNext(), causing its call to no-op due to currentKey becoming null. The isolates case is,
@Test public void iterator_remove() { var map = new ReferenceMap<>(); map.put(1, 2); var iter = map.entrySet().iterator(); assertTrue(iter.hasNext()); assertTrue(iter.hasNext()); assertEquals(iter.next(), 1); assertFalse(iter.hasNext()); iter.remove(); assertEquals(map, Map.of()); }
Guava's testlib has good coverage for the Collections Framework and might be worth integrating. The simple test case that I wrote is attached.