Repository: kylin Updated Branches: refs/heads/master e53de3084 -> 425d56bb5
KYLIN-1538 fix DoubleDeltaSerializer for big numbers (over 32 bits) Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/425d56bb Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/425d56bb Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/425d56bb Branch: refs/heads/master Commit: 425d56bb5afccd99e666786f755cd4686a1706cc Parents: e53de30 Author: Li Yang <[email protected]> Authored: Mon Mar 28 16:19:35 2016 +0800 Committer: Li Yang <[email protected]> Committed: Mon Mar 28 16:19:35 2016 +0800 ---------------------------------------------------------------------- .../measure/topn/DoubleDeltaSerializer.java | 2 +- .../measure/topn/DoubleDeltaSerializerTest.java | 21 +++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/425d56bb/core-metadata/src/main/java/org/apache/kylin/measure/topn/DoubleDeltaSerializer.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/measure/topn/DoubleDeltaSerializer.java b/core-metadata/src/main/java/org/apache/kylin/measure/topn/DoubleDeltaSerializer.java index f972cbc..2d9e3ee 100644 --- a/core-metadata/src/main/java/org/apache/kylin/measure/topn/DoubleDeltaSerializer.java +++ b/core-metadata/src/main/java/org/apache/kylin/measure/topn/DoubleDeltaSerializer.java @@ -34,7 +34,7 @@ public class DoubleDeltaSerializer { static final long[] MASKS = new long[64]; { for (int i = 0; i < MASKS.length; i++) { - MASKS[i] = (1 << i) - 1; + MASKS[i] = (1L << i) - 1; } } http://git-wip-us.apache.org/repos/asf/kylin/blob/425d56bb/core-metadata/src/test/java/org/apache/kylin/measure/topn/DoubleDeltaSerializerTest.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/test/java/org/apache/kylin/measure/topn/DoubleDeltaSerializerTest.java b/core-metadata/src/test/java/org/apache/kylin/measure/topn/DoubleDeltaSerializerTest.java index 3a387f5..3c742a9 100644 --- a/core-metadata/src/test/java/org/apache/kylin/measure/topn/DoubleDeltaSerializerTest.java +++ b/core-metadata/src/test/java/org/apache/kylin/measure/topn/DoubleDeltaSerializerTest.java @@ -76,10 +76,29 @@ public class DoubleDeltaSerializerTest { System.out.println("doubles size of " + (n * 8) + " bytes serialized to " + buf.limit() + " bytes"); } + @Test + public void testRandom2() { + Random rand = new Random(); + int n = 1000; + + double[] nums = new double[n]; + for (int i = 0; i < n; i++) { + nums[i] = rand.nextInt(); + } + Arrays.sort(nums); + + buf.clear(); + dds.serialize(nums, buf); + buf.flip(); + double[] r = dds.deserialize(buf); + assertArrayEquals(nums, r); + System.out.println("doubles size of " + (n * 8) + " bytes serialized to " + buf.limit() + " bytes"); + } + private static void assertArrayEquals(double[] expected, double[] actual) { assertEquals(expected.length, actual.length); for (int i = 0; i < expected.length; i++) { - assertEquals(expected[i], actual[i], 0.01); + assertEquals(expected[i], actual[i], 0.02); } } }
