package net.varkhan.base.conversion.serializer.composite;
import junit.framework.TestCase;
import net.varkhan.base.conversion.serializer.Serializer;
import net.varkhan.base.conversion.serializer.primitives.StringSerializer;
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 5/28/11
* @time 11:27 PM
*/
public class ArraySerializerTest extends TestCase {
public void testStringIS() {
String[][] vals=new String[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new String[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=randString(rand, 30, "abcdefghijklmnopqrstuvwxyz".toCharArray());
}
@SuppressWarnings( { "unchecked" })
ArraySerializer<String,Object> s=new ArraySerializer<String,Object>(String.class, (Serializer) new StringSerializer<Object>());
ByteArrayOutputStream os=new ByteArrayOutputStream();
for(String[] val : vals) s.encode(val, os, null);
InputStream is=new ByteArrayInputStream(os.toByteArray());
for(String[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(is, null));
}
public void testStringBB() {
String[][] vals=new String[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new String[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=randString(rand, 30, "abcdefghijklmnopqrstuvwxyz".toCharArray());
}
@SuppressWarnings( { "unchecked" })
ArraySerializer<String,Object> s=new ArraySerializer<String,Object>(String.class, (Serializer) new StringSerializer<Object>());
ByteBuffer bb = ByteBuffer.allocate(10+(10+(10+4*30)*200)*vals.length);
for(String[] val : vals) s.encode(val, bb, null);
bb.flip();
for(String[] val : vals) assertArrayEquals(""+Arrays.toString(val), val, s.decode(bb, null));
}
public void testStringAR() {
String[][] vals=new String[1000][];
Random rand=new Random();
for(int i=0;i<vals.length;i++) {
vals[i]=new String[rand.nextInt(200)];
for(int j=0;j<vals[i].length;j++) vals[i][j]=randString(rand, 30, "abcdefghijklmnopqrstuvwxyz".toCharArray());
}
@SuppressWarnings( { "unchecked" })
ArraySerializer<String,Object> s=new ArraySerializer<String,Object>(String.class, (Serializer) new StringSerializer<Object>());
byte[] ar = new byte[10+(10+(10+6*30)*200)*vals.length];
long pos = 0;
for(String[] val : vals) pos += s.encode(val, ar, pos, ar.length-pos, null);
long len = 0;
for(String[] val : vals) len += s.length(val,null);
assertEquals("len",len,pos);
len = pos;
pos = 0;
for(String[] val : vals) {
String[] v=s.decode(ar, pos, len-pos, null);
pos += s.length(v, null);
assertArrayEquals(""+Arrays.toString(val), val, v);
}
assertEquals("len",len,pos);
}
private static String randString(Random rand, int size, char[] chars) {
int len = rand.nextInt(size);
char[] c = new char[len];
for(int i=0; i<len; i++) {
c[i] = chars[rand.nextInt(chars.length)];
}
return new String(c);
}
public static void assertArrayEquals(String message, Object[] expected, Object[] actual) {
assertEquals(message+" (length)", expected.length, actual.length);
for(int i=0;i<expected.length;i++) assertEquals(message+" ["+i+"]", expected[i], actual[i]);
}
}