8 #ifndef TEST_UFO_RECURSIVESPLITTER_H_
9 #define TEST_UFO_RECURSIVESPLITTER_H_
17 #include "eckit/testing/Test.h"
18 #include "oops/runs/Test.h"
19 #include "oops/util/Expect.h"
30 for (
const auto &g : splitter.groups()) {
41 for (
const auto &g : splitter.multiElementGroups()) {
50 CASE(
"ufo/RecursiveSplitter/ZeroIds") {
55 EXPECT_EQUAL(groups, expectedGroups);
57 Groups expectedMultiElementGroups;
59 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
63 std::vector<size_t> categories;
64 splitter.groupBy(categories);
68 EXPECT_EQUAL(groups, expectedGroups);
70 Groups expectedMultiElementGroups;
72 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
76 CASE(
"ufo/RecursiveSplitter/OneId") {
79 Groups expectedGroups{{0}};
81 EXPECT_EQUAL(groups, expectedGroups);
83 Groups expectedMultiElementGroups;
85 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
89 std::vector<size_t> categories{1};
90 splitter.groupBy(categories);
92 Groups expectedGroups{{0}};
94 EXPECT_EQUAL(groups, expectedGroups);
96 Groups expectedMultiElementGroups;
98 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
102 CASE(
"ufo/RecursiveSplitter/TenIds") {
105 Groups expectedGroups{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}};
107 EXPECT_EQUAL(groups, expectedGroups);
109 Groups expectedMultiElementGroups{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}};
111 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
115 std::vector<size_t> categories{1, 2, 1, 2, 1, 2, 1, 2, 1, 2};
116 splitter.groupBy(categories);
118 Groups expectedGroups{{0, 2, 4, 6, 8}, {1, 3, 5, 7, 9}};
120 EXPECT_EQUAL(groups, expectedGroups);
122 Groups expectedMultiElementGroups{{0, 2, 4, 6, 8}, {1, 3, 5, 7, 9}};
124 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
129 std::vector<size_t> categories{3, 2, 1, 2, 3, 2, 4, 2, 3, 2};
130 splitter.groupBy(categories);
132 Groups expectedGroups{{2}, {0, 4, 8}, {6}, {1, 3, 5, 7, 9}};
134 EXPECT_EQUAL(groups, expectedGroups);
136 Groups expectedMultiElementGroups{{0, 4, 8}, {1, 3, 5, 7, 9}};
138 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
144 std::vector<size_t> categories{1, 3, 1, 3, 1, 2, 1, 1, 1, 1};
145 splitter.groupBy(categories);
147 Groups expectedGroups{{2}, {0, 4, 8}, {6}, {1, 3}, {5}, {7, 9}};
149 EXPECT_EQUAL(groups, expectedGroups);
151 Groups expectedMultiElementGroups{{0, 4, 8}, {7, 9}, {1, 3}};
153 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
157 CASE(
"ufo/RecursiveSplitter/IntCategories") {
161 std::vector<int> categories{1, 2, 1, 2, 1, 2, 1, 2, 1, 2};
162 splitter.groupBy(categories);
164 Groups expectedGroups{{0, 2, 4, 6, 8}, {1, 3, 5, 7, 9}};
166 EXPECT_EQUAL(groups, expectedGroups);
168 Groups expectedMultiElementGroups{{0, 2, 4, 6, 8}, {1, 3, 5, 7, 9}};
170 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
174 CASE(
"ufo/RecursiveSplitter/StringCategories") {
178 std::vector<std::string> categories{
"abc",
"def",
"abc",
"def",
179 "abc",
"def",
"abc",
"def",
181 splitter.groupBy(categories);
183 Groups expectedGroups{{0, 2, 4, 6, 8}, {1, 3, 5, 7, 9}};
185 EXPECT_EQUAL(groups, expectedGroups);
187 Groups expectedMultiElementGroups{{0, 2, 4, 6, 8}, {1, 3, 5, 7, 9}};
189 EXPECT_EQUAL(multiElementGroups, expectedMultiElementGroups);
198 std::string
testid()
const override {
return "ufo::test::RecursiveSplitter";}
208 #endif // TEST_UFO_RECURSIVESPLITTER_H_