use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.
the class TestBitStream method testGolomb.
private void testGolomb(String expected, int div, int value) {
final StringBuilder buff = new StringBuilder();
Out o = new Out(null) {
@Override
public void writeBit(int bit) {
buff.append(bit == 0 ? '0' : '1');
}
};
o.writeGolomb(div, value);
int size = Out.getGolombSize(div, value);
String got = buff.toString();
assertEquals(size, got.length());
assertEquals(expected, got);
}
use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.
the class TestBitStream method testGolombRandomized.
private void testGolombRandomized() {
ByteArrayOutputStream out = new ByteArrayOutputStream();
Out bitOut = new Out(out);
Random r = new Random(1);
int len = 1000;
for (int i = 0; i < len; i++) {
int div = r.nextInt(100) + 1;
int value = r.nextInt(1000000);
bitOut.writeGolomb(div, value);
}
bitOut.flush();
bitOut.close();
byte[] data = out.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(data);
In bitIn = new In(in);
r.setSeed(1);
for (int i = 0; i < len; i++) {
int div = r.nextInt(100) + 1;
int value = r.nextInt(1000000);
int v = bitIn.readGolomb(div);
assertEquals("i=" + i + " div=" + div, value, v);
}
}
use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.
the class TestBitStream method testHuffmanRandomized.
private void testHuffmanRandomized() {
Random r = new Random(1);
int[] freq = new int[r.nextInt(200) + 1];
for (int i = 0; i < freq.length; i++) {
freq[i] = r.nextInt(1000) + 1;
}
int seed = r.nextInt();
r.setSeed(seed);
BitStream.Huffman huff = new BitStream.Huffman(freq);
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
BitStream.Out out = new BitStream.Out(byteOut);
for (int i = 0; i < 10000; i++) {
huff.write(out, r.nextInt(freq.length));
}
out.close();
BitStream.In in = new BitStream.In(new ByteArrayInputStream(byteOut.toByteArray()));
r.setSeed(seed);
for (int i = 0; i < 10000; i++) {
int expected = r.nextInt(freq.length);
assertEquals(expected, huff.read(in));
}
}
use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.
the class TestAnsCompression method testCompressionRate.
private void testCompressionRate() throws IOException {
byte[] data = new byte[1024 * 1024];
Random r = new Random(1);
for (int i = 0; i < data.length; i++) {
data[i] = (byte) (r.nextInt(4) * r.nextInt(4));
}
int[] freq = new int[256];
AnsCompression.countFrequencies(freq, data);
int lenAns = AnsCompression.encode(freq, data).length;
BitStream.Huffman huff = new BitStream.Huffman(freq);
ByteArrayOutputStream out = new ByteArrayOutputStream();
BitStream.Out o = new BitStream.Out(out);
for (byte x : data) {
huff.write(o, x & 255);
}
o.flush();
int lenHuff = out.toByteArray().length;
BinaryArithmeticStream.Huffman aHuff = new BinaryArithmeticStream.Huffman(freq);
out = new ByteArrayOutputStream();
BinaryArithmeticStream.Out o2 = new BinaryArithmeticStream.Out(out);
for (byte x : data) {
aHuff.write(o2, x & 255);
}
o2.flush();
int lenArithmetic = out.toByteArray().length;
assertTrue(lenAns < lenArithmetic);
assertTrue(lenArithmetic < lenHuff);
assertTrue(lenHuff < data.length);
}
use of org.h2.dev.util.BinaryArithmeticStream.Out in project h2database by h2database.
the class TestBinaryArithmeticStream method testPerformance.
private void testPerformance() throws IOException {
Random r = new Random();
// Profiler prof = new Profiler().startCollecting();
for (int seed = 0; seed < 10000; seed++) {
r.setSeed(seed);
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
Out out = new Out(byteOut);
int len = 100;
for (int i = 0; i < len; i++) {
boolean v = r.nextBoolean();
int prob = r.nextInt(BinaryArithmeticStream.MAX_PROBABILITY);
out.writeBit(v, prob);
}
out.flush();
r.setSeed(seed);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
In in = new In(byteIn);
for (int i = 0; i < len; i++) {
boolean expected = r.nextBoolean();
int prob = r.nextInt(BinaryArithmeticStream.MAX_PROBABILITY);
assertEquals(expected, in.readBit(prob));
}
}
// time = System.nanoTime() - time;
// System.out.println("time: " + TimeUnit.NANOSECONDS.toMillis(time));
// System.out.println(prof.getTop(5));
}
Aggregations