Add an option to run brute-force test for JSON round-trip (#5804)
* Add an option to run brute-force test for JSON round-trip * Apply reviewer's feedback * Remove unneeded objects * Parallel run. * Max. * Use signed 64-bit loop var, to support MSVC * Add exhaustive test to CI * Run JSON test in Win build worker * Revert "Run JSON test in Win build worker" This reverts commit c97b2c7dda37b3585b445d36961605b79552ca89. * Revert "Add exhaustive test to CI" This reverts commit c149c2ce9971a07a7289f9b9bc247818afd5a667. Co-authored-by: fis <jm.yuan@outlook.com>
This commit is contained in:
parent
abdf894fcf
commit
a67bc64819
@ -545,10 +545,32 @@ TEST(Json, RoundTrip) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto t = i;
|
auto t = i;
|
||||||
i+= static_cast<uint32_t>(dist(&rng));
|
i += static_cast<uint32_t>(dist(&rng));
|
||||||
if (i < t) {
|
if (i < t) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Json, DISABLED_RoundTripExhaustive) {
|
||||||
|
auto test = [](uint32_t i) {
|
||||||
|
float f;
|
||||||
|
std::memcpy(&f, &i, sizeof(f));
|
||||||
|
|
||||||
|
Json jf{f};
|
||||||
|
std::string str;
|
||||||
|
Json::Dump(jf, &str);
|
||||||
|
auto loaded = Json::Load({str.c_str(), str.size()});
|
||||||
|
if (XGBOOST_EXPECT(std::isnan(f), false)) {
|
||||||
|
EXPECT_TRUE(std::isnan(get<Number const>(loaded)));
|
||||||
|
} else {
|
||||||
|
EXPECT_EQ(get<Number const>(loaded), f);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
int64_t int32_max = static_cast<int64_t>(std::numeric_limits<uint32_t>::max());
|
||||||
|
#pragma omp parallel for schedule(static)
|
||||||
|
for (int64_t i = 0; i <= int32_max; ++i) {
|
||||||
|
test(static_cast<uint32_t>(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
} // namespace xgboost
|
} // namespace xgboost
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user