test: add comprehensive MyHashMap tests

This commit is contained in:
user
2026-09-12 20:56:49 +04:00
parent 0cb391534f
commit d4b0e1892c
@@ -118,4 +118,202 @@ class MyHashMapTest {
assertEquals(100, map.remove(null));
assertNull(map.get(null));
}
@Test
void shouldHandleNullValue() {
MyHashMap<String, Integer> map = new MyHashMap<>(4);
assertNull(map.put("A", null));
assertNull(map.get("A"));
assertNull(map.put("A", 10));
assertEquals(10, map.get("A"));
}
@Test
void shouldUpdateNullValue() {
MyHashMap<String, Integer> map = new MyHashMap<>(4);
map.put("A", 10);
assertEquals(10, map.put("A", null));
assertNull(map.get("A"));
}
@Test
void shouldRemoveMiddleElementFromCollisionChain() {
MyHashMap<Integer, String> map = new MyHashMap<>(4);
map.put(1, "A");
map.put(5, "B");
map.put(9, "C");
assertEquals("B", map.remove(5));
assertEquals("A", map.get(1));
assertNull(map.get(5));
assertEquals("C", map.get(9));
}
@Test
void shouldRemoveLastElementFromCollisionChain() {
MyHashMap<Integer, String> map = new MyHashMap<>(4);
map.put(1, "A");
map.put(5, "B");
map.put(9, "C");
assertEquals("C", map.remove(9));
assertEquals("A", map.get(1));
assertEquals("B", map.get(5));
assertNull(map.get(9));
}
@Test
void shouldReinsertRemovedKey() {
MyHashMap<String, Integer> map = new MyHashMap<>(4);
map.put("A", 10);
assertEquals(10, map.remove("A"));
assertNull(map.get("A"));
assertNull(map.put("A", 20));
assertEquals(20, map.get("A"));
}
@Test
void shouldKeepCollidingEntriesAfterRemovingFirst() {
MyHashMap<Integer, String> map = new MyHashMap<>(4);
map.put(1, "A");
map.put(5, "B");
map.put(9, "C");
map.remove(1);
assertEquals("B", map.get(5));
assertEquals("C", map.get(9));
}
@Test
void shouldKeepCollidingEntriesAfterRemovingMiddle() {
MyHashMap<Integer, String> map = new MyHashMap<>(4);
map.put(1, "A");
map.put(5, "B");
map.put(9, "C");
map.put(13, "D");
map.remove(5);
assertEquals("A", map.get(1));
assertEquals("C", map.get(9));
assertEquals("D", map.get(13));
}
@Test
void shouldHandleManyCollisions() {
MyHashMap<Integer, String> map = new MyHashMap<>(2);
map.put(1, "A");
map.put(3, "B");
map.put(5, "C");
map.put(7, "D");
map.put(9, "E");
assertEquals("A", map.get(1));
assertEquals("B", map.get(3));
assertEquals("C", map.get(5));
assertEquals("D", map.get(7));
assertEquals("E", map.get(9));
}
@Test
void shouldResizeAndKeepCollisions() {
MyHashMap<Integer, String> map = new MyHashMap<>(2);
map.put(1, "A");
map.put(3, "B");
map.put(5, "C");
map.put(7, "D");
map.put(9, "E");
map.put(11, "F");
assertEquals("A", map.get(1));
assertEquals("B", map.get(3));
assertEquals("C", map.get(5));
assertEquals("D", map.get(7));
assertEquals("E", map.get(9));
assertEquals("F", map.get(11));
}
@Test
void shouldUpdateCollidingKey() {
MyHashMap<Integer, String> map = new MyHashMap<>(4);
map.put(1, "A");
map.put(5, "B");
map.put(9, "C");
assertEquals("B", map.put(5, "NEW"));
assertEquals("A", map.get(1));
assertEquals("NEW", map.get(5));
assertEquals("C", map.get(9));
}
@Test
void shouldHandleEqualButDifferentStringInstances() {
MyHashMap<String, Integer> map = new MyHashMap<>(4);
map.put(new String("A"), 10);
assertEquals(10, map.get(new String("A")));
assertEquals(10, map.remove(new String("A")));
}
@Test
void shouldNotAffectOtherKeysWhenUpdating() {
MyHashMap<Integer, String> map = new MyHashMap<>(4);
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
map.put(2, "UPDATED");
assertEquals("A", map.get(1));
assertEquals("UPDATED", map.get(2));
assertEquals("C", map.get(3));
}
@Test
void shouldNotFindKeyAfterRemoveAndResize() {
MyHashMap<Integer, String> map = new MyHashMap<>(2);
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
map.put(4, "D");
map.remove(2);
assertNull(map.get(2));
assertEquals("A", map.get(1));
assertEquals("C", map.get(3));
assertEquals("D", map.get(4));
}
@Test
void shouldHandleRepeatedPutAndRemove() {
MyHashMap<String, Integer> map = new MyHashMap<>(4);
for (int i = 0; i < 100; i++) {
assertNull(map.put("A", i));
assertEquals(i, map.get("A"));
assertEquals(i, map.remove("A"));
assertNull(map.get("A"));
}
}
}