package org.yamcs.utils;
import static org.junit.Assert.*;
import java.nio.ByteBuffer;
import org.junit.Test;
public class VarIntUtilTest {
@Test
public void testVarInt32() throws Exception{
ByteBuffer bb = ByteBuffer.allocate(10);
VarIntUtil.writeVarInt32(bb, 3);
assertEquals(1, bb.position());
bb.rewind();
assertEquals(3, VarIntUtil.readVarInt32(bb));
bb.rewind();
VarIntUtil.writeVarInt32(bb, 200);
assertEquals(2, bb.position());
bb.rewind();
assertEquals(200, VarIntUtil.readVarInt32(bb));
bb.rewind();
VarIntUtil.writeVarInt32(bb, 0xFFFF);
assertEquals(3, bb.position());
bb.rewind();
assertEquals(0xFFFF, VarIntUtil.readVarInt32(bb));
bb.rewind();
VarIntUtil.writeVarInt32(bb, 0xFFFFFFFF);
assertEquals(5, bb.position());
bb.rewind();
assertEquals(0xFFFFFFFF, VarIntUtil.readVarInt32(bb));
}
@Test
public void testInvalid() {
ByteBuffer bb = ByteBuffer.wrap(StringConverter.hexStringToArray("8182838485"));
try {
VarIntUtil.readVarInt32(bb);
fail("Should have thrown an exception");
} catch (DecodingException e) {
}
}
@Test
public void testDeltaDeltaZigZag() throws Exception{
int n = 100;
int[] a= new int[n];
for(int i=0;i<n;i++) {
a[i]=i;
}
int[] ddz = VarIntUtil.encodeDeltaDeltaZigZag(a);
assertEquals(n, ddz.length);
assertEquals(0, ddz[0]);
assertEquals(2, ddz[1]);
for(int i=2; i<n; i++) {
assertEquals(0, ddz[i]);
}
int[] b = VarIntUtil.decodeDeltaDeltaZigZag(ddz);
assertArrayEquals(a, b);
for(int i=0;i<n;i++) {
a[i]= -i;
}
ddz = VarIntUtil.encodeDeltaDeltaZigZag(a);
b = VarIntUtil.decodeDeltaDeltaZigZag(ddz);
assertArrayEquals(a, b);
for(int i=0; i<n; i++) {
a[i]= (1<<31)+i * (((i&1)<<1)-1);
}
ddz = VarIntUtil.encodeDeltaDeltaZigZag(a);
b = VarIntUtil.decodeDeltaDeltaZigZag(ddz);
assertArrayEquals(a, b);
}
}