diff --git a/tests/cpp/data/test_sparse_page_dmatrix.cc b/tests/cpp/data/test_sparse_page_dmatrix.cc index a99be4c63..2ea2475c2 100644 --- a/tests/cpp/data/test_sparse_page_dmatrix.cc +++ b/tests/cpp/data/test_sparse_page_dmatrix.cc @@ -26,23 +26,7 @@ TEST(SparsePageDMatrix, MetaInfo) { } TEST(SparsePageDMatrix, RowAccess) { - // Create sufficiently large data to make two row pages - dmlc::TemporaryDirectory tempdir; - const std::string tmp_file = tempdir.path + "/big.libsvm"; - CreateBigTestData(tmp_file, 12); - xgboost::DMatrix * dmat = xgboost::DMatrix::Load( - tmp_file + "#" + tmp_file + ".cache", true, false, "auto", 64UL); - EXPECT_TRUE(FileExists(tmp_file + ".cache.row.page")); - - // Loop over the batches and count the records - int64_t batch_count = 0; - int64_t row_count = 0; - for (const auto &batch : dmat->GetRowBatches()) { - batch_count++; - row_count += batch.Size(); - } - EXPECT_EQ(batch_count, 2); - EXPECT_EQ(row_count, dmat->Info().num_row_); + std::unique_ptr dmat = xgboost::CreateSparsePageDMatrix(); // Test the data read into the first row auto &batch = *dmat->GetRowBatches().begin(); @@ -50,8 +34,6 @@ TEST(SparsePageDMatrix, RowAccess) { ASSERT_EQ(first_row.size(), 3); EXPECT_EQ(first_row[2].index, 2); EXPECT_EQ(first_row[2].fvalue, 20); - - delete dmat; } TEST(SparsePageDMatrix, ColAccess) { diff --git a/tests/cpp/helpers.cc b/tests/cpp/helpers.cc index 57460e6e9..abe0ce776 100644 --- a/tests/cpp/helpers.cc +++ b/tests/cpp/helpers.cc @@ -5,6 +5,7 @@ #include "xgboost/c_api.h" #include #include +#include bool FileExists(const std::string& filename) { struct stat st; @@ -142,4 +143,38 @@ std::shared_ptr* CreateDMatrix(int rows, int columns, return static_cast *>(handle); } +std::unique_ptr CreateSparsePageDMatrix() { + // Create sufficiently large data to make two row pages + dmlc::TemporaryDirectory tempdir; + const std::string tmp_file = tempdir.path + "/big.libsvm"; + CreateBigTestData(tmp_file, 12); + std::unique_ptr dmat = std::unique_ptr(DMatrix::Load( + tmp_file + "#" + tmp_file + ".cache", true, false, "auto", 64UL)); + EXPECT_TRUE(FileExists(tmp_file + ".cache.row.page")); + + // Loop over the batches and count the records + int64_t batch_count = 0; + int64_t row_count = 0; + for (const auto &batch : dmat->GetRowBatches()) { + batch_count++; + row_count += batch.Size(); + } + EXPECT_EQ(batch_count, 2); + EXPECT_EQ(row_count, dmat->Info().num_row_); + + return dmat; +} + +gbm::GBTreeModel CreateTestModel() { + std::vector> trees; + trees.push_back(std::unique_ptr(new RegTree)); + (*trees.back())[0].SetLeaf(1.5f); + (*trees.back()).Stat(0).sum_hess = 1.0f; + gbm::GBTreeModel model(0.5); + model.CommitModel(std::move(trees), 0); + model.param.num_output_group = 1; + model.base_margin = 0; + return model; +} + } // namespace xgboost diff --git a/tests/cpp/helpers.h b/tests/cpp/helpers.h index 0b279a943..33dd072f2 100644 --- a/tests/cpp/helpers.h +++ b/tests/cpp/helpers.h @@ -17,6 +17,7 @@ #include #include #include +#include #if defined(__CUDACC__) #define DeclareUnifiedTest(name) GPU ## name @@ -153,5 +154,9 @@ class SimpleRealUniformDistribution { std::shared_ptr *CreateDMatrix(int rows, int columns, float sparsity, int seed = 0); +std::unique_ptr CreateSparsePageDMatrix(); + +gbm::GBTreeModel CreateTestModel(); + } // namespace xgboost #endif diff --git a/tests/cpp/predictor/test_cpu_predictor.cc b/tests/cpp/predictor/test_cpu_predictor.cc index 8f2712fdc..543ba3d42 100644 --- a/tests/cpp/predictor/test_cpu_predictor.cc +++ b/tests/cpp/predictor/test_cpu_predictor.cc @@ -9,14 +9,7 @@ TEST(cpu_predictor, Test) { std::unique_ptr cpu_predictor = std::unique_ptr(Predictor::Create("cpu_predictor")); - std::vector> trees; - trees.push_back(std::unique_ptr(new RegTree)); - (*trees.back())[0].SetLeaf(1.5f); - (*trees.back()).Stat(0).sum_hess = 1.0f; - gbm::GBTreeModel model(0.5); - model.CommitModel(std::move(trees), 0); - model.param.num_output_group = 1; - model.base_margin = 0; + gbm::GBTreeModel model = CreateTestModel(); int n_row = 5; int n_col = 5; @@ -62,34 +55,16 @@ TEST(cpu_predictor, Test) { } TEST(cpu_predictor, ExternalMemoryTest) { - // Create sufficiently large data to make two row pages - dmlc::TemporaryDirectory tempdir; - const std::string tmp_file = tempdir.path + "/big.libsvm"; - CreateBigTestData(tmp_file, 12); - xgboost::DMatrix *dmat = xgboost::DMatrix::Load( - tmp_file + "#" + tmp_file + ".cache", true, false, "auto", 64UL); - EXPECT_TRUE(FileExists(tmp_file + ".cache.row.page")); - int64_t batche_count = 0; - for (const auto &batch : dmat->GetRowBatches()) { - batche_count++; - } - EXPECT_EQ(batche_count, 2); + std::unique_ptr dmat = CreateSparsePageDMatrix(); std::unique_ptr cpu_predictor = std::unique_ptr(Predictor::Create("cpu_predictor")); - std::vector> trees; - trees.push_back(std::unique_ptr(new RegTree)); - (*trees.back())[0].SetLeaf(1.5f); - (*trees.back()).Stat(0).sum_hess = 1.0f; - gbm::GBTreeModel model(0.5); - model.CommitModel(std::move(trees), 0); - model.param.num_output_group = 1; - model.base_margin = 0; + gbm::GBTreeModel model = CreateTestModel(); // Test predict batch HostDeviceVector out_predictions; - cpu_predictor->PredictBatch(dmat, &out_predictions, model, 0); + cpu_predictor->PredictBatch(dmat.get(), &out_predictions, model, 0); std::vector &out_predictions_h = out_predictions.HostVector(); EXPECT_EQ(out_predictions.Size(), dmat->Info().num_row_); for (const auto& v : out_predictions_h) { @@ -98,7 +73,7 @@ TEST(cpu_predictor, ExternalMemoryTest) { // Test predict leaf std::vector leaf_out_predictions; - cpu_predictor->PredictLeaf(dmat, &leaf_out_predictions, model); + cpu_predictor->PredictLeaf(dmat.get(), &leaf_out_predictions, model); EXPECT_EQ(leaf_out_predictions.size(), dmat->Info().num_row_); for (const auto& v : leaf_out_predictions) { ASSERT_EQ(v, 0); @@ -106,7 +81,7 @@ TEST(cpu_predictor, ExternalMemoryTest) { // Test predict contribution std::vector out_contribution; - cpu_predictor->PredictContribution(dmat, &out_contribution, model); + cpu_predictor->PredictContribution(dmat.get(), &out_contribution, model); EXPECT_EQ(out_contribution.size(), dmat->Info().num_row_); for (const auto& v : out_contribution) { ASSERT_EQ(v, 1.5); @@ -114,12 +89,10 @@ TEST(cpu_predictor, ExternalMemoryTest) { // Test predict contribution (approximate method) std::vector out_contribution_approximate; - cpu_predictor->PredictContribution(dmat, &out_contribution_approximate, model, true); + cpu_predictor->PredictContribution(dmat.get(), &out_contribution_approximate, model, true); EXPECT_EQ(out_contribution_approximate.size(), dmat->Info().num_row_); for (const auto& v : out_contribution_approximate) { ASSERT_EQ(v, 1.5); } - - delete dmat; } } // namespace xgboost diff --git a/tests/cpp/predictor/test_gpu_predictor.cu b/tests/cpp/predictor/test_gpu_predictor.cu index b2cd23221..091e5b2c9 100644 --- a/tests/cpp/predictor/test_gpu_predictor.cu +++ b/tests/cpp/predictor/test_gpu_predictor.cu @@ -33,13 +33,7 @@ TEST(gpu_predictor, Test) { gpu_predictor->Init({}, {}); cpu_predictor->Init({}, {}); - std::vector> trees; - trees.push_back(std::unique_ptr(new RegTree())); - (*trees.back())[0].SetLeaf(1.5f); - (*trees.back()).Stat(0).sum_hess = 1.0f; - gbm::GBTreeModel model(0.5); - model.CommitModel(std::move(trees), 0); - model.param.num_output_group = 1; + gbm::GBTreeModel model = CreateTestModel(); int n_row = 5; int n_col = 5; @@ -181,13 +175,7 @@ TEST(gpu_predictor, MGPU_Test) { int n_row = i, n_col = i; auto dmat = CreateDMatrix(n_row, n_col, 0); - std::vector> trees; - trees.push_back(std::unique_ptr(new RegTree())); - (*trees.back())[0].SetLeaf(1.5f); - (*trees.back()).Stat(0).sum_hess = 1.0f; - gbm::GBTreeModel model(0.5); - model.CommitModel(std::move(trees), 0); - model.param.num_output_group = 1; + gbm::GBTreeModel model = CreateTestModel(); // Test predict batch HostDeviceVector gpu_out_predictions;