package org.mulgara.util.io; import java.io.File; import java.io.IOException; import junit.framework.TestCase; public class LLHashMapUnitTest extends TestCase { File f; LLHashMap map; protected void setUp() throws Exception { super.setUp(); f = new File("/tmp/i2i"); clean(f); map = new LLHashMap(f); map.clear(); } protected void tearDown() throws Exception { super.tearDown(); map.clear(); map.close(); clean(f); } public void testLLHashMapFile() throws IOException { File f = new File("/tmp/int2int"); clean(f); LLHashMap map = new LLHashMap(f); map.put(1, 11); map.put(2, 12); map.put(3, 13); assertEquals(11, map.get(1)); assertEquals(12, map.get(2)); assertEquals(13, map.get(3)); assertEquals(-1L, map.get(4)); assertEquals(null, map.get(Long.valueOf(4))); map.close(); assertEquals(37 * 16, f.length()); clean(f); } public void testLLHashMapFileFloatLong() throws IOException { File f = new File("/tmp/int2intl"); clean(f); LLHashMap map = new LLHashMap(f, 0.5f, 50L); map.put(1, 11); map.put(2, 12); map.put(3, 13); assertEquals(13, map.get(3)); assertEquals(12, map.get(2)); assertEquals(11, map.get(1)); assertEquals(-1L, map.get(4)); assertEquals(null, map.get(Long.valueOf(4))); map.close(); assertEquals(131 * 16, f.length()); clean(f); } public void testClear() { assertEquals(0, map.size()); map.put(1, 11); map.put(2, 12); map.put(3, 13); assertEquals(3, map.size()); assertEquals(13, map.get(3)); assertEquals(12, map.get(2)); assertEquals(11, map.get(1)); assertEquals(-1L, map.get(4)); assertEquals(null, map.get(Long.valueOf(4))); map.clear(); assertEquals(0, map.size()); assertEquals(-1L, map.get(3)); assertEquals(-1L, map.get(2)); assertEquals(-1L, map.get(1)); assertEquals(-1L, map.get(4)); assertEquals(null, map.get(Long.valueOf(4))); map.put(1, 11); map.put(2, 12); map.put(3, 13); assertEquals(3, map.size()); assertEquals(13, map.get(3)); assertEquals(12, map.get(2)); assertEquals(11, map.get(1)); assertEquals(-1L, map.get(4)); assertEquals(null, map.get(Long.valueOf(4))); } public void testContainsKeyObject() { map.put(1, 11); map.put(2, 12); map.put(3, 13); assertTrue(map.containsKey(Long.valueOf(1))); assertTrue(map.containsKey(Long.valueOf(2))); assertTrue(map.containsKey(Long.valueOf(3))); assertFalse(map.containsKey(Long.valueOf(4))); assertFalse(map.containsKey(Long.valueOf(0))); } public void testContainsKeyLong() { map.put(1, 11); map.put(2, 12); map.put(3, 13); assertTrue(map.containsKey(1)); assertTrue(map.containsKey(2)); assertTrue(map.containsKey(3)); assertFalse(map.containsKey(4)); assertFalse(map.containsKey(0)); } public void testContainsValueObject() { assertFalse(map.containsValue(Long.valueOf(11))); assertFalse(map.containsValue(Long.valueOf(0))); map.put(1, 11); map.put(2, 12); map.put(3, 13); assertTrue(map.containsValue(Long.valueOf(11))); assertFalse(map.containsValue(Long.valueOf(0))); } public void testContainsValueLong() { assertFalse(map.containsValue(11)); assertFalse(map.containsValue(0)); map.put(1, 11); map.put(2, 12); map.put(3, 13); assertTrue(map.containsValue(11)); assertFalse(map.containsValue(0)); } public void testEntrySet() { // fail("Not yet implemented"); } public void testGetObject() { // fail("Not yet implemented"); } public void testGetLong() { assertEquals(-1, map.get(1)); assertEquals(-1, map.get(11)); assertEquals(-1, map.get(0)); map.put(1, 11); map.put(2, 12); map.put(3, 13); assertEquals(11, map.get(1)); assertEquals(-1, map.get(11)); assertEquals(-1, map.get(0)); assertEquals(12, map.get(2)); assertEquals(13, map.get(3)); } public void testIsEmpty() { assertTrue(map.isEmpty()); map.put(1, 11); assertFalse(map.isEmpty()); map.put(2, 12); assertFalse(map.isEmpty()); map.put(3, 13); assertFalse(map.isEmpty()); map.clear(); assertTrue(map.isEmpty()); } public void testKeySet() { // fail("Not yet implemented"); } public void testPutLongLong() throws Exception { map.put(1, 11); map.put(2, 12); map.put(3, 13); map.put(0, 10); assertEquals(4, map.size()); assertEquals(11, map.get(1)); assertEquals(12, map.get(2)); assertEquals(13, map.get(3)); assertEquals(10, map.get(0)); assertEquals(-1L, map.get(4)); assertEquals(null, map.get(Long.valueOf(4))); } public void testRehash() throws Exception { File f = new File("/tmp/int2int_small"); clean(f); LLHashMap map = new LLHashMap(f); for (long i = 0L; i < 27L; i++) { map.put(i, i * i); } assertEquals(27, map.size()); for (long i = 0L; i < 27L; i++) { assertEquals(i * i, map.get(i)); } map.close(); assertEquals(37 * 16, f.length()); clean(f); } public void testHighLoad() throws Exception { File f = new File("/tmp/int2int_big"); clean(f); LLHashMap map = new LLHashMap(f); long i = 0; try { for (i = 0L; i < 10000L; i++) { map.put(i, i * i); } } catch (Exception ex) { System.err.println("Exception on: " + i); throw ex; } catch (Error e) { System.err.println("Error on: " + i); throw e; } assertEquals(10000L, map.size()); for (i = 0L; i < 10000L; i++) { assertEquals(i * i, map.get(i)); } map.close(); assertEquals(16411L * 16, f.length()); clean(f); } public void testExpHighLoad() throws Exception { File f = new File("/tmp/int2int_big2"); clean(f); LLHashMap map = new LLHashMap(f, 0.75f, 10000); long i = 0; try { for (i = 0L; i < 10000L; i++) { map.put(i, i * i); } } catch (Exception ex) { System.err.println("Exception on: " + i); throw ex; } catch (Error e) { System.err.println("Error on: " + i); throw e; } assertEquals(10000L, map.size()); for (i = 0L; i < 10000L; i++) { assertEquals(i * i, map.get(i)); } map.close(); assertEquals(16411L * 16, f.length()); clean(f); } public void testPutLongLong1() { // fail("Not yet implemented"); } public void testPutAll() { // fail("Not yet implemented"); } public void testRemoveObject() { // fail("Not yet implemented"); } public void testRemoveLong() { // fail("Not yet implemented"); } public void testSize() { assertEquals(0, map.size()); map.put(1, 11); assertEquals(1, map.size()); map.put(2, 12); assertEquals(2, map.size()); map.put(3, 13); assertEquals(3, map.size()); map.put(3, 14); assertEquals(3, map.size()); map.remove(1); assertEquals(2, map.size()); map.remove(1); assertEquals(2, map.size()); map.remove(2); assertEquals(1, map.size()); map.remove(3); assertEquals(0, map.size()); map.remove(3); assertEquals(0, map.size()); } public void testValues() { // fail("Not yet implemented"); } static void clean(File file) throws IOException { if (file.exists()) { file.delete(); File md = new File(file.getPath() + ".hmd"); if (md.exists()) md.delete(); } } }