diff --git a/second-part/hw-01/src/app/src/test/java/org/example/MyHashMapTest.java b/second-part/hw-01/src/app/src/test/java/org/example/MyHashMapTest.java new file mode 100644 index 0000000..18866e8 --- /dev/null +++ b/second-part/hw-01/src/app/src/test/java/org/example/MyHashMapTest.java @@ -0,0 +1,121 @@ +package org.example; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class MyHashMapTest { + + @Test + void shouldPutAndGet() { + MyHashMap map = new MyHashMap<>(4); + + map.put("A", 10); + + assertEquals(10, map.get("A")); + } + + @Test + void shouldUpdateValue() { + MyHashMap map = new MyHashMap<>(4); + + map.put("A", 10); + map.put("A", 20); + + assertEquals(20, map.get("A")); + } + + @Test + void shouldReturnOldValueWhenUpdating() { + MyHashMap map = new MyHashMap<>(4); + + assertNull(map.put("A", 10)); + assertEquals(10, map.put("A", 20)); + } + + @Test + void shouldReturnNullForMissingKey() { + MyHashMap map = new MyHashMap<>(4); + + assertNull(map.get("A")); + } + + @Test + void shouldRemoveValue() { + MyHashMap map = new MyHashMap<>(4); + + map.put("A", 10); + + assertEquals(10, map.remove("A")); + assertNull(map.get("A")); + } + + @Test + void shouldReturnNullWhenRemovingMissingKey() { + MyHashMap map = new MyHashMap<>(4); + + assertNull(map.remove("A")); + } + + @Test + void shouldHandleCollision() { + MyHashMap map = new MyHashMap<>(4); + + map.put(1, "A"); + map.put(5, "B"); + + assertEquals("A", map.get(1)); + assertEquals("B", map.get(5)); + } + + @Test + void shouldHandleRemoveWithCollision() { + MyHashMap map = new MyHashMap<>(4); + + map.put(1, "A"); + map.put(5, "B"); + map.put(9, "C"); + + assertEquals("A", map.remove(1)); + assertEquals("B", map.get(5)); + assertEquals("C", map.get(9)); + } + + @Test + void shouldResize() { + MyHashMap map = new MyHashMap<>(2); + + map.put(1, "A"); + map.put(2, "B"); + map.put(3, "C"); + + assertEquals("A", map.get(1)); + assertEquals("B", map.get(2)); + assertEquals("C", map.get(3)); + } + + @Test + void shouldReuseDeletedSlot() { + MyHashMap map = new MyHashMap<>(4); + + map.put(1, "A"); + map.put(5, "B"); + + map.remove(1); + map.put(9, "C"); + + assertEquals("C", map.get(9)); + assertEquals("B", map.get(5)); + } + + @Test + void shouldHandleNullKey() { + MyHashMap map = new MyHashMap<>(4); + + map.put(null, 100); + + assertEquals(100, map.get(null)); + assertEquals(100, map.remove(null)); + assertNull(map.get(null)); + } +}