package quickbase.test;
import gnu.trove.TIntIntHashMap;
import gnu.trove.TIntObjectHashMap;
import java.io.File;
import java.util.Random;
import quickbase.MultiMapDatabase;
import quickbase.exception.BasicFileOperationDatabaseException;
import quickbase.exception.DatabaseException;
import quickbase.exception.IgnoreExceptionsStrategy;
import quickbase.serializer.ByteArraySerializer;
import quickbase.serializer.StringSerializer;
import quickbase.service.IPersistedMap;
public class MixedMapTest {
private MultiMapDatabase multi;
private IPersistedMap<String, byte[]> sbMap;
private IPersistedMap<byte[], String> bsMap;
public MixedMapTest() throws BasicFileOperationDatabaseException {
multi = new MultiMapDatabase(new IgnoreExceptionsStrategy(), new File("test"), "multi");
sbMap = multi.createMap((byte) 0, new StringSerializer(), new ByteArraySerializer());
bsMap = multi.createMap((byte) 1, new ByteArraySerializer(), new StringSerializer());
}
public void bigRandomTest() throws DatabaseException {
long t0 = System.nanoTime();
Random rand = new Random(7);
TIntObjectHashMap<String> controlMap2 = new TIntObjectHashMap<String>();
TIntIntHashMap controlMap = new TIntIntHashMap();
for (int i = 0; i < 100000; i++) {
int item = rand.nextInt(10000);
String name = "Item " + item;
switch (rand.nextInt(9)) {
case 0:
int len = rand.nextInt(100000);
byte[] data = new byte[len];
sbMap.put(name, data);
controlMap.put(item, len);
break;
case 1:
byte[] data2 = sbMap.get(name);
if (data2 == null) {
assert !controlMap.contains(item);
} else {
assert data2.length == controlMap.get(item);
}
break;
case 2:
assert controlMap.contains(item) == sbMap.contains(name);
break;
case 3:
sbMap.remove(name);
controlMap.remove(item);
break;
case 4:
byte[] keyData = java.nio.ByteBuffer.allocate(4).putInt(item).array();
bsMap.put(keyData, name);
controlMap2.put(item, name);
break;
case 5:
byte[] keyData2 = java.nio.ByteBuffer.allocate(4).putInt(item).array();
String string = bsMap.get(keyData2);
if (string == null) {
assert !controlMap2.contains(item);
} else {
assert string.equals(controlMap2.get(item));
}
break;
case 6:
byte[] keyData3 = java.nio.ByteBuffer.allocate(4).putInt(item).array();
assert controlMap2.contains(item) == bsMap.contains(keyData3);
break;
case 7:
byte[] keyData4 = java.nio.ByteBuffer.allocate(4).putInt(item).array();
bsMap.remove(keyData4);
controlMap2.remove(item);
break;
case 8:
System.out.println("Round " + i + " " + multi.getStats().getFillRatio());
default:
}
}
long t1 = System.nanoTime();
System.out.println((t1 - t0) / 1000 / 1000);
multi.close();
long size = 0;
for (int val : controlMap.getValues()) {
size += val;
}
System.out.println(size);
}
public static void main(String[] args) throws DatabaseException {
MixedMapTest test = new MixedMapTest();
test.bigRandomTest();
}
}