package net.varkhan.base.conversion.serializer.primitives;
import junit.framework.TestCase;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Random;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 2/6/11
* @time 5:43 AM
*/
public class PrimitiveArraySerializerTest extends TestCase {
public void testBooleanIS() {
boolean[][] vals=new boolean[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new boolean[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextBoolean();
}
BooleanArraySerializer<Object> s=new BooleanArraySerializer<Object>();
ByteArrayOutputStream os=new ByteArrayOutputStream();
for(boolean[] val : vals) s.encode(val, os, null);
InputStream is=new ByteArrayInputStream(os.toByteArray());
for(boolean[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(is, null));
}
public void testBooleanBB() {
boolean[][] vals=new boolean[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new boolean[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextBoolean();
}
BooleanArraySerializer<Object> s=new BooleanArraySerializer<Object>();
ByteBuffer bb = ByteBuffer.allocate(10+200*vals.length);
for(boolean[] val : vals) s.encode(val, bb, null);
bb.flip();
for(boolean[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(bb, null));
}
public void testBooleanAR() {
boolean[][] vals=new boolean[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new boolean[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextBoolean();
}
BooleanArraySerializer<Object> s=new BooleanArraySerializer<Object>();
byte[] ar = new byte[10+200*vals.length];
long pos = 0;
for(boolean[] val : vals) pos += s.encode(val, ar, pos, ar.length-pos, null);
long len = pos;
pos = 0;
for(boolean[] val : vals) {
boolean[] v=s.decode(ar, pos, len-pos, null);
pos += s.length(v, null);
assertArrayEquals(""+Arrays.toString(val), val, v);
}
}
public void testByteIS() {
byte[][] vals=new byte[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new byte[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=(byte) rand.nextInt(Byte.MAX_VALUE);
}
ByteArraySerializer<Object> s=new ByteArraySerializer<Object>();
ByteArrayOutputStream os=new ByteArrayOutputStream();
for(byte[] val : vals) s.encode(val, os, null);
InputStream is=new ByteArrayInputStream(os.toByteArray());
for(byte[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(is, null));
}
public void testByteBB() {
byte[][] vals=new byte[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new byte[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=(byte) rand.nextInt(Byte.MAX_VALUE);
}
ByteArraySerializer<Object> s=new ByteArraySerializer<Object>();
ByteBuffer bb = ByteBuffer.allocate(10+200*vals.length);
for(byte[] val : vals) s.encode(val, bb, null);
bb.flip();
for(byte[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(bb, null));
}
public void testByteAR() {
byte[][] vals=new byte[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new byte[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=(byte) rand.nextInt(Byte.MAX_VALUE);
}
ByteArraySerializer<Object> s=new ByteArraySerializer<Object>();
byte[] ar = new byte[10+200*vals.length];
long pos = 0;
for(byte[] val : vals) pos += s.encode(val, ar, pos, ar.length-pos, null);
long len = pos;
pos = 0;
for(byte[] val : vals) {
byte[] v=s.decode(ar, pos, len-pos, null);
pos += s.length(v, null);
assertArrayEquals(""+Arrays.toString(val), val, v);
}
}
public void testShortIS() {
short[][] vals=new short[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new short[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=(short) rand.nextInt(Short.MAX_VALUE);
}
ShortArraySerializer<Object> s=new ShortArraySerializer<Object>();
ByteArrayOutputStream os=new ByteArrayOutputStream();
for(short[] val : vals) s.encode(val, os, null);
InputStream is=new ByteArrayInputStream(os.toByteArray());
for(short[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(is, null));
}
public void testShortBB() {
short[][] vals=new short[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new short[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=(short) rand.nextInt(Short.MAX_VALUE);
}
ShortArraySerializer<Object> s=new ShortArraySerializer<Object>();
ByteBuffer bb = ByteBuffer.allocate(10+2*200*vals.length);
for(short[] val : vals) s.encode(val, bb, null);
bb.flip();
for(short[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(bb, null));
}
public void testShortAR() {
short[][] vals=new short[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new short[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=(short) rand.nextInt(Short.MAX_VALUE);
}
ShortArraySerializer<Object> s=new ShortArraySerializer<Object>();
byte[] ar = new byte[10+2*200*vals.length];
long pos = 0;
for(short[] val : vals) pos += s.encode(val, ar, pos, ar.length-pos, null);
long len = pos;
pos = 0;
for(short[] val : vals) {
short[] v=s.decode(ar, pos, len-pos, null);
pos += s.length(v, null);
assertArrayEquals(""+Arrays.toString(val), val, v);
}
}
public void testIntIS() {
int[][] vals=new int[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new int[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextInt();
}
IntArraySerializer<Object> s=new IntArraySerializer<Object>();
ByteArrayOutputStream os=new ByteArrayOutputStream();
for(int[] val : vals) s.encode(val, os, null);
InputStream is=new ByteArrayInputStream(os.toByteArray());
for(int[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(is, null));
}
public void testIntBB() {
int[][] vals=new int[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new int[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextInt();
}
IntArraySerializer<Object> s=new IntArraySerializer<Object>();
ByteBuffer bb = ByteBuffer.allocate(10+4*200*vals.length);
for(int[] val : vals) s.encode(val, bb, null);
bb.flip();
for(int[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(bb, null));
}
public void testIntAR() {
int[][] vals=new int[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new int[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextInt();
}
IntArraySerializer<Object> s=new IntArraySerializer<Object>();
byte[] ar = new byte[10+4*200*vals.length];
long pos = 0;
for(int[] val : vals) pos += s.encode(val, ar, pos, ar.length-pos, null);
long len = pos;
pos = 0;
for(int[] val : vals) {
int[] v=s.decode(ar, pos, len-pos, null);
pos += s.length(v, null);
assertArrayEquals(""+Arrays.toString(val), val, v);
}
}
public void testLongIS() {
long[][] vals=new long[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new long[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextLong();
}
LongArraySerializer<Object> s=new LongArraySerializer<Object>();
ByteArrayOutputStream os=new ByteArrayOutputStream();
for(long[] val : vals) s.encode(val, os, null);
InputStream is=new ByteArrayInputStream(os.toByteArray());
for(long[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(is, null));
}
public void testLongBB() {
long[][] vals=new long[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new long[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextLong();
}
LongArraySerializer<Object> s=new LongArraySerializer<Object>();
ByteBuffer bb = ByteBuffer.allocate(10+8*200*vals.length);
for(long[] val : vals) s.encode(val, bb, null);
bb.flip();
for(long[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(bb, null));
}
public void testLongAR() {
long[][] vals=new long[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new long[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=rand.nextLong();
}
LongArraySerializer<Object> s=new LongArraySerializer<Object>();
byte[] ar = new byte[10+8*200*vals.length];
long pos = 0;
for(long[] val : vals) pos += s.encode(val, ar, pos, ar.length-pos, null);
long len = pos;
pos = 0;
for(long[] val : vals) {
long[] v=s.decode(ar, pos, len-pos, null);
pos += s.length(v, null);
assertArrayEquals(""+Arrays.toString(val), val, v);
}
}
public void testFloatIS() {
float[][] vals=new float[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new float[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=Float.MAX_VALUE*rand.nextFloat();
}
FloatArraySerializer<Object> s=new FloatArraySerializer<Object>();
ByteArrayOutputStream os=new ByteArrayOutputStream();
for(float[] val : vals) s.encode(val, os, null);
InputStream is=new ByteArrayInputStream(os.toByteArray());
for(float[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(is, null));
}
public void testFloatBB() {
float[][] vals=new float[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new float[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=Float.MAX_VALUE*rand.nextFloat();
}
FloatArraySerializer<Object> s=new FloatArraySerializer<Object>();
ByteBuffer bb = ByteBuffer.allocate(10+4*200*vals.length);
for(float[] val : vals) s.encode(val, bb, null);
bb.flip();
for(float[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(bb, null));
}
public void testFloatAR() {
float[][] vals=new float[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new float[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=Float.MAX_VALUE*rand.nextFloat();
}
FloatArraySerializer<Object> s=new FloatArraySerializer<Object>();
byte[] ar = new byte[10+4*200*vals.length];
long pos = 0;
for(float[] val : vals) pos += s.encode(val, ar, pos, ar.length-pos, null);
long len = pos;
pos = 0;
for(float[] val : vals) {
float[] v=s.decode(ar, pos, len-pos, null);
pos += s.length(v, null);
assertArrayEquals(""+Arrays.toString(val), val, v);
}
}
public void testDoubleIS() {
double[][] vals=new double[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new double[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=Double.MAX_VALUE*rand.nextDouble();
}
DoubleArraySerializer<Object> s=new DoubleArraySerializer<Object>();
ByteArrayOutputStream os=new ByteArrayOutputStream();
for(double[] val : vals) s.encode(val, os, null);
InputStream is=new ByteArrayInputStream(os.toByteArray());
for(double[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(is, null));
}
public void testDoubleBB() {
double[][] vals=new double[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new double[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=Double.MAX_VALUE*rand.nextDouble();
}
DoubleArraySerializer<Object> s=new DoubleArraySerializer<Object>();
ByteBuffer bb = ByteBuffer.allocate(10+8*200*vals.length);
for(double[] val : vals) s.encode(val, bb, null);
bb.flip();
for(double[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(bb, null));
}
public void testDoubleAR() {
double[][] vals=new double[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new double[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=Double.MAX_VALUE*rand.nextDouble();
}
DoubleArraySerializer<Object> s=new DoubleArraySerializer<Object>();
byte[] ar = new byte[10+8*200*vals.length];
long pos = 0;
for(double[] val : vals) pos += s.encode(val, ar, pos, ar.length-pos, null);
long len = pos;
pos = 0;
for(double[] val : vals) {
double[] v=s.decode(ar, pos, len-pos, null);
pos += s.length(v, null);
assertArrayEquals(""+Arrays.toString(val), val, v);
}
}
public static void assertArrayEquals(String message, boolean[] expected, boolean[] actual) {
assertEquals(message+" (length)", expected.length, actual.length);
for(int i=0;i<expected.length;i++) assertEquals(message+" ["+i+"]", expected[i], actual[i]);
}
public static void assertArrayEquals(String message, byte[] expected, byte[] actual) {
assertEquals(message+" (length)", expected.length, actual.length);
for(int i=0;i<expected.length;i++) assertEquals(message+" ["+i+"]", expected[i], actual[i]);
}
public static void assertArrayEquals(String message, short[] expected, short[] actual) {
assertEquals(message+" (length)", expected.length, actual.length);
for(int i=0;i<expected.length;i++) assertEquals(message+" ["+i+"]", expected[i], actual[i]);
}
public static void assertArrayEquals(String message, int[] expected, int[] actual) {
assertEquals(message+" (length)", expected.length, actual.length);
for(int i=0;i<expected.length;i++) assertEquals(message+" ["+i+"]", expected[i], actual[i]);
}
public static void assertArrayEquals(String message, long[] expected, long[] actual) {
assertEquals(message+" (length)", expected.length, actual.length);
for(int i=0;i<expected.length;i++) assertEquals(message+" ["+i+"]", expected[i], actual[i]);
}
public static void assertArrayEquals(String message, float[] expected, float[] actual) {
assertEquals(message+" (length)", expected.length, actual.length);
for(int i=0;i<expected.length;i++) assertEquals(message+" ["+i+"]", expected[i], actual[i]);
}
public static void assertArrayEquals(String message, double[] expected, double[] actual) {
assertEquals(message+" (length)", expected.length, actual.length);
for(int i=0;i<expected.length;i++) assertEquals(message+" ["+i+"]", expected[i], actual[i]);
}
}