@Test public void testUncompressed() throws Exception { OutputCollector collect = new OutputCollector(); OutStream out = new OutStream("test", 100, null, collect); PositionCollector[] positions = new PositionCollector[1024]; for (int i = 0; i < 1024; ++i) { positions[i] = new PositionCollector(); out.getPosition(positions[i]); out.write(i); } out.flush(); assertEquals(1024, collect.buffer.size()); for (int i = 0; i < 1024; ++i) { assertEquals((byte) i, collect.buffer.get(i)); } ByteBuffer inBuf = ByteBuffer.allocate(collect.buffer.size()); collect.buffer.setByteBuffer(inBuf, 0, collect.buffer.size()); inBuf.flip(); InStream in = InStream.create( "test", new ByteBuffer[] {inBuf}, new long[] {0}, inBuf.remaining(), null, 100); assertEquals( "uncompressed stream test position: 0 length: 1024" + " range: 0 offset: 0 limit: 0", in.toString()); for (int i = 0; i < 1024; ++i) { int x = in.read(); assertEquals(i & 0xff, x); } for (int i = 1023; i >= 0; --i) { in.seek(positions[i]); assertEquals(i & 0xff, in.read()); } }
@Test public void testCompressed() throws Exception { OutputCollector collect = new OutputCollector(); CompressionCodec codec = new ZlibCodec(); OutStream out = new OutStream("test", 300, codec, collect); PositionCollector[] positions = new PositionCollector[1024]; for (int i = 0; i < 1024; ++i) { positions[i] = new PositionCollector(); out.getPosition(positions[i]); out.write(i); } out.flush(); assertEquals("test", out.toString()); assertEquals(961, collect.buffer.size()); ByteBuffer inBuf = ByteBuffer.allocate(collect.buffer.size()); collect.buffer.setByteBuffer(inBuf, 0, collect.buffer.size()); inBuf.flip(); InStream in = InStream.create( "test", new ByteBuffer[] {inBuf}, new long[] {0}, inBuf.remaining(), codec, 300); assertEquals( "compressed stream test position: 0 length: 961 range: 0" + " offset: 0 limit: 0 range 0 = 0 to 961", in.toString()); for (int i = 0; i < 1024; ++i) { int x = in.read(); assertEquals(i & 0xff, x); } assertEquals(0, in.available()); for (int i = 1023; i >= 0; --i) { in.seek(positions[i]); assertEquals(i & 0xff, in.read()); } }
@Test public void testUncompressedDisjointBuffers() throws Exception { OutputCollector collect = new OutputCollector(); OutStream out = new OutStream("test", 400, null, collect); PositionCollector[] positions = new PositionCollector[1024]; DataOutput stream = new DataOutputStream(out); for (int i = 0; i < 1024; ++i) { positions[i] = new PositionCollector(); out.getPosition(positions[i]); stream.writeInt(i); } out.flush(); assertEquals("test", out.toString()); assertEquals(4096, collect.buffer.size()); ByteBuffer[] inBuf = new ByteBuffer[3]; inBuf[0] = ByteBuffer.allocate(1100); inBuf[1] = ByteBuffer.allocate(2200); inBuf[2] = ByteBuffer.allocate(1100); collect.buffer.setByteBuffer(inBuf[0], 0, 1024); collect.buffer.setByteBuffer(inBuf[1], 1024, 2048); collect.buffer.setByteBuffer(inBuf[2], 3072, 1024); for (int i = 0; i < inBuf.length; ++i) { inBuf[i].flip(); } InStream in = InStream.create("test", inBuf, new long[] {0, 1024, 3072}, 4096, null, 400); assertEquals( "uncompressed stream test position: 0 length: 4096" + " range: 0 offset: 0 limit: 0", in.toString()); DataInputStream inStream = new DataInputStream(in); for (int i = 0; i < 1024; ++i) { int x = inStream.readInt(); assertEquals(i, x); } assertEquals(0, in.available()); for (int i = 1023; i >= 0; --i) { in.seek(positions[i]); assertEquals(i, inStream.readInt()); } in = InStream.create( "test", new ByteBuffer[] {inBuf[1], inBuf[2]}, new long[] {1024, 3072}, 4096, null, 400); inStream = new DataInputStream(in); positions[256].reset(); in.seek(positions[256]); for (int i = 256; i < 1024; ++i) { assertEquals(i, inStream.readInt()); } in = InStream.create( "test", new ByteBuffer[] {inBuf[0], inBuf[2]}, new long[] {0, 3072}, 4096, null, 400); inStream = new DataInputStream(in); positions[768].reset(); for (int i = 0; i < 256; ++i) { assertEquals(i, inStream.readInt()); } in.seek(positions[768]); for (int i = 768; i < 1024; ++i) { assertEquals(i, inStream.readInt()); } }
@Test public void testDisjointBuffers() throws Exception { OutputCollector collect = new OutputCollector(); CompressionCodec codec = new ZlibCodec(); OutStream out = new OutStream("test", 400, codec, collect); PositionCollector[] positions = new PositionCollector[1024]; DataOutput stream = new DataOutputStream(out); for (int i = 0; i < 1024; ++i) { positions[i] = new PositionCollector(); out.getPosition(positions[i]); stream.writeInt(i); } out.flush(); assertEquals("test", out.toString()); assertEquals(1674, collect.buffer.size()); ByteBuffer[] inBuf = new ByteBuffer[3]; inBuf[0] = ByteBuffer.allocate(500); inBuf[1] = ByteBuffer.allocate(1200); inBuf[2] = ByteBuffer.allocate(500); collect.buffer.setByteBuffer(inBuf[0], 0, 483); collect.buffer.setByteBuffer(inBuf[1], 483, 1625 - 483); collect.buffer.setByteBuffer(inBuf[2], 1625, 1674 - 1625); for (int i = 0; i < inBuf.length; ++i) { inBuf[i].flip(); } InStream in = InStream.create("test", inBuf, new long[] {0, 483, 1625}, 1674, codec, 400); assertEquals( "compressed stream test position: 0 length: 1674 range: 0" + " offset: 0 limit: 0 range 0 = 0 to 483;" + " range 1 = 483 to 1142; range 2 = 1625 to 49", in.toString()); DataInputStream inStream = new DataInputStream(in); for (int i = 0; i < 1024; ++i) { int x = inStream.readInt(); assertEquals(i, x); } assertEquals(0, in.available()); for (int i = 1023; i >= 0; --i) { in.seek(positions[i]); assertEquals(i, inStream.readInt()); } in = InStream.create( "test", new ByteBuffer[] {inBuf[1], inBuf[2]}, new long[] {483, 1625}, 1674, codec, 400); inStream = new DataInputStream(in); positions[303].reset(); in.seek(positions[303]); for (int i = 303; i < 1024; ++i) { assertEquals(i, inStream.readInt()); } in = InStream.create( "test", new ByteBuffer[] {inBuf[0], inBuf[2]}, new long[] {0, 1625}, 1674, codec, 400); inStream = new DataInputStream(in); positions[1001].reset(); for (int i = 0; i < 300; ++i) { assertEquals(i, inStream.readInt()); } in.seek(positions[1001]); for (int i = 1001; i < 1024; ++i) { assertEquals(i, inStream.readInt()); } }