/* * BufferTestCase.java */ /* * Copyright (c) 2005 by Matthias Pfisterer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.tritonus.test.tritonus.lowlevel.pogg; import junit.framework.TestCase; import org.tritonus.lowlevel.pogg.Buffer; /** Tests for class org.tritonus.lowlevel.pogg.Buffer. */ public class BufferTestCase extends TestCase { private static final int mask[]= { 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff }; private static final int[] testbuffer1 = { 18, 12, 103948, 4325, 543, 76, 432, 52, 3, 65, 4, 56, 32, 42, 34, 21, 1, 23, 32, 546, 456, 7, 567, 56, 8, 8, 55, 3, 52, 342, 341, 4, 265, 7, 67, 86, 2199, 21, 7, 1, 5, 1, 4 }; private static final int test1size = testbuffer1.length; private static final int testbuffer2[]= { 216531625, 1237861823, 56732452, 131, 3212421, 12325343, 34547562, 12313212, 1233432, 534, 5, 346435231, 14436467, 7869299, 76326614, 167548585, 85525151, 0, 12321, 1, 349528352 }; private static final int test2size=21; private static final int testbuffer3[]= { 1, 0, 14, 0, 1, 0, 12, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 30, 1, 1, 1, 0, 0, 1, 0, 0, 0, 12, 0, 11, 0, 1, 0, 0, 1 }; private static final int test3size=56; private static final int large[]= { 2136531625, 2137861823, 56732452, 131, 3212421, 12325343, 34547562, 12313212, 1233432, 534, 5, 2146435231, 14436467, 7869299, 76326614, 167548585, 85525151, 0, 12321, 1, 2146528352 }; private static final int onesize=33; private static byte[] one = { (byte) 146, 25, 44, (byte) 151, (byte) 195, 15, (byte) 153, (byte) 176, (byte) 233, (byte) 131, (byte) 196, 65, 85, (byte) 172, 47, 40, 34, (byte) 242, (byte) 223, (byte) 136, 35, (byte) 222, (byte) 211, 86, (byte) 171, 50, (byte) 225, (byte) 135, (byte) 214, 75, (byte) 172, (byte) 223, 4 }; private static final int twosize=6; private static byte[] two = { 61, (byte) 255, (byte) 255, (byte) 251, (byte) 231, 29 }; private static final int threesize=54; private static final byte[] three = { (byte) 169, 2, (byte) 232, (byte) 252, 91, (byte) 132, (byte) 156, 36, 89, 13, 123, (byte) 176, (byte) 144, 32, (byte) 254, (byte) 142, (byte) 224, 85, 59, 121, (byte) 144, 79, 124, 23, 67, 90, 90, (byte) 216, 79, 23, 83, 58, (byte) 135, (byte) 196, 61, 55, (byte) 129, (byte) 183, 54, 101, 100, (byte) 170, 37, 127, 126, 10, 100, 52, 4, 14, 18, 86, 77, 1 }; private static final int foursize=38; private static byte[] four = { 18, 6, (byte) 163, (byte) 252, 97, (byte) 194, 104, (byte) 131, 32, 1, 7, 82, (byte) 137, 42, (byte) 129, 11, 72, (byte) 132, 60, (byte) 220, 112, 8, (byte) 196, 109, 64, (byte) 179, 86, 9, (byte) 137, (byte) 195, (byte) 208, 122, (byte) 169, 28, 2, (byte) 133, 0, 1 }; private static final int fivesize=45; private static final byte[] five = { (byte) 169, 2, (byte) 126, (byte) 139, (byte) 144, (byte) 172, 30, 4, 80, 72, (byte) 240, 59, (byte) 130, (byte) 218, 73, 62, (byte) 241, 24, (byte) 210, 44, 4, 20, 0, (byte) 248, 116, 49, (byte) 135, 100, 110, (byte) 130, (byte) 181, (byte) 169, 84, 75, (byte) 159, 2, 1, 0, (byte) 132, (byte) 192, 8, 0, 0, 18, 22 }; private static final int sixsize=7; private static final byte[] six = { 17, (byte) 177, (byte) 170, (byte) 242, (byte) 169, 19, (byte) 148 }; private Buffer o; private Buffer r; public BufferTestCase(String strName) { super(strName); } private static int ilog(int v) { int ret = 0; while (v > 0) { ret++; v >>>= 1; } return ret; } private void cliptest(int[] b, int bits, byte[] comp,int compsize) { int bytes; int i; byte[] buffer; o.reset(); for (i = 0; i < b.length; i++) { o.write(b[i], (bits != 0) ? bits : ilog(b[i])); } buffer = o.getBuffer(); bytes = o.bytes(); assertEquals("wrong number of bytes!\n", compsize, bytes); for (i = 0; i < bytes; i++) { assertEquals("wrote incorrect value!\n", comp[i], buffer[i]); { //for (i = 0; i < bytes; i++) //fprintf(stderr,"%x %x\n",(int)buffer[i],(int)comp[i]); } } r.readInit(buffer, bytes); for (i = 0; i < b.length; i++) { int tbit = (bits != 0) ? bits : ilog(b[i]); assertTrue("out of data!\n", r.look(tbit) != -1); assertEquals("looked at incorrect value!\n", b[i] & mask[tbit], r.look(tbit)); if (tbit == 1) assertEquals("looked at single bit incorrect value!\n", b[i] & mask[tbit], r.look1()); if (tbit == 1) { assertEquals("read incorrect single bit value!\n", b[i] & mask[tbit], r.read1()); } else { assertEquals("read incorrect value!\n", b[i] & mask[tbit], r.read(tbit)); } } assertTrue("leftover bytes after read!\n", r.bytes() == bytes); } public void testBuffer() throws Exception { byte[] buffer; int bytes,i; // TODO: should free them o = new Buffer(); r = new Buffer(); /* Test read/write together */ /* Later we test against pregenerated bitstreams */ o.writeInit(); //fprintf(stderr,"\nSmall preclipped packing (LSb): "); cliptest(testbuffer1, 0,one,onesize); //fprintf(stderr,"ok."); // fprintf(stderr,"\nNull bit call (LSb): "); cliptest(testbuffer3, 0,two,twosize); // fprintf(stderr,"ok."); // fprintf(stderr,"\nLarge preclipped packing (LSb): "); cliptest(testbuffer2, 0,three,threesize); // fprintf(stderr,"ok."); // fprintf(stderr,"\n32 bit preclipped packing (LSb): "); o.reset(); for (i = 0; i < test2size; i++) { o.write(large[i], 32); } buffer = o.getBuffer(); bytes = o.bytes(); r.readInit(buffer, bytes); for (i = 0; i < test2size; i++) { assertTrue("out of data. failed!", r.look(32) != -1); assertEquals("read incorrect value!\n", large[i], r.look(32)); { // fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpack_look(&r, 32),large[i], // oggpack_look(&r, 32),large[i]); } r.adv(32); } assertEquals("leftover bytes after read!\n", bytes, r.bytes()); // fprintf(stderr,"ok."); // fprintf(stderr,"\nSmall unclipped packing (LSb): "); cliptest(testbuffer1, 7,four,foursize); // fprintf(stderr,"ok."); // fprintf(stderr,"\nLarge unclipped packing (LSb): "); cliptest(testbuffer2, 17,five,fivesize); // fprintf(stderr,"ok."); // fprintf(stderr,"\nSingle bit unclipped packing (LSb): "); cliptest(testbuffer3, 1,six,sixsize); // fprintf(stderr,"ok."); // fprintf(stderr,"\nTesting read past end (LSb): "); r.readInit(new byte[8], 8); for (i = 0; i < 64; i++) { assertEquals("failed; got -1 prematurely.\n", 0, r.read(1)); } assertEquals("failed; lookahead past end without -1.\n", -1, r.look(1)); assertEquals("failed; read past end without -1.\n", -1, r.read(1)); r.readInit(new byte[8], 8); assertEquals("failed 2; got -1 prematurely.\n", 0, r.read(30)); assertEquals("failed 2; got -1 prematurely.\n", 0, r.read(16)); assertEquals("failed 3; got -1 prematurely.\n", 0, r.look(18)); assertEquals("failed 3; got -1 prematurely.\n", 0, r.look(18)); assertTrue("failed; read past end without -1.\n", r.look(19) == -1 && r.look(19) == -1); assertEquals("failed; read past end without -1.\n", -1, r.look(32)); // fprintf(stderr,"ok.\n"); } } /*** BufferTestCase.java ***/