@@ -179,6 +179,27 @@ TEST(HistUtil, DenseCutsAccuracyTestWeights) {
179179 }
180180}
181181
182+ TEST (HistUtil, SortedWeightedExactCuts) {
183+ Context ctx;
184+ std::vector<float > x{0 .0f , 1 .0f , 2 .0f , 3 .0f , 4 .0f , 5 .0f };
185+ std::vector<float > weights{3 .0f , 0 .25f , 7 .0f , 2 .0f , 0 .5f , 4 .0f };
186+ auto dmat = GetDMatrixFromData (x, x.size (), 1 );
187+ dmat->Info ().weights_ .HostVector () = weights;
188+
189+ auto sorted_cuts = SketchOnDMatrix (&ctx, dmat.get (), x.size (), true );
190+ auto row_cuts = SketchOnDMatrix (&ctx, dmat.get (), x.size (), false );
191+
192+ ASSERT_EQ (sorted_cuts.Ptrs (), row_cuts.Ptrs ());
193+ ASSERT_EQ (sorted_cuts.Values ().size (), row_cuts.Values ().size ());
194+ ASSERT_EQ (sorted_cuts.Values ().size (), x.size ());
195+ for (std::size_t i = 1 ; i < x.size (); ++i) {
196+ EXPECT_FLOAT_EQ (sorted_cuts.Values ()[i - 1 ], x[i]);
197+ EXPECT_FLOAT_EQ (sorted_cuts.Values ()[i - 1 ], row_cuts.Values ()[i - 1 ]);
198+ }
199+ EXPECT_GT (sorted_cuts.Values ().back (), x.back ());
200+ EXPECT_FLOAT_EQ (sorted_cuts.Values ().back (), row_cuts.Values ().back ());
201+ }
202+
182203void TestQuantileWithHessian (bool use_sorted) {
183204 int bin_sizes[] = {2 , 16 , 256 , 512 };
184205 int sizes[] = {1000 , 1500 };
0 commit comments