You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/12/23 23:34:21 UTC

kylin git commit: KYLIN-2320 fix getSizeOfId() for empty TrieDictionaryForest

Repository: kylin
Updated Branches:
  refs/heads/KYLIN-2314 9ef51f593 -> ab65bd56e


KYLIN-2320 fix getSizeOfId() for empty TrieDictionaryForest


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ab65bd56
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ab65bd56
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ab65bd56

Branch: refs/heads/KYLIN-2314
Commit: ab65bd56edd14fa5fb84b51826a7cd1f8307bb4f
Parents: 9ef51f5
Author: Yang Li <li...@apache.org>
Authored: Sat Dec 24 07:34:12 2016 +0800
Committer: Yang Li <li...@apache.org>
Committed: Sat Dec 24 07:34:12 2016 +0800

----------------------------------------------------------------------
 .../apache/kylin/dict/TrieDictionaryForest.java |  4 +-
 .../kylin/dict/TrieDictionaryForestTest.java    | 41 ++++++++++++++++----
 2 files changed, 35 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/ab65bd56/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionaryForest.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionaryForest.java b/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionaryForest.java
index 1015b11..e746348 100755
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionaryForest.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionaryForest.java
@@ -87,7 +87,7 @@ public class TrieDictionaryForest<T> extends Dictionary<T> {
     @Override
     public int getSizeOfId() {
         if (trees.isEmpty())
-            return -1;
+            return 1;
         int maxOffset = accuOffset.get(accuOffset.size() - 1);
         TrieDictionary<T> lastTree = trees.get(trees.size() - 1);
         int sizeOfId = BytesUtil.sizeForValue(baseId + maxOffset + lastTree.getMaxId() + 1);
@@ -96,7 +96,7 @@ public class TrieDictionaryForest<T> extends Dictionary<T> {
 
     @Override
     public int getSizeOfValue() {
-        int maxValue = -1;
+        int maxValue = 0;
         for (TrieDictionary<T> tree : trees)
             maxValue = Math.max(maxValue, tree.getSizeOfValue());
         return maxValue;

http://git-wip-us.apache.org/repos/asf/kylin/blob/ab65bd56/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestTest.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestTest.java b/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestTest.java
index 32a6ab5..238bb31 100755
--- a/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestTest.java
+++ b/core-dictionary/src/test/java/org/apache/kylin/dict/TrieDictionaryForestTest.java
@@ -52,6 +52,14 @@ import org.junit.Test;
 public class TrieDictionaryForestTest {
 
     @Test
+    public void testEmptyDict() {
+        ArrayList<String> strs = new ArrayList<String>();
+        TrieDictionaryForestBuilder<String> builder = newDictBuilder(strs, 0);
+        TrieDictionaryForest<String> dict = builder.build();
+        assertSameBehaviorAsTrie(dict, strs, 0);
+    }
+    
+    @Test
     public void testBasicFound() {
         ArrayList<String> strs = new ArrayList<String>();
         strs.add("part");
@@ -67,11 +75,11 @@ public class TrieDictionaryForestTest {
         dict.dump(System.out);
         int expectId = baseId;
         for (String s : strs) {
-            System.out.println("value:" + s + "  expect id:" + expectId);
             assertEquals(expectId, dict.getIdFromValue(s));
             expectId++;
         }
-        System.out.println("test ok");
+
+        assertSameBehaviorAsTrie(dict, strs, baseId);
     }
 
     @Test //one string one tree
@@ -95,11 +103,11 @@ public class TrieDictionaryForestTest {
         assertEquals(strs.size(), dict.getTrees().size());
         int expectId = baseId;
         for (String s : strs) {
-            System.out.println("value:" + s + "  expect id:" + expectId);
             assertEquals(expectId, dict.getIdFromValue(s));
             expectId++;
         }
-        System.out.println("test ok");
+        
+        assertSameBehaviorAsTrie(dict, strs, baseId);
     }
 
     @Test
@@ -115,11 +123,13 @@ public class TrieDictionaryForestTest {
         dict.dump(System.out);
         //null value query
         int id = dict.getIdFromValue(null, 0);
-        System.out.println(id);
+        assertEquals(255, id);
         id = dict.getIdFromValue(null, 1);
-        System.out.println(id);
+        assertEquals(255, id);
         id = dict.getIdFromValue(null, -1);
-        System.out.println(id);
+        assertEquals(255, id);
+        
+        assertSameBehaviorAsTrie(dict, strs, 0);
     }
 
     @Test
@@ -940,7 +950,7 @@ public class TrieDictionaryForestTest {
             b.addValue(strs.next());
         return b;
     }
-
+    
     private static class RandomStrings implements Iterable<String> {
         final private int size;
 
@@ -1022,4 +1032,19 @@ public class TrieDictionaryForestTest {
         return testData;
     }
 
+    private void assertSameBehaviorAsTrie(TrieDictionaryForest<String> dict, ArrayList<String> strs, int baseId) {
+        TrieDictionaryBuilder<String> trieBuilder = new TrieDictionaryBuilder<>(new StringBytesConverter());
+        for (String s : strs) {
+            if (s != null)
+                trieBuilder.addValue(s);
+        }
+        TrieDictionary<String> trie = trieBuilder.build(baseId);
+        
+        assertEquals(trie.getMaxId(), dict.getMaxId());
+        assertEquals(trie.getMinId(), dict.getMinId());
+        assertEquals(trie.getSize(), dict.getSize());
+        assertEquals(trie.getSizeOfId(), dict.getSizeOfId());
+        assertEquals(trie.getSizeOfValue(), dict.getSizeOfValue());
+    }
+
 }