File: test_numeric.cc

package info (click to toggle)
xgboost 3.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 13,796 kB
  • sloc: cpp: 67,502; python: 35,503; java: 4,676; ansic: 1,426; sh: 1,320; xml: 1,197; makefile: 204; javascript: 19
file content (43 lines) | stat: -rw-r--r-- 1,277 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*!
 * Copyright 2022, XGBoost contributors.
 */
#include <gtest/gtest.h>

#include <numeric>

#include "../../../src/common/numeric.h"

namespace xgboost {
namespace common {
TEST(Numeric, PartialSum) {
  {
    std::vector<size_t> values{1, 2, 3, 4};
    std::vector<size_t> result(values.size() + 1);
    Context ctx;
    PartialSum(ctx.Threads(), values.begin(), values.end(), static_cast<size_t>(0), result.begin());
    std::vector<size_t> sol(values.size() + 1, 0);
    std::partial_sum(values.begin(), values.end(), sol.begin() + 1);
    ASSERT_EQ(sol, result);
  }
  {
    std::vector<double> values{1.5, 2.5, 3.5, 4.5};
    std::vector<double> result(values.size() + 1);
    Context ctx;
    PartialSum(ctx.Threads(), values.begin(), values.end(), 0.0, result.begin());
    std::vector<double> sol(values.size() + 1, 0.0);
    std::partial_sum(values.begin(), values.end(), sol.begin() + 1);
    ASSERT_EQ(sol, result);
  }
}

TEST(Numeric, Reduce) {
  Context ctx;
  ASSERT_TRUE(ctx.IsCPU());
  HostDeviceVector<float> values(20);
  auto& h_values = values.HostVector();
  std::iota(h_values.begin(), h_values.end(), 0.0f);
  auto sum = Reduce(&ctx, values);
  ASSERT_EQ(sum, (values.Size() - 1) * values.Size() / 2);
}
}  // namespace common
}  // namespace xgboost