package org.dcm4che3.util; import static org.junit.Assert.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.junit.Before; import org.junit.Test; /** * @author Gunter Zeilinger <gunterze@gmail.com> */ public class IntHashMapTest { private IntHashMap<Integer> map; @Before public void setUp() throws Exception { map = new IntHashMap<Integer>(); for (int i = 1; i < 45; i += 3) map.put(i, Integer.valueOf(i)); } private void removeOdd() { for (int i = 1; i < 45; i += 2) map.remove(i); } private static void testGet(IntHashMap<Integer> map) { for (int i = 1; i < 45; i++) if ((i & 1) == 0 && (i % 3) == 1) assertEquals(Integer.valueOf(i), map.get(i)); else assertNull(map.get(i)); } @Test public void testSize() { assertEquals(15, map.size()); removeOdd(); assertEquals(7, map.size()); } @Test public void testGet() { removeOdd(); testGet(map); } @Test public void testPut() { removeOdd(); for (int i = 0; i < 45; i++) map.put(i, Integer.valueOf(i)); assertEquals(45, map.size()); for (int i = 0; i < 45; i++) assertEquals(Integer.valueOf(i), map.get(i)); } @Test public void testContainsKey() { removeOdd(); for (int i = 1; i < 45; i++) assertEquals((i & 1) == 0 && (i % 3) == 1, map.containsKey(i)); } @Test public void testRehash() { removeOdd(); map.trimToSize(); testGet(map); } @Test public void testRemove() { for (int i = 1; i < 45; i += 2) if ((i % 3) == 1) assertEquals(Integer.valueOf(i), map.remove(i)); else assertNull(map.remove(i)); } @Test public void testClear() { assertFalse(map.isEmpty()); map.clear(); assertTrue(map.isEmpty()); } @SuppressWarnings("unchecked") @Test public void testClone() { removeOdd(); IntHashMap<Integer> clone = (IntHashMap<Integer>) map.clone(); map.clear(); testGet(clone); } @SuppressWarnings("unchecked") @Test public void testSerialize() throws Exception { removeOdd(); ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream oout = new ObjectOutputStream(bout); try { oout.writeObject(map); oout.writeUTF("EOF"); } finally { oout.close(); } ByteArrayInputStream bin = new ByteArrayInputStream( bout.toByteArray()); ObjectInputStream oin = new ObjectInputStream(bin); try { testGet((IntHashMap<Integer>) oin.readObject()); assertEquals("EOF", oin.readUTF()); } finally { oin.close(); } } }