KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > ozoneDB > DxLib > DiskHashTest


1 // You can redistribute this software and/or modify it under the terms of
2
// the Ozone Library License version 1 published by ozone-db.org.
3
//
4
// The original code and portions created by SMB are
5
// Copyright (C) 1997-@year@ by SMB GmbH. All rights reserved.
6
//
7
// $Id$
8

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 JavaDoc;
18 import java.io.File JavaDoc;
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 JavaDoc name) {
30         super(name);
31     }
32
33     public void testDiskHashTest() throws Exception JavaDoc {
34         //int n = Integer.valueOf(args[0]).intValue();
35
int n = 990;
36         int cacheBits = 8;
37         int bufferSize = 5;
38         log.debug(n + " elements");
39
40         String JavaDoc mapDir = System.getProperty("java.io.tmpdir")+ "/diskhash/map/";
41         File JavaDoc mapDirFile = new File JavaDoc(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 JavaDoc( i ), new Integer JavaDoc( i ) );
52         }
53
54         useMap(n);
55
56         map.close();
57
58         // test that reusing a map also works as expected
59
map.re_use();
60         map.setReusable(true);
61         useMap(n);
62
63 // testAll( map, n, bufferSize );
64
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 JavaDoc value = (Integer JavaDoc) map.elementForKey(new Integer JavaDoc(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 JavaDoc) 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 JavaDoc) 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 JavaDoc value = (Integer JavaDoc) map.elementForKey(new Integer JavaDoc(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 JavaDoc {
104         // add
105
long start = System.currentTimeMillis();
106         for (int i = 0; i < n; i++) {
107             map.addForKey(new Integer JavaDoc(i), new Integer JavaDoc(i));
108         }
109         log.debug("time (add): " + (System.currentTimeMillis() - start));
110
111         // re-read (buffered)
112
int nn = Math.min((bufferSize - 2) * 256, n);
113         start = System.currentTimeMillis();
114         for (int i = 0; i < nn; i++) {
115             Integer JavaDoc si = (Integer JavaDoc) map.elementForKey(new Integer JavaDoc(i));
116             assertEquals("corrupted", si, new Integer JavaDoc(i));
117         }
118         log.debug("time (re-read buffered: " + nn + "): " + (System.currentTimeMillis() - start));
119
120         // re-read (buffered)
121
start = System.currentTimeMillis();
122         for (int i = 0; i < nn; i++) {
123             Integer JavaDoc si = (Integer JavaDoc) map.elementForKey(new Integer JavaDoc(i));
124             assertEquals("corrupted", si, new Integer JavaDoc(i));
125         }
126         log.debug("time (re-read buffered: " + nn + "): " + (System.currentTimeMillis() - start));
127
128         // re-read
129
start = System.currentTimeMillis();
130         for (int i = 0; i < n; i++) {
131             Integer JavaDoc si = (Integer JavaDoc) map.elementForKey(new Integer JavaDoc(i));
132             assertEquals("corrupted", si, new Integer JavaDoc(i));
133         }
134         log.debug("time (re-read): " + (System.currentTimeMillis() - start));
135
136         // re-read
137
start = System.currentTimeMillis();
138         for (int i = 0; i < n; i++) {
139             Integer JavaDoc si = (Integer JavaDoc) map.elementForKey(new Integer JavaDoc(i));
140             assertEquals("corrupted", si, new Integer JavaDoc(i));
141         }
142         log.debug("time (re-read): " + (System.currentTimeMillis() - start));
143
144         // close
145
start = System.currentTimeMillis();
146         map.close();
147         log.debug("time (close): " + (System.currentTimeMillis() - start));
148
149         map.printStatistics();
150         // map.cleanFiles();
151
}
152
153
154     public void stress(DxMap map) {
155         Random JavaDoc rand = new Random JavaDoc(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                 // System.out.println ("add: " + index);
164
map.addForKey(new Integer JavaDoc(index), new Integer JavaDoc(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                 // System.out.println ("add: " + index);
170
if (map.elementForKey(new Integer JavaDoc(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                 // System.out.println ("remove: " + index);
178
map.removeForKey(new Integer JavaDoc(index));
179             }
180             log.debug("count:" + map.count());
181         }
182     }
183 }
184
Popular Tags