package edu.berkeley.cs.succinct.util.stream;
import junit.framework.TestCase;
import org.apache.hadoop.fs.FSDataInputStream;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.nio.LongBuffer;
import java.nio.ShortBuffer;
public class RandomAccessByteStreamTest extends TestCase {
public void testGet() throws Exception {
ByteBuffer buf = ByteBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put((byte) i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 10);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.get());
}
}
public void testGet1() throws Exception {
ByteBuffer buf = ByteBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put((byte) i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 10);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.get(i));
}
}
public void testGetShort() throws Exception {
ShortBuffer buf = ShortBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put((short) i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 20);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.getShort());
}
}
public void testGetShort1() throws Exception {
ShortBuffer buf = ShortBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put((short) i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 20);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.getShort(i * 2));
}
}
public void testGetInt() throws Exception {
IntBuffer buf = IntBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put(i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 40);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.getInt());
}
}
public void testGetInt1() throws Exception {
IntBuffer buf = IntBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put(i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 40);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.getInt(i * 4));
}
}
public void testGetLong() throws Exception {
LongBuffer buf = LongBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put(i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 80);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.getLong());
}
}
public void testGetLong1() throws Exception {
LongBuffer buf = LongBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put(i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 80);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.getLong(i * 8));
}
}
public void testPosition() throws Exception {
ByteBuffer buf = ByteBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put((byte) i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 10);
bs.position(3);
assertEquals(bs.position(), 3);
}
public void testRewind() throws Exception {
ByteBuffer buf = ByteBuffer.allocate(10);
for (int i = 0; i < 10; i++) {
buf.put((byte) i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 10);
bs.position(3);
bs.rewind();
assertEquals(0, bs.position());
}
public void testOffsetBeginning() throws Exception {
ByteBuffer buf = ByteBuffer.allocate(20);
for (int i = 0; i < 20; i++) {
buf.put((byte) i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 10, 10);
for (int i = 10; i < 20; i++) {
assertEquals((byte) i, bs.get());
}
bs.rewind();
assertEquals(0, bs.position());
for (int i = 0; i < 10; i++) {
assertEquals((byte) (i + 10), bs.get(i));
}
}
public void testAsIntStream() throws Exception {
IntBuffer buf = IntBuffer.allocate(20);
for (int i = 0; i < 20; i++) {
buf.put(i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 80);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.getInt());
}
RandomAccessIntStream intStream = bs.asIntStream();
for (int i = 0; i < 10; i++) {
assertEquals((i + 10), intStream.get());
}
intStream.rewind();
for (int i = 0; i < 10; i++) {
assertEquals((i + 10), intStream.get(i));
}
}
public void testAsLongStream() throws Exception {
LongBuffer buf = LongBuffer.allocate(20);
for (int i = 0; i < 20; i++) {
buf.put(i);
}
FSDataInputStream is = TestUtils.getStream(buf);
RandomAccessByteStream bs = new RandomAccessByteStream(is, 0, 160);
for (int i = 0; i < 10; i++) {
assertEquals(i, bs.getLong());
}
RandomAccessLongStream longStream = bs.asLongStream();
for (int i = 0; i < 10; i++) {
assertEquals((i + 10), longStream.get());
}
longStream.rewind();
for (int i = 0; i < 10; i++) {
assertEquals((i + 10), longStream.get(i));
}
}
}