/*
* This code is released under the
* Apache License Version 2.0 http://www.apache.org/licenses/.
*/
package me.lemire.integercompression;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author lemire
*
*/
@SuppressWarnings({ "static-method" })
public class DeltaZigzagEncodingTest {
protected static int zigzagEncode(DeltaZigzagEncoding.Encoder e, int value) {
e.setContextValue(0);
return e.encodeInt(value);
}
protected static int zigzagDecode(DeltaZigzagEncoding.Decoder d, int value) {
d.setContextValue(0);
return d.decodeInt(value);
}
protected static void checkEncode(
DeltaZigzagEncoding.Encoder e,
int[] data,
int[] expected)
{
assertArrayEquals(expected, e.encodeArray(data));
assertEquals(data[data.length - 1], e.getContextValue());
}
protected static void checkDecode(
DeltaZigzagEncoding.Decoder d,
int[] data,
int[] expected)
{
int[] r = d.decodeArray(data);
assertArrayEquals(expected, r);
assertEquals(r[r.length - 1], d.getContextValue());
}
/**
*
*/
@Test
public void checkZigzagEncode() {
DeltaZigzagEncoding.Encoder e = new DeltaZigzagEncoding.Encoder(0);
assertEquals(0, zigzagEncode(e, 0));
assertEquals(2, zigzagEncode(e, 1));
assertEquals(4, zigzagEncode(e, 2));
assertEquals(6, zigzagEncode(e, 3));
assertEquals(1, zigzagEncode(e, -1));
assertEquals(3, zigzagEncode(e, -2));
assertEquals(5, zigzagEncode(e, -3));
}
/**
*
*/
@Test
public void checkZigzagDecoder() {
DeltaZigzagEncoding.Decoder d = new DeltaZigzagEncoding.Decoder(0);
assertEquals( 0, zigzagDecode(d, 0));
assertEquals(-1, zigzagDecode(d, 1));
assertEquals( 1, zigzagDecode(d, 2));
assertEquals(-2, zigzagDecode(d, 3));
assertEquals( 2, zigzagDecode(d, 4));
assertEquals(-3, zigzagDecode(d, 5));
}
/**
*
*/
@Test
public void checkEncodeSimple() {
DeltaZigzagEncoding.Encoder e = new DeltaZigzagEncoding.Encoder(0);
checkEncode(e,
new int[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
new int[]{ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 });
}
/**
*
*/
@Test
public void checkDecodeSimple() {
DeltaZigzagEncoding.Decoder d = new DeltaZigzagEncoding.Decoder(0);
checkDecode(d,
new int[]{ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
new int[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
}
protected static class SpotChecker {
private final static DeltaZigzagEncoding.Encoder encoder =
new DeltaZigzagEncoding.Encoder(0);
private final static DeltaZigzagEncoding.Decoder decoder =
new DeltaZigzagEncoding.Decoder(0);
public void check(int value) {
SpotChecker.encoder.setContextValue(0);
SpotChecker.decoder.setContextValue(0);
int value2 = SpotChecker.decoder.decodeInt(SpotChecker.encoder.encodeInt(value));
assertEquals(value, value2);
}
}
/**
*
*/
@Test
public void checkSpots() {
SpotChecker c = new SpotChecker();
c.check(0);
c.check(1);
c.check(1375228800);
c.check(1 << 30);
c.check(1 << 31);
}
}