Fix node reuse. (#4404)

* Reinitialize `_sindex` when reallocating a deleted node.
This commit is contained in:
Jiaming Yuan
2019-04-27 13:03:23 +08:00
committed by GitHub
parent 37dc82c3ff
commit 77c03538b0
2 changed files with 24 additions and 2 deletions

View File

@@ -84,4 +84,21 @@ TEST(Tree, Load) {
EXPECT_EQ(tree[1].LeafValue(), 0.1f);
EXPECT_TRUE(tree[1].IsLeaf());
}
TEST(Tree, AllocateNode) {
RegTree tree;
tree.ExpandNode(
0, 0, 0.0f, false, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
tree.CollapseToLeaf(0, 0);
ASSERT_EQ(tree.NumExtraNodes(), 0);
tree.ExpandNode(
0, 0, 0.0f, false, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
ASSERT_EQ(tree.NumExtraNodes(), 2);
auto& nodes = tree.GetNodes();
ASSERT_FALSE(nodes.at(1).IsDeleted());
ASSERT_TRUE(nodes.at(1).IsLeaf());
ASSERT_TRUE(nodes.at(2).IsLeaf());
}
} // namespace xgboost