1 9 package test.ozoneDB.DxLib; 10 11 import org.ozoneDB.DxLib.DxDiskHashMap; 12 import org.ozoneDB.DxLib.DxIterator; 13 import org.ozoneDB.DxLib.DxMap; 14 import org.ozoneDB.util.OzoneDebugLevel; 15 import org.apache.log4j.Logger; 16 17 import java.util.Random ; 18 import java.io.File ; 19 20 import test.OzoneTestCase; 21 22 23 public class DiskHashTest extends AbstractTest { 24 25 private static Logger log = Logger.getLogger(OzoneTestCase.class); 26 27 private DxDiskHashMap map; 28 29 public DiskHashTest(String name) { 30 super(name); 31 } 32 33 public void testDiskHashTest() throws Exception { 34 int n = 990; 36 int cacheBits = 8; 37 int bufferSize = 5; 38 log.debug(n + " elements"); 39 40 String mapDir = System.getProperty("java.io.tmpdir")+ "/diskhash/map/"; 41 File mapDirFile = new File (mapDir); 42 mapDirFile.mkdirs(); 43 log.debug("storing the DiskHashMap at " + mapDir); 44 45 map = new DxDiskHashMap(mapDir, bufferSize, cacheBits, 8); 46 47 48 49 log.debug( "creating..." ); 50 for (int i=0; i<n; i++) { 51 map.addForKey( new Integer ( i ), new Integer ( i ) ); 52 } 53 54 useMap(n); 55 56 map.close(); 57 58 map.re_use(); 60 map.setReusable(true); 61 useMap(n); 62 63 map.printStatistics(); 65 map.cleanFiles(); 66 } 67 68 private void useMap(int n) { 69 log.debug("accessing..."); 70 for (int i = 0; i < n; i += 100) { 71 Integer value = (Integer ) map.elementForKey(new Integer (i)); 72 assertNotNull(value); 73 assertEquals("key-value does not match",value.intValue(), i); 74 } 75 76 log.debug("iterating..."); 77 DxIterator it = map.iterator(); 78 while (it.next() != null) { 79 if (log.isEnabledFor(OzoneDebugLevel.DEBUG1)) { 80 System.out.print(((Integer ) it.key()).intValue() + " "); 81 } 82 } 83 System.out.flush(); 84 85 log.debug("iterating again..."); 86 it = map.iterator(); 87 while (it.next() != null) { 88 if (log.isEnabledFor(OzoneDebugLevel.DEBUG1)) { 89 System.out.print(((Integer ) it.object()).intValue() + " "); 90 } 91 } 92 System.out.flush(); 93 94 log.debug("accessing..."); 95 for (int i = 0; i < n; i += 100) { 96 Integer value = (Integer ) map.elementForKey(new Integer (i)); 97 assertNotNull(value); 98 assertEquals("key-value does not match",value.intValue(), i); 99 } 100 } 101 102 103 public void testAll(DxDiskHashMap map, int n, int bufferSize) throws Exception { 104 long start = System.currentTimeMillis(); 106 for (int i = 0; i < n; i++) { 107 map.addForKey(new Integer (i), new Integer (i)); 108 } 109 log.debug("time (add): " + (System.currentTimeMillis() - start)); 110 111 int nn = Math.min((bufferSize - 2) * 256, n); 113 start = System.currentTimeMillis(); 114 for (int i = 0; i < nn; i++) { 115 Integer si = (Integer ) map.elementForKey(new Integer (i)); 116 assertEquals("corrupted", si, new Integer (i)); 117 } 118 log.debug("time (re-read buffered: " + nn + "): " + (System.currentTimeMillis() - start)); 119 120 start = System.currentTimeMillis(); 122 for (int i = 0; i < nn; i++) { 123 Integer si = (Integer ) map.elementForKey(new Integer (i)); 124 assertEquals("corrupted", si, new Integer (i)); 125 } 126 log.debug("time (re-read buffered: " + nn + "): " + (System.currentTimeMillis() - start)); 127 128 start = System.currentTimeMillis(); 130 for (int i = 0; i < n; i++) { 131 Integer si = (Integer ) map.elementForKey(new Integer (i)); 132 assertEquals("corrupted", si, new Integer (i)); 133 } 134 log.debug("time (re-read): " + (System.currentTimeMillis() - start)); 135 136 start = System.currentTimeMillis(); 138 for (int i = 0; i < n; i++) { 139 Integer si = (Integer ) map.elementForKey(new Integer (i)); 140 assertEquals("corrupted", si, new Integer (i)); 141 } 142 log.debug("time (re-read): " + (System.currentTimeMillis() - start)); 143 144 start = System.currentTimeMillis(); 146 map.close(); 147 log.debug("time (close): " + (System.currentTimeMillis() - start)); 148 149 map.printStatistics(); 150 } 152 153 154 public void stress(DxMap map) { 155 Random rand = new Random (System.currentTimeMillis()); 156 for (int j = 0; j < 10; j++) { 157 double gaussian = rand.nextGaussian(); 158 int EX = (int) (Math.abs(gaussian) * 10000); 159 log.debug("EX: " + EX); 160 int VAR = 1000; 161 for (int i = 0; i < 100; i++) { 162 int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX); 163 map.addForKey(new Integer (index), new Integer (index)); 165 } 166 int hitCount = 0; 167 for (int i = 0; i < 500; i++) { 168 int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX); 169 if (map.elementForKey(new Integer (index)) != null) { 171 hitCount++; 172 } 173 } 174 log.debug("hit count:" + hitCount); 175 for (int i = 0; i < 500; i++) { 176 int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX); 177 map.removeForKey(new Integer (index)); 179 } 180 log.debug("count:" + map.count()); 181 } 182 } 183 } 184 | Popular Tags |