summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java')
-rw-r--r--vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java b/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java
new file mode 100644
index 00000000000..46a70a4c956
--- /dev/null
+++ b/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java
@@ -0,0 +1,105 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.compress;
+
+import org.junit.Test;
+
+import java.nio.ByteBuffer;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * TODO: balder
+ */
+public class IntegerCompressorTest {
+ private void verifyPositiveNumber(int n, byte [] expected) {
+ ByteBuffer buf = ByteBuffer.allocate(expected.length);
+ IntegerCompressor.putCompressedPositiveNumber(n, buf);
+ assertArrayEquals(expected, buf.array());
+ }
+ private void verifyNumber(int n, byte [] expected) {
+ ByteBuffer buf = ByteBuffer.allocate(expected.length);
+ IntegerCompressor.putCompressedNumber(n, buf);
+ assertArrayEquals(expected, buf.array());
+ }
+
+ @Test
+ public void requireThatPositiveNumberCompressCorrectly() {
+ byte [] zero = {0};
+ verifyPositiveNumber(0, zero);
+ byte [] one = {0x01};
+ verifyPositiveNumber(1, one);
+ byte [] x3f = {0x3f};
+ verifyPositiveNumber(0x3f, x3f);
+ byte [] x40 = {(byte)0x80,0x40};
+ verifyPositiveNumber(0x40, x40);
+ byte [] x3fff = {(byte)0xbf, (byte)0xff};
+ verifyPositiveNumber(0x3fff, x3fff);
+ byte [] x4000 = {(byte)0xc0, 0x00, 0x40, 0x00};
+ verifyPositiveNumber(0x4000, x4000);
+ byte [] x3fffffff = {(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff};
+ verifyPositiveNumber(0x3fffffff, x3fffffff);
+ byte [] x40000000 = {0,0,0,0};
+ try {
+ verifyPositiveNumber(0x40000000, x40000000);
+ assertTrue(false);
+ } catch (IllegalArgumentException e) {
+ assertEquals("Number '1073741824' too big, must extend encoding", e.getMessage());
+ }
+ try {
+ verifyPositiveNumber(-1, x40000000);
+ assertTrue(false);
+ } catch (IllegalArgumentException e) {
+ assertEquals("Number '-1' must be positive", e.getMessage());
+ }
+ }
+
+ @Test
+ public void requireThatNumberCompressCorrectly() {
+ byte [] zero = {0};
+ verifyNumber(0, zero);
+ byte [] one = {0x01};
+ verifyNumber(1, one);
+ byte [] x1f = {0x1f};
+ verifyNumber(0x1f, x1f);
+ byte [] x20 = {0x40,0x20};
+ verifyNumber(0x20, x20);
+ byte [] x1fff = {0x5f, (byte)0xff};
+ verifyNumber(0x1fff, x1fff);
+ byte [] x2000 = {0x60, 0x00, 0x20, 0x00};
+ verifyNumber(0x2000, x2000);
+ byte [] x1fffffff = {0x7f, (byte)0xff, (byte)0xff, (byte)0xff};
+ verifyNumber(0x1fffffff, x1fffffff);
+ byte [] x20000000 = {0,0,0,0};
+ try {
+ verifyNumber(0x20000000, x20000000);
+ assertTrue(false);
+ } catch (IllegalArgumentException e) {
+ assertEquals("Number '536870912' too big, must extend encoding", e.getMessage());
+ }
+ byte [] mzero = {(byte)0x81};
+ verifyNumber(-1, mzero);
+ byte [] mone = {(byte)0x82};
+ verifyNumber(-2, mone);
+ byte [] mx1f = {(byte)0x9f};
+ verifyNumber(-0x1f, mx1f);
+ byte [] mx20 = {(byte)0xc0,0x20};
+ verifyNumber(-0x20, mx20);
+ byte [] mx1fff = {(byte)0xdf, (byte)0xff};
+ verifyNumber(-0x1fff, mx1fff);
+ byte [] mx2000 = {(byte)0xe0, 0x00, 0x20, 0x00};
+ verifyNumber(-0x2000, mx2000);
+ byte [] mx1fffffff = {(byte)0xff, (byte)0xff, (byte)0xff, (byte)0xff};
+ verifyNumber(-0x1fffffff, mx1fffffff);
+ byte [] mx20000000 = {0,0,0,0};
+ try {
+ verifyNumber(-0x20000000, mx20000000);
+ assertTrue(false);
+ } catch (IllegalArgumentException e) {
+ assertEquals("Number '-536870912' too big, must extend encoding", e.getMessage());
+ }
+
+ }
+
+}