use of org.h2.dev.util.BinaryArithmeticStream.Huffman in project h2database by h2database.
the class TestBinaryArithmeticStream method testHuffmanRandomized.
private void testHuffmanRandomized() throws IOException {
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);
Huffman huff = new Huffman(freq);
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
Out out = new Out(byteOut);
for (int i = 0; i < 10000; i++) {
huff.write(out, r.nextInt(freq.length));
}
out.flush();
In in = new In(new ByteArrayInputStream(byteOut.toByteArray()));
r.setSeed(seed);
for (int i = 0; i < 10000; i++) {
int expected = r.nextInt(freq.length);
int got = huff.read(in);
assertEquals(expected, got);
}
}
use of org.h2.dev.util.BinaryArithmeticStream.Huffman in project h2database by h2database.
the class TestCompress method testByteArray.
private void testByteArray(int len) throws IOException {
Random r = new Random(len);
for (int pattern = 0; pattern < 4; pattern++) {
byte[] b = new byte[len];
switch(pattern) {
case 0:
// leave empty
break;
case 1:
{
r.nextBytes(b);
break;
}
case 2:
{
for (int x = 0; x < len; x++) {
b[x] = (byte) (x & 10);
}
break;
}
case 3:
{
for (int x = 0; x < len; x++) {
b[x] = (byte) (x / 10);
}
break;
}
default:
}
if (r.nextInt(2) < 1) {
for (int x = 0; x < len; x++) {
if (r.nextInt(20) < 1) {
b[x] = (byte) (r.nextInt(255));
}
}
}
CompressTool utils = CompressTool.getInstance();
// level 9 is highest, strategy 2 is huffman only
for (String a : new String[] { "LZF", "No", "Deflate", "Deflate level 9 strategy 2" }) {
long time = System.nanoTime();
byte[] out = utils.compress(b, a);
byte[] test = utils.expand(out);
if (testPerformance) {
System.out.println("p:" + pattern + " len: " + out.length + " time: " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - time) + " " + a);
}
assertEquals(b.length, test.length);
assertEquals(b, test);
Arrays.fill(test, (byte) 0);
CompressTool.expand(out, test, 0);
assertEquals(b, test);
}
for (String a : new String[] { null, "LZF", "DEFLATE", "ZIP", "GZIP" }) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
OutputStream out2 = CompressTool.wrapOutputStream(out, a, "test");
IOUtils.copy(new ByteArrayInputStream(b), out2);
out2.close();
InputStream in = new ByteArrayInputStream(out.toByteArray());
in = CompressTool.wrapInputStream(in, a, "test");
out.reset();
IOUtils.copy(in, out);
assertEquals(b, out.toByteArray());
}
}
}
Aggregations