ss: Fix a bug where depth of history tree increases at each new node
authorGeneviève Bastien <gbastien+lttng@versatic.net>
Wed, 28 Oct 2015 03:56:45 +0000 (23:56 -0400)
committerGenevieve Bastien <gbastien+lttng@versatic.net>
Sat, 31 Oct 2015 03:55:10 +0000 (23:55 -0400)
When adding a sibling after a new root, there was one too many levels.

Change-Id: I19f460347cbba91c5c1f70d9ee4566a3cb164f37
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
Reviewed-on: https://git.eclipse.org/r/59076
Reviewed-by: Hudson CI
statesystem/org.eclipse.tracecompass.statesystem.core.tests/src/org/eclipse/tracecompass/statesystem/core/tests/backend/HistoryTreeTest.java
statesystem/org.eclipse.tracecompass.statesystem.core.tests/stubs/org/eclipse/tracecompasss/statesystem/core/tests/stubs/backend/HistoryTreeStub.java
statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTree.java

index 350227e5927632df74eeea13d8c7b5e5c8a6086d..6c1ea9b717d0ed8d42fae40af50d3117db2f6739 100644 (file)
@@ -134,4 +134,49 @@ public class HistoryTreeTest {
 
     }
 
+    /**
+     * Test the addition of new nodes to the tree and make sure the tree is
+     * built with the right structure
+     */
+    @Test
+    public void testDepth() {
+        HistoryTreeStub ht = setupSmallTree();
+
+        /* Fill a first node */
+        HTNode node = ht.getLatestLeaf();
+        int nodeFreeSpace = node.getNodeFreeSpace();
+        int nbIntervals = nodeFreeSpace / (HTInterval.DATA_ENTRY_SIZE + TEST_STRING.length() + STRING_PADDING);
+        long start = fillValues(ht, STRING_VALUE, nbIntervals, 1);
+
+        /* Add intervals that should add a sibling to the node */
+        assertEquals(1, ht.getNodeCount());
+        assertEquals(1, ht.getDepth());
+        start = fillValues(ht, STRING_VALUE, 1, start);
+        assertEquals(3, ht.getNodeCount());
+        assertEquals(2, ht.getDepth());
+
+        /* Fill the latest leaf node (2nd child) */
+        node = ht.getLatestLeaf();
+        nodeFreeSpace = node.getNodeFreeSpace();
+        nbIntervals = nodeFreeSpace / (HTInterval.DATA_ENTRY_SIZE + TEST_STRING.length() + STRING_PADDING);
+        start = fillValues(ht, STRING_VALUE, nbIntervals, start);
+
+        /*
+         * Add an interval that should add another sibling to the previous nodes
+         */
+        start = fillValues(ht, STRING_VALUE, 1, start);
+        assertEquals(4, ht.getNodeCount());
+        assertEquals(2, ht.getDepth());
+
+        /* Fill the latest leaf node (3rd and last child) */
+        node = ht.getLatestLeaf();
+        nodeFreeSpace = node.getNodeFreeSpace();
+        nbIntervals = nodeFreeSpace / (HTInterval.DATA_ENTRY_SIZE + TEST_STRING.length() + STRING_PADDING);
+        start = fillValues(ht, STRING_VALUE, nbIntervals, start);
+
+        /* The new node created here should generate a new branch */
+        start = fillValues(ht, STRING_VALUE, 1, start);
+        assertEquals(7, ht.getNodeCount());
+        assertEquals(3, ht.getDepth());
+    }
 }
index 75c59294a4d740c29cba55543d94263469692c07..b26fd53e298d301e014184d46afded64619e3bbe 100644 (file)
@@ -67,4 +67,13 @@ public class HistoryTreeStub extends HistoryTree {
         return checkNotNull(latest.get(pos));
     }
 
+    /**
+     * Get the depth of the tree
+     *
+     * @return The depth of the tree
+     */
+    public int getDepth() {
+        return getLatestBranch().size();
+    }
+
 }
index 1cc3785e02731bacb5594d799aa506854c58f1a9..ebf47650658821efb14e865b0db9354b36721db3 100644 (file)
@@ -577,7 +577,7 @@ public class HistoryTree {
         fLatestBranch.add(newRootNode);
 
         // Create new coreNode
-        for (int i = 1; i < depth + 1; i++) {
+        for (int i = 1; i < depth; i++) {
             CoreNode prevNode = (CoreNode) fLatestBranch.get(i - 1);
             CoreNode newNode = initNewCoreNode(prevNode.getParentSequenceNumber(),
                     splitTime + 1);
@@ -586,7 +586,7 @@ public class HistoryTree {
         }
 
         // Create the new leafNode
-        CoreNode prevNode = (CoreNode) fLatestBranch.get(depth);
+        CoreNode prevNode = (CoreNode) fLatestBranch.get(depth - 1);
         LeafNode newNode = initNewLeafNode(prevNode.getParentSequenceNumber(), splitTime + 1);
         prevNode.linkNewChild(newNode);
         fLatestBranch.add(newNode);
This page took 0.026506 seconds and 5 git commands to generate.