| 237 | } // namespace |
| 238 | |
| 239 | TEST_P(QuantileSummaryTest, Invariants) { |
| 240 | auto c = GetParam(); |
| 241 | auto col = GenerateSummaryColumn(c); |
| 242 | |
| 243 | WQuantileSketch row_sketch{c.rows, SketchEpsilon(c.max_bin, c.rows)}; |
| 244 | for (std::size_t i = 0; i < col.values.size(); ++i) { |
| 245 | row_sketch.Push(col.values[i], col.weights[i]); |
| 246 | } |
| 247 | auto row_summary = row_sketch.GetSummary(SketchSummaryBudget(c.max_bin, c.rows)); |
| 248 | TestSummaryInvariants(c, row_summary, col); |
| 249 | |
| 250 | WQuantileSketch sorted_sketch{c.rows, SketchEpsilon(c.max_bin, c.rows)}; |
| 251 | std::vector<::xgboost::Entry> sorted_col; |
| 252 | sorted_col.reserve(col.values.size()); |
| 253 | for (std::size_t i = 0; i < col.values.size(); ++i) { |
| 254 | sorted_col.emplace_back(i, col.values[i]); |
| 255 | } |
| 256 | std::sort(sorted_col.begin(), sorted_col.end(), ::xgboost::Entry::CmpValue); |
| 257 | sorted_sketch.PushSorted(Span<::xgboost::Entry const>{sorted_col.data(), sorted_col.size()}, |
| 258 | col.weights, c.max_bin); |
| 259 | auto sorted_summary = sorted_sketch.GetSummary(SketchSummaryBudget(c.max_bin, c.rows)); |
| 260 | TestSummaryInvariants(c, sorted_summary, col); |
| 261 | } |
| 262 | |
| 263 | INSTANTIATE_TEST_SUITE_P(Anchors, QuantileSummaryTest, ::testing::ValuesIn(SummaryAnchorCases()), |
| 264 | SummaryCaseName); |
nothing calls this directly
no test coverage detected