@Test public void shouldCompactCollection() { final int totalItems = 50; for (int i = 0; i < totalItems; i++) { intToObjectMap.put(i, Integer.toString(i)); } for (int i = 0, limit = totalItems - 4; i < limit; i++) { intToObjectMap.remove(i); } final int capacityBeforeCompaction = intToObjectMap.capacity(); intToObjectMap.compact(); assertThat(intToObjectMap.capacity(), lessThan(capacityBeforeCompaction)); }
@Test public void shouldRemoveEntryAndCompactCollisionChain() { final int key = 12; final String value = "12"; intToObjectMap.put(key, value); intToObjectMap.put(13, "13"); final int collisionKey = key + intToObjectMap.capacity(); final String collisionValue = Integer.toString(collisionKey); intToObjectMap.put(collisionKey, collisionValue); intToObjectMap.put(14, "14"); assertThat(intToObjectMap.remove(key), is(value)); }
@Test public void shouldGrowWhenThresholdExceeded() { final float loadFactor = 0.5f; final int initialCapacity = 32; final Int2ObjectHashMap<String> map = newMap(loadFactor, initialCapacity); for (int i = 0; i < 16; i++) { map.put(i, Integer.toString(i)); } assertThat(map.resizeThreshold(), is(16)); assertThat(map.capacity(), is(initialCapacity)); assertThat(map.size(), is(16)); map.put(16, "16"); assertThat(map.resizeThreshold(), is(initialCapacity)); assertThat(map.capacity(), is(64)); assertThat(map.size(), is(17)); assertThat(map.get(16), equalTo("16")); assertThat((double)loadFactor, closeTo(map.loadFactor(), 0.0f)); }
@Test public void shouldHandleCollisionAndThenLinearProbe() { final float loadFactor = 0.5f; final int initialCapacity = 32; final Int2ObjectHashMap<String> map = newMap(loadFactor, initialCapacity); final int key = 7; final String value = "Seven"; map.put(key, value); final int collisionKey = key + map.capacity(); final String collisionValue = Integer.toString(collisionKey); map.put(collisionKey, collisionValue); assertThat(map.get(key), is(value)); assertThat(map.get(collisionKey), is(collisionValue)); assertThat((double)loadFactor, closeTo(map.loadFactor(), 0.0f)); }