package FlexibleEncoding.ORC;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.math.BigInteger;
//import org.apache.hadoop.hive.ql.io.orc.SerializationUtils;
//import org.apache.hadoop.hive.ql.io.orc.TestSerializationUtils;
import org.junit.Test;
public class TestSerializationUtils {
private InputStream fromBuffer(ByteArrayOutputStream buffer) {
return new ByteArrayInputStream(buffer.toByteArray());
}
@Test
public void testDoubles() throws Exception {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
SerializationUtils.writeDouble(buffer, 1343822337.759);
assertEquals(1343822337.759,
SerializationUtils.readDouble(fromBuffer(buffer)), 0.0001);
}
@Test
public void testBigIntegers() throws Exception {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
SerializationUtils.writeBigInteger(buffer, BigInteger.valueOf(0));
assertArrayEquals(new byte[]{0}, buffer.toByteArray());
assertEquals(0L,
SerializationUtils.readBigInteger(fromBuffer(buffer)).longValue());
buffer.reset();
SerializationUtils.writeBigInteger(buffer, BigInteger.valueOf(1));
assertArrayEquals(new byte[]{2}, buffer.toByteArray());
assertEquals(1L,
SerializationUtils.readBigInteger(fromBuffer(buffer)).longValue());
buffer.reset();
SerializationUtils.writeBigInteger(buffer, BigInteger.valueOf(-1));
assertArrayEquals(new byte[]{1}, buffer.toByteArray());
assertEquals(-1L,
SerializationUtils.readBigInteger(fromBuffer(buffer)).longValue());
buffer.reset();
SerializationUtils.writeBigInteger(buffer, BigInteger.valueOf(50));
assertArrayEquals(new byte[]{100}, buffer.toByteArray());
assertEquals(50L,
SerializationUtils.readBigInteger(fromBuffer(buffer)).longValue());
buffer.reset();
SerializationUtils.writeBigInteger(buffer, BigInteger.valueOf(-50));
assertArrayEquals(new byte[]{99}, buffer.toByteArray());
assertEquals(-50L,
SerializationUtils.readBigInteger(fromBuffer(buffer)).longValue());
for(int i=-8192; i < 8192; ++i) {
buffer.reset();
SerializationUtils.writeBigInteger(buffer, BigInteger.valueOf(i));
assertEquals("compare length for " + i,
i >= -64 && i < 64 ? 1 : 2, buffer.size());
assertEquals("compare result for " + i,
i, SerializationUtils.readBigInteger(fromBuffer(buffer)).intValue());
}
buffer.reset();
SerializationUtils.writeBigInteger(buffer,
new BigInteger("123456789abcdef0",16));
assertEquals(new BigInteger("123456789abcdef0",16),
SerializationUtils.readBigInteger(fromBuffer(buffer)));
buffer.reset();
SerializationUtils.writeBigInteger(buffer,
new BigInteger("-123456789abcdef0",16));
assertEquals(new BigInteger("-123456789abcdef0",16),
SerializationUtils.readBigInteger(fromBuffer(buffer)));
StringBuilder buf = new StringBuilder();
for(int i=0; i < 256; ++i) {
String num = Integer.toHexString(i);
if (num.length() == 1) {
buf.append('0');
}
buf.append(num);
}
buffer.reset();
SerializationUtils.writeBigInteger(buffer,
new BigInteger(buf.toString(),16));
assertEquals(new BigInteger(buf.toString(),16),
SerializationUtils.readBigInteger(fromBuffer(buffer)));
buffer.reset();
SerializationUtils.writeBigInteger(buffer,
new BigInteger("ff000000000000000000000000000000000000000000ff",16));
assertEquals(
new BigInteger("ff000000000000000000000000000000000000000000ff",16),
SerializationUtils.readBigInteger(fromBuffer(buffer)));
}
public static void main(String[] args) throws Exception {
TestSerializationUtils test = new TestSerializationUtils();
test.testDoubles();
test.testBigIntegers();
}
}