mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-10-04 19:42:01 +08:00
552 lines
21 KiB
Java
552 lines
21 KiB
Java
package encoding;
|
|
|
|
import org.junit.Test;
|
|
import util.ByteHelper;
|
|
|
|
|
|
import java.math.BigInteger;
|
|
import java.util.Arrays;
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
/*
|
|
* @Author: feng Zhao
|
|
* @Description:
|
|
* @Version: 1.0.0
|
|
* @Date: 22:40 2021/3/14
|
|
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
|
*/
|
|
|
|
public class EncoderTest {
|
|
int MaxPacketSize = 8800;
|
|
@Test
|
|
public void TestEmpty() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
estimator.estimatorReset();
|
|
|
|
assertTrue(encoder.empty());
|
|
assertTrue(estimator.empty());
|
|
|
|
encoder.prependByte((byte)20);
|
|
estimator.prependByte((byte)20);
|
|
|
|
assertFalse(encoder.empty());
|
|
assertFalse(estimator.empty());
|
|
|
|
|
|
}
|
|
|
|
@Test
|
|
public void TestEncoder_PrependByte() throws EncoderException, VlIntException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
estimator.estimatorReset();
|
|
// 测试前向添加 MaxPacketSize 次是否正常
|
|
for (int i = 0; i < MaxPacketSize; i++) {
|
|
int num = encoder.prependByte((byte) 97);
|
|
estimator.prependByte((byte) 97);
|
|
assertEquals(encoder.left,MaxPacketSize-i-2);
|
|
assertEquals(encoder.buffer[MaxPacketSize-i-1],(byte)97);
|
|
//todo 这里要用encoder.size().getVlIntValue2Int(),还是encoder.size().size()
|
|
// assertEquals(encoder.size().size(),i+1);
|
|
// assertEquals(estimator.size().size(),i+1);
|
|
assertEquals(encoder.size().getVlIntValue2Int(),i+1);
|
|
assertEquals(estimator.size().getVlIntValue2Int(),i+1);
|
|
assertFalse(encoder.empty());
|
|
assertFalse(estimator.empty());
|
|
assertEquals(num,1);
|
|
}
|
|
// for (int i = 0; i < MaxPacketSize; i++) {
|
|
// int num = encoder.prependByte((byte) 97);
|
|
// estimator.prependByte((byte) 97);
|
|
// if ((encoder.left == MaxPacketSize-i-2) ||
|
|
// (encoder.buffer[MaxPacketSize-i-1] != (byte)97) ||
|
|
// (encoder.size() != new SizeT(i+1)) ||
|
|
// (estimator.size() != new SizeT(i+1)) ||
|
|
// encoder.empty() || estimator.empty()|| (num != 1))
|
|
// {
|
|
// System.out.println("PrependByte Failed"+ i);
|
|
// return;
|
|
// }
|
|
// }
|
|
|
|
// 测试超出最大包大小的情况
|
|
int a = encoder.prependByte((byte)1);
|
|
assertEquals(a,0);
|
|
}
|
|
|
|
@Test
|
|
public void TestEncoder_AppendByte() throws EncoderException, VlIntException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(MaxPacketSize));
|
|
estimator.estimatorReset();
|
|
|
|
// 测试后向添加 MaxPacketSize 次是否正常
|
|
for (int i = 0; i < MaxPacketSize; i++) {
|
|
int num = encoder.appendByte((byte) 97);
|
|
estimator.appendByte((byte) 97);
|
|
assertEquals(encoder.right, i + 1);
|
|
assertEquals(encoder.buffer[i],(byte)97);
|
|
//todo 这里要用encoder.size().getVlIntValue2Int(),还是encoder.size().size()
|
|
// assertEquals(encoder.size().size(),i+1);
|
|
// assertEquals(estimator.size().size(),i+1);
|
|
assertEquals(encoder.size().getVlIntValue2Int(),i+1);
|
|
assertEquals(estimator.size().getVlIntValue2Int(),i+1);
|
|
assertFalse(encoder.empty());
|
|
assertFalse(estimator.empty());
|
|
assertEquals(num,1);
|
|
}
|
|
|
|
// 测试超出最大包大小的情况
|
|
int a = encoder.appendByte((byte) 1);
|
|
assertEquals(a,0);
|
|
int b = encoder.prependByte((byte) 1);
|
|
assertEquals(b,0);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void TestEncoder_PrependByteArray() throws EncoderException, VlIntException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
estimator.estimatorReset();
|
|
|
|
byte[] arr = new byte[]{1,2,3,4,5};
|
|
int length = arr.length;
|
|
// 测试prepend,没有超过MaxPacketSize
|
|
int num1 = encoder.prependByteArray(arr, new SizeT(length));
|
|
estimator.prependByteArray(arr, new SizeT(length));
|
|
assertEquals(encoder.size().getVlIntValue2Int(), length);
|
|
assertEquals(estimator.size().getVlIntValue2Int(), length);
|
|
assertEquals(num1,length);
|
|
|
|
// 检查插入的数据是否正确
|
|
byte[] newSlice = ByteHelper.getLenBytes(encoder.buffer, new VlInt(MaxPacketSize - length), length);
|
|
for (int i = 0; i < length; i++) {
|
|
assertEquals(arr[i],newSlice[i]);
|
|
}
|
|
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(0));
|
|
// 测试prepend,超过MaxPacketSize的情况
|
|
int times = MaxPacketSize / arr.length + 1;
|
|
for (int i = 0; i < times - 1; i++) {
|
|
int num2 = encoder.prependByteArray(arr, new SizeT(length));
|
|
assertEquals(num2,length);
|
|
}
|
|
int num3 = encoder.prependByteArray(arr, new SizeT(length));
|
|
assertEquals(num3,0);
|
|
}
|
|
|
|
@Test
|
|
public void TestEncoder_AppendByteArray() throws EncoderException, VlIntException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(MaxPacketSize));
|
|
estimator.estimatorReset();
|
|
|
|
byte[] arr = new byte[]{1, 2, 3, 4, 5};
|
|
int length = arr.length;
|
|
|
|
// 测试append,没有超过MaxPacketSize
|
|
int num1 = encoder.appendByteArray(arr, new SizeT(length));
|
|
estimator.appendByteArray(arr, new SizeT(length));
|
|
assertEquals(encoder.size().getVlIntValue2Int(), length);
|
|
assertEquals(estimator.size().getVlIntValue2Int(), length);
|
|
assertEquals(num1, length);
|
|
|
|
// 检查插入的数据是否正确
|
|
byte[] newSlice = ByteHelper.getLenBytes(encoder.buffer, new VlInt(0), length);
|
|
for (int i = 0; i < length; i++) {
|
|
assertEquals(arr[i],newSlice[i]);
|
|
}
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(MaxPacketSize));
|
|
|
|
// 测试prepend,超过MaxPacketSize的情况
|
|
int times = MaxPacketSize / arr.length + 1;
|
|
for (int i = 0; i < times - 1; i++) {
|
|
int num2 = encoder.appendByteArray(arr, new SizeT(length));
|
|
assertEquals(num2,length);
|
|
}
|
|
int num3 = encoder.appendByteArray(arr, new SizeT(length));
|
|
assertEquals(num3,0);
|
|
|
|
|
|
}
|
|
|
|
//error
|
|
@Test
|
|
public void TestPrependVarNumber() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
estimator.estimatorReset();
|
|
|
|
// 测试添加240
|
|
int addLen = encoder.prependVarNumber(new VlInt(240));
|
|
byte[] buffer1 = encoder.getBuffer();
|
|
assertEquals(buffer1[0], (byte) 240);
|
|
assertEquals(buffer1.length,1);
|
|
assertEquals(addLen, 1);
|
|
|
|
// 测试添加16位整型所能表示的最大值
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
encoder.prependVarNumber(new VlInt(65535));
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp = ByteHelper.getLenBytes(buffer1, new VlInt(1), 2);
|
|
int num1 = ByteHelper.new_byteArrayToInt(buf_tmp);
|
|
assertEquals(buffer1.length,3);
|
|
assertEquals(buffer1[0], (byte) 241);
|
|
assertEquals(num1,65535);
|
|
|
|
// 测试添加16位整型所能表示的最大值 + 1
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
encoder.prependVarNumber(new VlInt(65536));
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp2 = ByteHelper.getLenBytes(buffer1, new VlInt(1), 4);
|
|
int num2 = ByteHelper.new_byteArrayToInt(buf_tmp2);
|
|
assertEquals(buffer1.length,5);
|
|
assertEquals(buffer1[0], (byte) 242);
|
|
assertEquals(num2,65536);
|
|
|
|
// 测试添加32位整型所能表示的最大值 + 1
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
encoder.prependVarNumber(new VlInt(4294967296L));
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp3 = ByteHelper.getLenBytes(buffer1, new VlInt(1), 8);
|
|
// for (int i = 0; i < buf_tmp3.length; i++) {
|
|
// System.out.println(buf_tmp3[i]);
|
|
// }
|
|
// System.out.println("buf_tmp3.length:"+buf_tmp3.length);
|
|
long num3 = ByteHelper.uint64ToLong(buf_tmp3);
|
|
System.out.println("num3:"+num3);
|
|
assertEquals(buffer1.length,9);
|
|
assertEquals(buffer1[0], (byte) 243);
|
|
assertEquals(num3,4294967296L);
|
|
|
|
// 测试添加64位整型所能表示的最大值
|
|
// uint64最大值在java中无法表示=>用Long.MaxValue
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
encoder.prependVarNumber(new VlInt(Long.MAX_VALUE));
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp4 = ByteHelper.getLenBytes(buffer1, new VlInt(1), 8);
|
|
long num4 = ByteHelper.uint64ToLong(buf_tmp4);
|
|
System.out.println("num4:"+num4);
|
|
assertEquals(buffer1.length,9);
|
|
assertEquals(buffer1[0], (byte) 243);
|
|
assertEquals(num4,Long.MAX_VALUE);
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
public void TestAppendVarNumber() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(MaxPacketSize));
|
|
estimator.estimatorReset();
|
|
|
|
// 测试添加240
|
|
int addLen = encoder.appendVarNumber(new VlInt(240));
|
|
byte[] buffer1 = encoder.getBuffer();
|
|
assertEquals(buffer1[0], (byte) 240);
|
|
assertEquals(buffer1.length,1);
|
|
assertEquals(addLen, 1);
|
|
|
|
// 测试添加16位整型所能表示的最大值
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(MaxPacketSize));
|
|
encoder.appendVarNumber(new VlInt(65535));
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp = ByteHelper.getLenBytes(buffer1, new VlInt(1), 2);
|
|
int num1 = ByteHelper.new_byteArrayToInt(buf_tmp);
|
|
assertEquals(buffer1.length,3);
|
|
assertEquals(buffer1[0], (byte) 241);
|
|
assertEquals(num1,65535);
|
|
|
|
// 测试添加16位整型所能表示的最大值 + 1
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(MaxPacketSize));
|
|
encoder.appendVarNumber(new VlInt(65536));
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp2 = ByteHelper.getLenBytes(buffer1, new VlInt(1), 4);
|
|
int num2 = ByteHelper.new_byteArrayToInt(buf_tmp2);
|
|
assertEquals(buffer1.length,5);
|
|
assertEquals(buffer1[0], (byte) 242);
|
|
assertEquals(num2,65536);
|
|
|
|
// 测试添加32位整型所能表示的最大值 + 1
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(MaxPacketSize));
|
|
encoder.appendVarNumber(new VlInt(4294967296L));
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp3 = ByteHelper.getLenBytes(buffer1, new VlInt(1), 8);
|
|
long num3 = ByteHelper.uint64ToLong(buf_tmp3);
|
|
System.out.println("num3:"+num3);
|
|
assertEquals(buffer1.length,9);
|
|
assertEquals(buffer1[0], (byte) 243);
|
|
assertEquals(num3,4294967296L);
|
|
|
|
// 测试添加64位整型所能表示的最大值
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(MaxPacketSize));
|
|
encoder.appendVarNumber(new VlInt(Long.MAX_VALUE));
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp4 = ByteHelper.getLenBytes(buffer1, new VlInt(1), 8);
|
|
long num4 = ByteHelper.uint64ToLong(buf_tmp4);
|
|
System.out.println("num4:"+num4);
|
|
assertEquals(buffer1.length,9);
|
|
assertEquals(buffer1[0], (byte) 243);
|
|
assertEquals(num4,Long.MAX_VALUE);
|
|
}
|
|
|
|
@Test
|
|
public void TestPrependNonNegativeInteger() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(0));
|
|
estimator.estimatorReset();
|
|
|
|
// 测试添加255
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(0));
|
|
int addLen1 = encoder.prependNonNegativeInteger(255);
|
|
assertEquals(addLen1, 1);
|
|
byte[] buffer1 = encoder.getBuffer();
|
|
assertEquals(buffer1[0], (byte) 255);
|
|
assertEquals(buffer1.length,1);
|
|
|
|
|
|
// 添加 MaxUint16
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
int addLen2 = encoder.prependNonNegativeInteger(65535);
|
|
assertEquals(addLen2, 2);
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp = ByteHelper.getLenBytes(buffer1, new VlInt(0), 2);
|
|
int num1 = ByteHelper.new_byteArrayToInt(buf_tmp);
|
|
assertEquals(buffer1.length,2);
|
|
assertEquals(num1,65535);
|
|
|
|
// 添加 MaxUint32
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
int addLen3 = encoder.prependNonNegativeInteger(4294967295L);
|
|
assertEquals(addLen3, 4);
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp2 = ByteHelper.getLenBytes(buffer1, new VlInt(0), 4);
|
|
// long num2 = ByteHelper.new_byteArrayToLong(buf_tmp2);
|
|
long num2 = ByteHelper.new_byteArrayToAllInt(buf_tmp2);
|
|
assertEquals(buffer1.length,4);
|
|
assertEquals(num2,4294967295L);
|
|
|
|
// 添加 MaxUint64
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(0));
|
|
int addLen4 = encoder.prependNonNegativeInteger(Long.MAX_VALUE);
|
|
assertEquals(addLen4, 8);
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp3 = ByteHelper.getLenBytes(buffer1, new VlInt(0), 8);
|
|
System.out.println(Arrays.toString(buf_tmp3));
|
|
long num3 = ByteHelper.new_byteArrayToLong(buf_tmp3);
|
|
assertEquals(buffer1.length,8);
|
|
assertEquals(num3,Long.MAX_VALUE);
|
|
}
|
|
|
|
@Test
|
|
public void TestAppendNonNegativeInteger() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(MaxPacketSize));
|
|
estimator.estimatorReset();
|
|
|
|
// 测试添加255
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(MaxPacketSize));
|
|
int addLen1 = encoder.appendNonNegativeInteger(255);
|
|
assertEquals(addLen1, 1);
|
|
byte[] buffer1 = encoder.getBuffer();
|
|
assertEquals(buffer1[0], (byte) 255);
|
|
assertEquals(buffer1.length,1);
|
|
|
|
// 添加 MaxUint16
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(MaxPacketSize));
|
|
int addLen2 = encoder.appendNonNegativeInteger(65535);
|
|
assertEquals(addLen2, 2);
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp = ByteHelper.getLenBytes(buffer1, new VlInt(0), 2);
|
|
int num1 = ByteHelper.new_byteArrayToInt(buf_tmp);
|
|
assertEquals(buffer1.length,2);
|
|
assertEquals(num1,65535);
|
|
|
|
// 添加 MaxUint32
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(MaxPacketSize));
|
|
int addLen3 = encoder.appendNonNegativeInteger(4294967295L);
|
|
assertEquals(addLen3, 4);
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp2 = ByteHelper.getLenBytes(buffer1, new VlInt(0), 4);
|
|
long num2 = ByteHelper.new_byteArrayToAllInt(buf_tmp2);
|
|
assertEquals(buffer1.length,4);
|
|
assertEquals(num2,4294967295L);
|
|
|
|
// 添加 MaxUint64
|
|
encoder.encoderReset(new SizeT(MaxPacketSize),new SizeT(MaxPacketSize));
|
|
int addLen4 = encoder.appendNonNegativeInteger(Long.MAX_VALUE);
|
|
assertEquals(addLen4, 8);
|
|
buffer1 = encoder.getBuffer();
|
|
byte[] buf_tmp3 = ByteHelper.getLenBytes(buffer1, new VlInt(0), 8);
|
|
long num3 = ByteHelper.new_byteArrayToLong(buf_tmp3);
|
|
assertEquals(buffer1.length,8);
|
|
assertEquals(num3,Long.MAX_VALUE);
|
|
}
|
|
|
|
@Test
|
|
public void TestPrependByteArrayBlock() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(0));
|
|
estimator.estimatorReset();
|
|
|
|
byte[] buf = new byte[8000];
|
|
for (int i = 1; i < 8000; i++) {
|
|
buf[i] = (byte)(buf[i-1] +1);
|
|
}
|
|
//测试插入数据正确性
|
|
int addLen = encoder.prependByteArrayBlock(new VlInt(241), buf, new SizeT(buf.length));
|
|
assertEquals(addLen,3+8000+3);
|
|
byte[] buf1 = encoder.getBuffer();
|
|
assertEquals(addLen,8006);
|
|
assertEquals(buf1.length,8006);
|
|
assertEquals(buf1[0],(byte)241);
|
|
assertEquals(buf1[3],(byte)241);
|
|
//buf1[1:3] == 241
|
|
byte[] buf_tmp = ByteHelper.getLenBytes(buf1, new VlInt(1), 2);
|
|
int num1 = ByteHelper.new_byteArrayToInt(buf_tmp);
|
|
assertEquals(num1,241);
|
|
//buf1[4:6]==8000
|
|
byte[] buf_tmp2 = ByteHelper.getLenBytes(buf1, new VlInt(4), 2);
|
|
int num2 = ByteHelper.new_byteArrayToInt(buf_tmp2);
|
|
assertEquals(num2,8000);
|
|
|
|
//测试字节数组插入数据是否正确
|
|
int std = 0; //uint:std
|
|
for (int i = 0; i < 8000; i++) {
|
|
assertEquals(ByteHelper.uint8ToInt(buf1[6+i]),std);
|
|
std = (std+1)%256;
|
|
}
|
|
|
|
}
|
|
|
|
@Test
|
|
public void TestAppendByteArrayBlock() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(MaxPacketSize));
|
|
estimator.estimatorReset();
|
|
|
|
byte[] buf = new byte[8000];
|
|
for (int i = 1; i < 8000; i++) {
|
|
buf[i] = (byte)(buf[i-1] +1);
|
|
}
|
|
System.out.println(Arrays.toString(buf));
|
|
//测试插入数据正确性
|
|
int addLen = encoder.appendByteArrayBlock(new VlInt(241), buf, new SizeT(buf.length));
|
|
assertEquals(addLen,3+8000+3);
|
|
byte[] buf1 = encoder.getBuffer();
|
|
System.out.println(Arrays.toString(buf1));
|
|
assertEquals(addLen,8006);
|
|
assertEquals(buf1.length,8006);
|
|
assertEquals(ByteHelper.uint8ToInt(buf1[0]),241);
|
|
assertEquals(ByteHelper.uint8ToInt(buf1[3]),241);
|
|
//buf1[1:3] == 241
|
|
byte[] buf_tmp = ByteHelper.getLenBytes(buf1, new VlInt(1), 2);
|
|
int num1 = ByteHelper.uint16ToInt(buf_tmp);
|
|
assertEquals(num1,241);
|
|
//buf1[4:6]==8000
|
|
byte[] buf_tmp2 = ByteHelper.getLenBytes(buf1, new VlInt(4), 2);
|
|
int num2 = ByteHelper.uint16ToInt(buf_tmp2);
|
|
assertEquals(num2,8000);
|
|
|
|
//测试字节数组插入数据是否正确
|
|
int std = 0; //uint:std
|
|
for (int i = 0; i < 8000; i++) {
|
|
assertEquals(ByteHelper.uint8ToInt(buf1[6+i]),std);
|
|
std = (std+1)%256;
|
|
}
|
|
|
|
}
|
|
|
|
@Test
|
|
public void TestPrependBlock() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(0));
|
|
estimator.estimatorReset();
|
|
|
|
byte[] buf = new byte[8000];
|
|
Block block = new Block();
|
|
block.setType(new VlInt(241));
|
|
block.setLength(new VlInt(8000));
|
|
block.setValue(buf);
|
|
|
|
int addLen = encoder.prependBlock(block);
|
|
assertEquals(addLen,8006);
|
|
|
|
byte[] buf1 = encoder.getBuffer();
|
|
assertEquals(addLen,8006);
|
|
assertEquals(buf1.length,8006);
|
|
assertEquals(buf1[0],(byte)241);
|
|
assertEquals(buf1[3],(byte)241);
|
|
//buf1[1:3] == 241
|
|
byte[] buf_tmp = ByteHelper.getLenBytes(buf1, new VlInt(1), 2);
|
|
int num1 = ByteHelper.new_byteArrayToInt(buf_tmp);
|
|
assertEquals(num1,241);
|
|
//buf1[4:6]==8000
|
|
byte[] buf_tmp2 = ByteHelper.getLenBytes(buf1, new VlInt(4), 2);
|
|
int num2 = ByteHelper.new_byteArrayToInt(buf_tmp2);
|
|
assertEquals(num2,8000);
|
|
}
|
|
|
|
@Test
|
|
public void TestAppendBlock() throws EncoderException {
|
|
Encoder encoder = new Encoder();
|
|
Encoder estimator = new Encoder();
|
|
encoder.encoderReset(new SizeT(MaxPacketSize), new SizeT(MaxPacketSize));
|
|
estimator.estimatorReset();
|
|
|
|
byte[] buf = new byte[8000];
|
|
Block block = new Block();
|
|
block.setType(new VlInt(241));
|
|
block.setLength(new VlInt(8000));
|
|
block.setValue(buf);
|
|
|
|
int addLen = encoder.appendBlock(block);
|
|
assertEquals(addLen,8006);
|
|
|
|
byte[] buf1 = encoder.getBuffer();
|
|
assertEquals(addLen,8006);
|
|
assertEquals(buf1.length,8006);
|
|
assertEquals(buf1[0],(byte)241);
|
|
assertEquals(buf1[3],(byte)241);
|
|
//buf1[1:3] == 241
|
|
byte[] buf_tmp = ByteHelper.getLenBytes(buf1, new VlInt(1), 2);
|
|
int num1 = ByteHelper.new_byteArrayToInt(buf_tmp);
|
|
assertEquals(num1,241);
|
|
//buf1[4:6]==8000
|
|
byte[] buf_tmp2 = ByteHelper.getLenBytes(buf1, new VlInt(4), 2);
|
|
int num2 = ByteHelper.new_byteArrayToInt(buf_tmp2);
|
|
assertEquals(num2,8000);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|