📄 diskhashtest.java
字号:
// You can redistribute this software and/or modify it under the terms of// the Ozone Library License version 1 published by ozone-db.org.//// The original code and portions created by SMB are// Copyright (C) 1997-@year@ by SMB GmbH. All rights reserved.//// $Id$package test.ozoneDB.DxLib;import org.ozoneDB.DxLib.DxDiskHashMap;import org.ozoneDB.DxLib.DxIterator;import org.ozoneDB.DxLib.DxMap;import org.ozoneDB.util.OzoneDebugLevel;import org.apache.log4j.Logger;import java.util.Random;import java.io.File;import test.OzoneTestCase;public class DiskHashTest extends AbstractTest { private static Logger log = Logger.getLogger(OzoneTestCase.class); private DxDiskHashMap map; public DiskHashTest(String name) { super(name); } public void testDiskHashTest() throws Exception { //int n = Integer.valueOf(args[0]).intValue(); int n = 990; int cacheBits = 8; int bufferSize = 5; log.debug(n + " elements"); String mapDir = System.getProperty("java.io.tmpdir")+ "/diskhash/map/"; File mapDirFile = new File(mapDir); mapDirFile.mkdirs(); log.debug("storing the DiskHashMap at " + mapDir); map = new DxDiskHashMap(mapDir, bufferSize, cacheBits, 8); log.debug( "creating..." ); for (int i=0; i<n; i++) { map.addForKey( new Integer( i ), new Integer( i ) ); } useMap(n); map.close(); // test that reusing a map also works as expected map.re_use(); map.setReusable(true); useMap(n);// testAll( map, n, bufferSize ); map.printStatistics(); map.cleanFiles(); } private void useMap(int n) { log.debug("accessing..."); for (int i = 0; i < n; i += 100) { Integer value = (Integer) map.elementForKey(new Integer(i)); assertNotNull(value); assertEquals("key-value does not match",value.intValue(), i); } log.debug("iterating..."); DxIterator it = map.iterator(); while (it.next() != null) { if (log.isEnabledFor(OzoneDebugLevel.DEBUG1)) { System.out.print(((Integer) it.key()).intValue() + " "); } } System.out.flush(); log.debug("iterating again..."); it = map.iterator(); while (it.next() != null) { if (log.isEnabledFor(OzoneDebugLevel.DEBUG1)) { System.out.print(((Integer) it.object()).intValue() + " "); } } System.out.flush(); log.debug("accessing..."); for (int i = 0; i < n; i += 100) { Integer value = (Integer) map.elementForKey(new Integer(i)); assertNotNull(value); assertEquals("key-value does not match",value.intValue(), i); } } public void testAll(DxDiskHashMap map, int n, int bufferSize) throws Exception { // add long start = System.currentTimeMillis(); for (int i = 0; i < n; i++) { map.addForKey(new Integer(i), new Integer(i)); } log.debug("time (add): " + (System.currentTimeMillis() - start)); // re-read (buffered) int nn = Math.min((bufferSize - 2) * 256, n); start = System.currentTimeMillis(); for (int i = 0; i < nn; i++) { Integer si = (Integer) map.elementForKey(new Integer(i)); assertEquals("corrupted", si, new Integer(i)); } log.debug("time (re-read buffered: " + nn + "): " + (System.currentTimeMillis() - start)); // re-read (buffered) start = System.currentTimeMillis(); for (int i = 0; i < nn; i++) { Integer si = (Integer) map.elementForKey(new Integer(i)); assertEquals("corrupted", si, new Integer(i)); } log.debug("time (re-read buffered: " + nn + "): " + (System.currentTimeMillis() - start)); // re-read start = System.currentTimeMillis(); for (int i = 0; i < n; i++) { Integer si = (Integer) map.elementForKey(new Integer(i)); assertEquals("corrupted", si, new Integer(i)); } log.debug("time (re-read): " + (System.currentTimeMillis() - start)); // re-read start = System.currentTimeMillis(); for (int i = 0; i < n; i++) { Integer si = (Integer) map.elementForKey(new Integer(i)); assertEquals("corrupted", si, new Integer(i)); } log.debug("time (re-read): " + (System.currentTimeMillis() - start)); // close start = System.currentTimeMillis(); map.close(); log.debug("time (close): " + (System.currentTimeMillis() - start)); map.printStatistics(); // map.cleanFiles(); } public void stress(DxMap map) { Random rand = new Random(System.currentTimeMillis()); for (int j = 0; j < 10; j++) { double gaussian = rand.nextGaussian(); int EX = (int) (Math.abs(gaussian) * 10000); log.debug("EX: " + EX); int VAR = 1000; for (int i = 0; i < 100; i++) { int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX); // System.out.println ("add: " + index); map.addForKey(new Integer(index), new Integer(index)); } int hitCount = 0; for (int i = 0; i < 500; i++) { int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX); // System.out.println ("add: " + index); if (map.elementForKey(new Integer(index)) != null) { hitCount++; } } log.debug("hit count:" + hitCount); for (int i = 0; i < 500; i++) { int index = (int) (Math.abs(rand.nextGaussian()) * VAR + EX); // System.out.println ("remove: " + index); map.removeForKey(new Integer(index)); } log.debug("count:" + map.count()); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -