You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ma...@apache.org on 2016/11/15 13:34:39 UTC
kylin git commit: KYLIN-2191 fix integer encoding and refine UT
Repository: kylin
Updated Branches:
refs/heads/master e68b25796 -> ab6e08351
KYLIN-2191 fix integer encoding and refine UT
Signed-off-by: Hongbin Ma <ma...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ab6e0835
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ab6e0835
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ab6e0835
Branch: refs/heads/master
Commit: ab6e083517a16bece87db34d9f7f22a5df0662ee
Parents: e68b257
Author: Roger Shi <ro...@hotmail.com>
Authored: Tue Nov 15 20:59:15 2016 +0800
Committer: Hongbin Ma <ma...@apache.org>
Committed: Tue Nov 15 21:33:45 2016 +0800
----------------------------------------------------------------------
.../gridtable/DimEncodingPreserveOrderTest.java | 85 +++++++-----
.../apache/kylin/dimension/IntegerDimEnc.java | 2 +-
.../kylin/dimension/IntegerDimEncTest.java | 128 +++++++++++--------
3 files changed, 129 insertions(+), 86 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/ab6e0835/core-cube/src/test/java/org/apache/kylin/gridtable/DimEncodingPreserveOrderTest.java
----------------------------------------------------------------------
diff --git a/core-cube/src/test/java/org/apache/kylin/gridtable/DimEncodingPreserveOrderTest.java b/core-cube/src/test/java/org/apache/kylin/gridtable/DimEncodingPreserveOrderTest.java
index ffd43e5..87d37be 100644
--- a/core-cube/src/test/java/org/apache/kylin/gridtable/DimEncodingPreserveOrderTest.java
+++ b/core-cube/src/test/java/org/apache/kylin/gridtable/DimEncodingPreserveOrderTest.java
@@ -20,22 +20,68 @@ package org.apache.kylin.gridtable;
import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
import java.util.List;
import org.apache.kylin.common.util.ByteArray;
import org.apache.kylin.common.util.Bytes;
import org.apache.kylin.dimension.DimensionEncoding;
import org.apache.kylin.dimension.FixedLenHexDimEnc;
-import org.apache.kylin.dimension.OneMoreByteVLongDimEnc;
import org.apache.kylin.dimension.IntegerDimEnc;
+import org.apache.kylin.dimension.OneMoreByteVLongDimEnc;
+import org.junit.BeforeClass;
import org.junit.Test;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
public class DimEncodingPreserveOrderTest {
+ private static List<long[]> successValue;
+ private static List<long[]> failValue;
+
+ @BeforeClass
+ public static void initTestValue() {
+ successValue = new ArrayList<>();
+ successValue.add(new long[] { -127, 0, 127 });
+ successValue.add(new long[] { -32767, -127, 0, 127, 32767 });
+ successValue.add(new long[] { -8388607, -32767, -127, 0, 127, 32767, 8388607 });
+ successValue.add(new long[] { -2147483647L, -8388607, -32767, -127, 0, 127, 32767, 8388607, 2147483647L });
+ successValue.add(new long[] { -549755813887L, -2147483647L, -8388607, -32767, -127, 0, 127, 32767, 8388607, 2147483647L, 549755813887L });
+ successValue.add(new long[] { -140737488355327L, -549755813887L, -2147483647L, -8388607, -32767, -127, 0, 127, 32767, 8388607, 2147483647L, 549755813887L, 140737488355327L });
+ successValue.add(new long[] { -36028797018963967L, -140737488355327L, -549755813887L, -2147483647L, -8388607, -32767, -127, 0, 127, 32767, 8388607, 2147483647L, 549755813887L, 140737488355327L, 36028797018963967L });
+ successValue.add(new long[] { //
+ -9223372036854775807L, //
+ -36028797018963967L, //
+ -140737488355327L, //
+ -549755813887L, //
+ -2147483647L, //
+ -8388607, //
+ -32767, //
+ -127, //
+ 0, //
+ 127, // (2 ^ 7) - 1
+ 32767, // (2 ^ 15) - 1
+ 8388607, // (2 ^ 23) - 1
+ 2147483647L, // (2 ^ 31) - 1
+ 549755813887L, // (2 ^ 39) - 1
+ 140737488355327L, // (2 ^ 47) - 1
+ 36028797018963967L, // (2 ^ 55) - 1
+ 9223372036854775807L }); // (2 ^ 63) - 1
+
+ failValue = new ArrayList<>();
+ failValue.add(new long[] { -128, 128 });
+ failValue.add(new long[] { -32768, 32768 });
+ failValue.add(new long[] { -8388608, 8388608 });
+ failValue.add(new long[] { -2147483648L, 2147483648L });
+ failValue.add(new long[] { -549755813888L, 549755813888L });
+ failValue.add(new long[] { -140737488355328L, 140737488355328L });
+ failValue.add(new long[] { -36028797018963968L, 36028797018963968L });
+ failValue.add(new long[] { -9223372036854775808L });
+ }
+
@Test
public void testOneMoreByteVLongDimEncPreserveOrder() {
+ // TODO: better test
OneMoreByteVLongDimEnc enc = new OneMoreByteVLongDimEnc(2);
List<ByteArray> encodedValues = Lists.newArrayList();
encodedValues.add(encode(enc, -32768L));
@@ -52,34 +98,15 @@ public class DimEncodingPreserveOrderTest {
@Test
public void testVLongDimEncPreserveOrder() {
- IntegerDimEnc enc = new IntegerDimEnc(2);
- List<ByteArray> encodedValues = Lists.newArrayList();
- encodedValues.add(encode(enc, -32767L));
- encodedValues.add(encode(enc, -10000L));
- encodedValues.add(encode(enc, -100L));
- encodedValues.add(encode(enc, 0L));
- encodedValues.add(encode(enc, 100L));
- encodedValues.add(encode(enc, 10000L));
- encodedValues.add(encode(enc, 32767L));
- encodedValues.add(encode(enc, null));
-
- assertTrue(Ordering.from(new DefaultGTComparator()).isOrdered(encodedValues));
- }
-
- @Test
- public void testVLongDimEncPreserveOrder2() {
- IntegerDimEnc enc = new IntegerDimEnc(8);
- List<ByteArray> encodedValues = Lists.newArrayList();
- encodedValues.add(encode(enc, -Long.MAX_VALUE));
- encodedValues.add(encode(enc, -10000L));
- encodedValues.add(encode(enc, -100L));
- encodedValues.add(encode(enc, 0L));
- encodedValues.add(encode(enc, 100L));
- encodedValues.add(encode(enc, 10000L));
- encodedValues.add(encode(enc, Long.MAX_VALUE));
- encodedValues.add(encode(enc, null));
-
- assertTrue(Ordering.from(new DefaultGTComparator()).isOrdered(encodedValues));
+ for (int i = 1; i <= successValue.size(); i++) {
+ IntegerDimEnc enc = new IntegerDimEnc(i);
+ List<ByteArray> encodedValues = Lists.newArrayList();
+ for (long value : successValue.get(i - 1)) {
+ encodedValues.add(encode(enc, value));
+ }
+ encodedValues.add(encode(enc, null));
+ assertTrue(Ordering.from(new DefaultGTComparator()).isOrdered(encodedValues));
+ }
}
private ByteArray encode(DimensionEncoding enc, Object value) {
http://git-wip-us.apache.org/repos/asf/kylin/blob/ab6e0835/core-metadata/src/main/java/org/apache/kylin/dimension/IntegerDimEnc.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/dimension/IntegerDimEnc.java b/core-metadata/src/main/java/org/apache/kylin/dimension/IntegerDimEnc.java
index dc9dff7..460ca65 100644
--- a/core-metadata/src/main/java/org/apache/kylin/dimension/IntegerDimEnc.java
+++ b/core-metadata/src/main/java/org/apache/kylin/dimension/IntegerDimEnc.java
@@ -128,7 +128,7 @@ public class IntegerDimEnc extends DimensionEncoding {
//only take useful bytes
integer = integer & MASK[fixedLen];
- boolean positive = (integer & ((0x80) << ((fixedLen - 1) << 3))) == 0;
+ boolean positive = (integer & ((0x80L) << ((fixedLen - 1) << 3))) == 0;
if (!positive) {
integer |= (~MASK[fixedLen]);
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/ab6e0835/core-metadata/src/test/java/org/apache/kylin/dimension/IntegerDimEncTest.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/test/java/org/apache/kylin/dimension/IntegerDimEncTest.java b/core-metadata/src/test/java/org/apache/kylin/dimension/IntegerDimEncTest.java
index 1bdb1d0..a9b2511 100644
--- a/core-metadata/src/test/java/org/apache/kylin/dimension/IntegerDimEncTest.java
+++ b/core-metadata/src/test/java/org/apache/kylin/dimension/IntegerDimEncTest.java
@@ -19,14 +19,60 @@
package org.apache.kylin.dimension;
import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.kylin.common.util.Bytes;
import org.apache.kylin.metadata.datatype.DataTypeSerializer;
import org.junit.Assert;
+import org.junit.BeforeClass;
import org.junit.Test;
public class IntegerDimEncTest {
+ private static List<long[]> successValue;
+ private static List<long[]> failValue;
+
+ @BeforeClass
+ public static void initTestValue() {
+ successValue = new ArrayList<>();
+ successValue.add(new long[] { -127, 0, 127 });
+ successValue.add(new long[] { -32767, -127, 0, 127, 32767 });
+ successValue.add(new long[] { -8388607, -32767, -127, 0, 127, 32767, 8388607 });
+ successValue.add(new long[] { -2147483647L, -8388607, -32767, -127, 0, 127, 32767, 8388607, 2147483647L });
+ successValue.add(new long[] { -549755813887L, -2147483647L, -8388607, -32767, -127, 0, 127, 32767, 8388607, 2147483647L, 549755813887L });
+ successValue.add(new long[] { -140737488355327L, -549755813887L, -2147483647L, -8388607, -32767, -127, 0, 127, 32767, 8388607, 2147483647L, 549755813887L, 140737488355327L });
+ successValue.add(new long[] { -36028797018963967L, -140737488355327L, -549755813887L, -2147483647L, -8388607, -32767, -127, 0, 127, 32767, 8388607, 2147483647L, 549755813887L, 140737488355327L, 36028797018963967L });
+ successValue.add(new long[] { //
+ -9223372036854775807L, //
+ -36028797018963967L, //
+ -140737488355327L, //
+ -549755813887L, //
+ -2147483647L, //
+ -8388607, //
+ -32767, //
+ -127, //
+ 0, //
+ 127, // (2 ^ 7) - 1
+ 32767, // (2 ^ 15) - 1
+ 8388607, // (2 ^ 23) - 1
+ 2147483647L, // (2 ^ 31) - 1
+ 549755813887L, // (2 ^ 39) - 1
+ 140737488355327L, // (2 ^ 47) - 1
+ 36028797018963967L, // (2 ^ 55) - 1
+ 9223372036854775807L }); // (2 ^ 63) - 1
+
+ failValue = new ArrayList<>();
+ failValue.add(new long[] { -128, 128 });
+ failValue.add(new long[] { -32768, 32768 });
+ failValue.add(new long[] { -8388608, 8388608 });
+ failValue.add(new long[] { -2147483648L, 2147483648L });
+ failValue.add(new long[] { -549755813888L, 549755813888L });
+ failValue.add(new long[] { -140737488355328L, 140737488355328L });
+ failValue.add(new long[] { -36028797018963968L, 36028797018963968L });
+ failValue.add(new long[] { -9223372036854775808L });
+ }
+
@Test
public void testConstructor() {
try {
@@ -66,43 +112,20 @@ public class IntegerDimEncTest {
@Test
public void testEncodeDecode() {
- IntegerDimEnc enc = new IntegerDimEnc(2);
- testEncodeDecode(enc, 0);
- testEncodeDecode(enc, 100);
- testEncodeDecode(enc, 10000);
- testEncodeDecode(enc, 32767);
- testEncodeDecode(enc, -100);
- testEncodeDecode(enc, -10000);
- testEncodeDecode(enc, -32767);
- try {
- testEncodeDecode(enc, 32768);
- Assert.fail();
- } catch (Throwable e) {
- Assert.assertEquals("expected:<32768> but was:<null>", e.getMessage());
- }
- try {
- testEncodeDecode(enc, -32768);
- Assert.fail();
- } catch (Throwable e) {
- Assert.assertEquals("expected:<-32768> but was:<null>", e.getMessage());
- }
- }
+ for (int i = 1; i <= successValue.size(); i++) {
+ IntegerDimEnc enc = new IntegerDimEnc(i);
+ for (long value : successValue.get(i - 1)) {
+ testEncodeDecode(enc, value);
+ }
- @Test
- public void testEncodeDecode2() {
- IntegerDimEnc enc = new IntegerDimEnc(8);
- testEncodeDecode(enc, 0);
- testEncodeDecode(enc, 100);
- testEncodeDecode(enc, 10000);
- testEncodeDecode(enc, Long.MAX_VALUE);
- testEncodeDecode(enc, -100);
- testEncodeDecode(enc, -10000);
- testEncodeDecode(enc, -Long.MAX_VALUE);
- try {
- testEncodeDecode(enc, Long.MIN_VALUE);
- Assert.fail();
- } catch (Throwable e) {
- Assert.assertEquals("expected:<-9223372036854775808> but was:<null>", e.getMessage());
+ for (long value : failValue.get(i - 1)) {
+ try {
+ testEncodeDecode(enc, value);
+ Assert.fail();
+ } catch (Throwable e) {
+ Assert.assertEquals("expected:<" + value + "> but was:<null>", e.getMessage());
+ }
+ }
}
}
@@ -117,25 +140,19 @@ public class IntegerDimEncTest {
@Test
public void testSerDes() {
- IntegerDimEnc enc = new IntegerDimEnc(2);
- testSerDes(enc, 0);
- testSerDes(enc, 100);
- testSerDes(enc, 10000);
- testSerDes(enc, 32767);
- testSerDes(enc, -100);
- testSerDes(enc, -10000);
- testSerDes(enc, -32767);
- try {
- testSerDes(enc, 32768);
- Assert.fail();
- } catch (Throwable e) {
- Assert.assertEquals("expected:<32768> but was:<null>", e.getMessage());
- }
- try {
- testSerDes(enc, -32768);
- Assert.fail();
- } catch (Throwable e) {
- Assert.assertEquals("expected:<-32768> but was:<null>", e.getMessage());
+ for (int i = 1; i <= successValue.size(); i++) {
+ IntegerDimEnc enc = new IntegerDimEnc(i);
+ for (long value : successValue.get(i - 1)) {
+ testSerDes(enc, value);
+ }
+ for (long value : failValue.get(i - 1)) {
+ try {
+ testSerDes(enc, value);
+ Assert.fail();
+ } catch (Throwable e) {
+ Assert.assertEquals("expected:<" + value + "> but was:<null>", e.getMessage());
+ }
+ }
}
}
@@ -147,5 +164,4 @@ public class IntegerDimEncTest {
String decode = (String) ser.deserialize(ByteBuffer.wrap(buf));
Assert.assertEquals(valueStr, decode);
}
-
}