[Breaking] Add global versioning. (#4936)
* Use CMake config file for representing version. * Generate c and Python version file with CMake. The generated file is written into source tree. But unless XGBoost upgrades its version, there will be no actual modification. This retains compatibility with Makefiles for R. * Add XGBoost version the DMatrix binaries. * Simplify prefetch detection in CMakeLists.txt
This commit is contained in:
@@ -63,3 +63,9 @@ TEST(c_api, XGDMatrixCreateFromMat_omp) {
|
||||
delete dmat;
|
||||
}
|
||||
}
|
||||
|
||||
TEST(c_api, Version) {
|
||||
int patch {0};
|
||||
XGBoostVersion(NULL, NULL, &patch); // NOLINT
|
||||
ASSERT_EQ(patch, XGBOOST_VER_PATCH);
|
||||
}
|
||||
|
||||
61
tests/cpp/common/test_version.cc
Normal file
61
tests/cpp/common/test_version.cc
Normal file
@@ -0,0 +1,61 @@
|
||||
/*!
|
||||
* Copyright 2019 XGBoost contributors
|
||||
*/
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <dmlc/filesystem.h>
|
||||
#include <dmlc/io.h>
|
||||
|
||||
#include <xgboost/json.h>
|
||||
#include <xgboost/base.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "../../../src/common/version.h"
|
||||
|
||||
namespace xgboost {
|
||||
TEST(Version, Basic) {
|
||||
Json j_ver { Object() };
|
||||
Version::Save(&j_ver);
|
||||
auto triplet { Version::Load(j_ver) };
|
||||
ASSERT_TRUE(Version::Same(triplet));
|
||||
|
||||
dmlc::TemporaryDirectory tempdir;
|
||||
const std::string fname = tempdir.path + "/version";
|
||||
|
||||
{
|
||||
std::unique_ptr<dmlc::Stream> fo(dmlc::Stream::Create(fname.c_str(), "w"));
|
||||
Version::Save(fo.get());
|
||||
}
|
||||
|
||||
{
|
||||
std::unique_ptr<dmlc::Stream> fi(dmlc::Stream::Create(fname.c_str(), "r"));
|
||||
auto triplet { Version::Load(fi.get())};;
|
||||
ASSERT_TRUE(Version::Same(triplet));
|
||||
}
|
||||
|
||||
std::string str { Version::String(triplet) };
|
||||
|
||||
size_t ptr {0};
|
||||
XGBoostVersionT v {0};
|
||||
v = std::stoi(str, &ptr);
|
||||
ASSERT_EQ(str.at(ptr), '.');
|
||||
ASSERT_EQ(v, XGBOOST_VER_MAJOR) << "major: " << v;
|
||||
|
||||
str = str.substr(ptr+1);
|
||||
|
||||
ptr = 0;
|
||||
v = std::stoi(str, &ptr);
|
||||
ASSERT_EQ(str.at(ptr), '.');
|
||||
ASSERT_EQ(v, XGBOOST_VER_MINOR) << "minor: " << v;;
|
||||
|
||||
str = str.substr(ptr+1);
|
||||
|
||||
ptr = 0;
|
||||
v = std::stoi(str, &ptr);
|
||||
ASSERT_EQ(v, XGBOOST_VER_MINOR) << "patch: " << v;;
|
||||
|
||||
str = str.substr(ptr);
|
||||
ASSERT_EQ(str.size(), 0);
|
||||
}
|
||||
} // namespace xgboost
|
||||
@@ -51,20 +51,24 @@ TEST(MetaInfo, SaveLoadBinary) {
|
||||
|
||||
dmlc::TemporaryDirectory tempdir;
|
||||
const std::string tmp_file = tempdir.path + "/metainfo.binary";
|
||||
dmlc::Stream* fs = dmlc::Stream::Create(tmp_file.c_str(), "w");
|
||||
info.SaveBinary(fs);
|
||||
delete fs;
|
||||
{
|
||||
std::unique_ptr<dmlc::Stream> fs {
|
||||
dmlc::Stream::Create(tmp_file.c_str(), "w")
|
||||
};
|
||||
info.SaveBinary(fs.get());
|
||||
}
|
||||
|
||||
ASSERT_EQ(GetFileSize(tmp_file), 76)
|
||||
<< "Expected saved binary file size to be same as object size";
|
||||
ASSERT_EQ(GetFileSize(tmp_file), 92)
|
||||
<< "Expected saved binary file size to be same as object size";
|
||||
|
||||
fs = dmlc::Stream::Create(tmp_file.c_str(), "r");
|
||||
std::unique_ptr<dmlc::Stream> fs {
|
||||
dmlc::Stream::Create(tmp_file.c_str(), "r")
|
||||
};
|
||||
xgboost::MetaInfo inforead;
|
||||
inforead.LoadBinary(fs);
|
||||
inforead.LoadBinary(fs.get());
|
||||
EXPECT_EQ(inforead.labels_.HostVector(), info.labels_.HostVector());
|
||||
EXPECT_EQ(inforead.num_col_, info.num_col_);
|
||||
EXPECT_EQ(inforead.num_row_, info.num_row_);
|
||||
delete fs;
|
||||
}
|
||||
|
||||
TEST(MetaInfo, LoadQid) {
|
||||
|
||||
Reference in New Issue
Block a user