File: test_group_data.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 (55 lines) | stat: -rw-r--r-- 1,481 bytes parent folder | download | duplicates (2)
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
44
45
46
47
48
49
50
51
52
53
54
55
/*!
 * Copyright 2019 by Contributors
 */
#include <gtest/gtest.h>
#include <xgboost/data.h>
#include "../../../src/common/group_data.h"

namespace xgboost {
namespace common {

TEST(GroupData, ParallelGroupBuilder) {
  std::vector<size_t> offsets;
  std::vector<Entry> data;
  ParallelGroupBuilder<Entry, size_t> builder(&offsets, &data);
  builder.InitBudget(0, 1);
  // Add two rows with two elements each
  builder.AddBudget(0, 0, 2);
  builder.AddBudget(1, 0, 2);

  builder.InitStorage();
  builder.Push(0, Entry(0, 0), 0);
  builder.Push(0, Entry(1, 1), 0);
  builder.Push(1, Entry(0, 2), 0);
  builder.Push(1, Entry(1, 3), 0);

  std::vector<Entry> expected_data{
      Entry(0, 0),
      Entry(1, 1),
      Entry(0, 2),
      Entry(1, 3),
  };
  std::vector<size_t> expected_offsets{0, 2, 4};

  EXPECT_EQ(data, expected_data);
  EXPECT_EQ(offsets, expected_offsets);

  // Create new builder, add one more row given already populated offsets/data
  ParallelGroupBuilder<Entry, size_t> builder2(&offsets, &data,
                                               offsets.size() - 1);
  builder2.InitBudget(0, 1);
  builder2.AddBudget(2, 0, 2);
  builder2.InitStorage();
  builder2.Push(2, Entry(0, 4), 0);
  builder2.Push(2, Entry(1, 5), 0);

  expected_data.emplace_back(0, 4);
  expected_data.emplace_back(1, 5);
  expected_offsets.emplace_back(6);

  EXPECT_EQ(data, expected_data);
  EXPECT_EQ(offsets, expected_offsets);
}

}  // namespace common
}  // namespace xgboost