Search in sources :

Example 1 with Huffman

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);
    }
}
Also used : Random(java.util.Random) In(org.h2.dev.util.BinaryArithmeticStream.In) ByteArrayInputStream(java.io.ByteArrayInputStream) Huffman(org.h2.dev.util.BinaryArithmeticStream.Huffman) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Out(org.h2.dev.util.BinaryArithmeticStream.Out)

Example 2 with Huffman

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());
        }
    }
}
Also used : Random(java.util.Random) ByteArrayInputStream(java.io.ByteArrayInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) CompressTool(org.h2.tools.CompressTool) ByteArrayOutputStream(java.io.ByteArrayOutputStream)

Aggregations

ByteArrayInputStream (java.io.ByteArrayInputStream)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 Random (java.util.Random)2 InputStream (java.io.InputStream)1 OutputStream (java.io.OutputStream)1 Huffman (org.h2.dev.util.BinaryArithmeticStream.Huffman)1 In (org.h2.dev.util.BinaryArithmeticStream.In)1 Out (org.h2.dev.util.BinaryArithmeticStream.Out)1 CompressTool (org.h2.tools.CompressTool)1