Fix crash with approx tree method on cpu (#4510)

This commit is contained in:
sriramch
2019-05-29 10:11:29 -07:00
committed by Jiaming Yuan
parent c589eff941
commit 6e16900711
2 changed files with 32 additions and 3 deletions

View File

@@ -2,6 +2,7 @@
#include <vector>
#include "xgboost/data.h"
#include "../helpers.h"
namespace xgboost {
TEST(SparsePage, PushCSC) {
@@ -52,4 +53,28 @@ TEST(SparsePage, PushCSC) {
ASSERT_EQ(inst[i].index, indices_sol[i % 3]);
}
}
TEST(SparsePage, PushCSCAfterTranspose) {
const int n_entries = 9;
std::unique_ptr<DMatrix> dmat = CreateSparsePageDMatrix(n_entries, 64UL);
const int ncols = dmat->Info().num_col_;
SparsePage page; // Consolidated sparse page
for (const auto &batch : dmat->GetRowBatches()) {
// Transpose each batch and push
SparsePage tmp = batch.GetTranspose(ncols);
page.PushCSC(tmp);
}
// Make sure that the final sparse page has the right number of entries
ASSERT_EQ(n_entries, page.data.Size());
// The feature value for a feature in each row should be identical, as that is
// how the dmatrix has been created
for (int i = 0; i < page.Size(); ++i) {
auto inst = page[i];
for (int j = 1; j < inst.size(); ++j) {
ASSERT_EQ(inst[0].fvalue, inst[j].fvalue);
}
}
}
} // namespace xgboost