package com.github.believe3301.nonheapdb.test;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Random;
import com.github.believe3301.nonheapdb.Util;
import junit.framework.TestCase;
public class VarintTest extends TestCase {
public VarintTest(final String name) {
super(name);
}
public void testVarint() {
byte[] array = new byte[10];
ByteBuffer buffer = ByteBuffer.wrap(array);
for (int i = 0; i <= Short.MAX_VALUE; i++) {
testVarint(buffer, i);
}
testVarint(buffer, Integer.MAX_VALUE / 2);
testVarint(buffer, Integer.MAX_VALUE -1);
testVarint(buffer, Integer.MAX_VALUE);
for (int i = 0; i <= Short.MAX_VALUE; i++) {
testVarLong(buffer, (long)i);
}
testVarLong(buffer, (long)Integer.MAX_VALUE / 2);
testVarLong(buffer, (long)Integer.MAX_VALUE -1);
testVarLong(buffer, (long)Integer.MAX_VALUE);
testVarLong(buffer, (long)Integer.MAX_VALUE +1);
testVarLong(buffer, (long)Long.MAX_VALUE / 2);
testVarLong(buffer, (long)Long.MAX_VALUE -1);
testVarLong(buffer, (long)Long.MAX_VALUE);
//test write more data
array = new byte[50];
buffer = ByteBuffer.wrap(array);
Random ran = new Random();
ArrayList<Integer> values = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
int value = ran.nextInt(Integer.MAX_VALUE) + 1;
Util.writeVarInt(value, buffer);
values.add(value);
}
buffer.flip();
for (int i = 0; i < 10; i++) {
int value = Util.readVarInt(buffer);
assertEquals("read seq failed",new Integer(value), values.get(i));
}
}
private void testVarLong(ByteBuffer buffer, long l) {
Util.writeVarLong(l, buffer);
buffer.flip();
assertEquals("read failed", Util.readVarLong(buffer) ,l);
byte[] arr = Util.writeVarLong(l);
assert arr.length == buffer.limit();
assert Util.readVarLong(arr) == l;
buffer.clear();
}
private void testVarint(ByteBuffer buffer, int i) {
Util.writeVarInt(i, buffer);
buffer.flip();
assertEquals("read failed", Util.readVarInt(buffer) ,i);
byte[] arr = Util.writeVarInt(i);
assert arr.length == buffer.limit();
assert Util.readVarInt(arr) == i;
buffer.clear();
}
public void testHexDump() {
String s = "helloworld,fuck your mother, suck my dick";
System.out.println(Util.hexDump(s.getBytes(), 0, s.length()));
}
}