package org.xbib.io.compress.bzip2;
import static org.junit.Assert.*;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import org.junit.Test;
/**
* Tests BitInputStream
*/
public class BZip2BitInputStreamTests {
// Boolean
/**
* Test reading 8 zeroes
* @throws java.io.IOException
*/
@Test
public void testBooleanFalse8() throws IOException {
byte[] testData = { 0 };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
for (int i = 0; i < 8; i++) {
assertFalse (inputStream.readBoolean());
}
}
/**
* Test reading 8 ones
* @throws java.io.IOException
*/
@Test
public void testBooleanTrue8() throws IOException {
byte[] testData = { (byte)0xff };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
for (int i = 0; i < 8; i++) {
assertTrue (inputStream.readBoolean());
}
}
/**
* Test reading a single 1 in any position as a boolean
* @throws java.io.IOException
*/
@Test
public void testBooleanSingleOne() throws IOException {
for (int i = 0; i < 8; i++) {
byte[] testData = { (byte)(1 << (7 - i)) };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
for (int j = 0; j < 8; j++) {
if (j == i) {
assertTrue (inputStream.readBoolean());
} else {
assertFalse (inputStream.readBoolean());
}
}
}
}
/**
* Test reaching the end of the stream reading a boolean
* @throws java.io.IOException
*/
@Test(expected=IOException.class)
public void testBooleanEndOfStream() throws IOException {
byte[] testData = { };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
inputStream.readBoolean();
}
// Unary
/**
* Test reading unary 0
* @throws java.io.IOException
*/
@Test
public void testUnaryZero() throws IOException {
byte[] testData = { 0x00 };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
assertEquals (0, inputStream.readUnary());
}
/**
* Test reading unary 0
* @throws java.io.IOException
*/
@Test
public void testUnaryOne() throws IOException {
byte[] testData = { (byte)(1 << 7) };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
assertEquals (1, inputStream.readUnary());
}
/**
* Test reading unary 0
* @throws java.io.IOException
*/
@Test
public void testUnary31() throws IOException {
byte[] testData = { (byte)0xff, (byte)0xff, (byte)0xff, (byte)0xfe };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
assertEquals (31, inputStream.readUnary());
}
/**
* Test reaching the end of the stream reading a unary number
* @throws java.io.IOException
*/
@Test(expected=IOException.class)
public void testUnaryEndOfStream() throws IOException {
byte[] testData = { };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
inputStream.readUnary();
}
// Bits
/**
* Test reading a single 0 as bits
* @throws java.io.IOException
*/
@Test
public void testBits1_0() throws IOException {
byte[] testData = { (byte)0x00 };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
assertEquals (0, inputStream.readBits(1));
}
/**
* Test reading a single 1 as bits
* @throws java.io.IOException
*/
@Test
public void testBits1_1() throws IOException {
byte[] testData = { (byte)(1 << 7) };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
assertEquals (1, inputStream.readBits(1));
}
/**
* Test reading 23 bits
* @throws java.io.IOException
*/
@Test
public void testBits23() throws IOException {
byte[] testData = { 0x02, 0x03, 0x04 };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
assertEquals (0x020304 >> 1, inputStream.readBits(23));
}
/**
* Test reaching the end of the stream reading bits
* @throws java.io.IOException
*/
@Test(expected=IOException.class)
public void testBitsEndOfStream() throws IOException {
byte[] testData = { };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
inputStream.readBits(1);
}
// Integer
/**
* Test reading an integer
* @throws java.io.IOException
*/
@Test
public void testInteger() throws IOException {
byte[] testData = { 0x12, 0x34, 0x56, 0x78 };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
assertEquals (0x12345678, inputStream.readInteger());
}
/**
* Test reaching the end of the stream reading an integer
* @throws java.io.IOException
*/
@Test(expected=IOException.class)
public void testIntegerEndOfStream() throws IOException {
byte[] testData = { };
BZip2BitInputStream inputStream = new BZip2BitInputStream (new ByteArrayInputStream (testData));
inputStream.readInteger();
}
}