5 #include "gtest/gtest.h"
11 using vec = std::vector<std::size_t>;
15 auto null_stream = std::unique_ptr<IJetStream>{
nullptr};
17 auto streamer = std::unique_ptr<JetStreamer> (
nullptr);
20 std::vector<std::size_t> jets0 {1, 2};
22 auto stream0 = std::make_unique<SimpleJetStream>(jets0,
23 std::move(null_stream),
26 streamer = std::make_unique<JetStreamer>(std::move(stream0));
29 }
else if (
test == 1) {
31 std::vector<std::size_t> jets_cs {5, 6, 7};
35 std::make_unique<CombinationsJetStream>(jets_cs,
36 std::move(null_stream),
40 streamer.reset(
new JetStreamer(std::move(stream0)));
42 }
else if (
test == 2) {
44 std::vector<std::size_t> jets0 {1, 2};
45 std::vector<std::size_t> jets1 {3, 4};
47 std::make_unique<SimpleJetStream>(jets1,
48 std::move(null_stream),
54 std::make_unique<SimpleJetStream>(jets0,
59 streamer.reset(
new JetStreamer(std::move(stream0)));
61 }
else if (
test == 3) {
63 std::vector<std::size_t> jets_cs {5, 6, 7};
65 std::vector<std::size_t> jets0 {1, 2};
70 std::make_unique<CombinationsJetStream>(jets_cs,
71 std::move(null_stream),
78 std::make_unique<SimpleJetStream>(jets0,
83 streamer.reset(
new JetStreamer(std::move(stream0)));
85 }
else if (
test == 4) {
87 std::vector<std::size_t> jets_cs {5, 6, 7};
89 std::vector<std::size_t> jets0 {1, 2};
93 std::make_unique<SimpleJetStream>(jets0,
94 std::move(null_stream),
100 std::make_unique<CombinationsJetStream>(jets_cs,
106 streamer.reset(
new JetStreamer(std::move(stream0)));
108 }
else if (
test == 5) {
111 std::vector<std::size_t> jets_cs {5, 6, 7};
113 std::vector<std::size_t> jets0 {1, 2};
114 std::vector<std::size_t> jets1 {3, 4};
117 std::make_unique<SimpleJetStream>(jets1,
118 std::move(null_stream),
123 std::make_unique<CombinationsJetStream>(jets_cs,
131 std::make_unique<SimpleJetStream>(jets0,
136 streamer.reset(
new JetStreamer(std::move(stream0)));
139 }
else if (
test == 6) {
142 std::vector<std::size_t> jets_cs {};
144 std::vector<std::size_t> jets0 {1, 2};
145 std::vector<std::size_t> jets1 {3, 4};
148 std::make_unique<SimpleJetStream>(jets1,
149 std::move(null_stream),
154 std::make_unique<CombinationsJetStream>(jets_cs,
162 std::make_unique<SimpleJetStream>(jets0,
167 streamer.reset(
new JetStreamer(std::move(stream0)));
170 }
else if (
test == 7) {
173 std::vector<std::size_t> jets_cs {5, 6, 7};
175 std::vector<std::size_t> jets0 {1, 2};
176 std::vector<std::size_t> jets1 {3, 4};
179 std::make_unique<SimpleJetStream>(jets1,
180 std::move(null_stream),
185 std::make_unique<CombinationsJetStream>(jets_cs,
193 std::make_unique<SimpleJetStream>(jets0,
198 streamer.reset(
new JetStreamer(std::move(stream0)));
201 }
else if (
test == 8) {
203 auto stream0 = std::unique_ptr<IJetStream>(
nullptr);
204 streamer.reset(
new JetStreamer(std::move(stream0)));
207 std::cerr <<
"unknown test << " <<
test <<
'\n';
212 TEST(JetStreamerTester, oneSimpleJetStream) {
215 EXPECT_EQ (
vec{1}, streamer->next());
216 EXPECT_EQ (
vec{2}, streamer->next());
217 EXPECT_EQ (
vec{}, streamer->next());
221 TEST(JetStreamerTester, oneCombinationsJetStream) {
227 EXPECT_EQ (
v0, streamer->next());
228 EXPECT_EQ (v1, streamer->next());
229 EXPECT_EQ (
v2, streamer->next());
230 EXPECT_EQ (
vec{}, streamer->next());
234 TEST(JetStreamerTester, twoSimpleJetStreams) {
242 EXPECT_EQ (
v0, streamer->next());
243 EXPECT_EQ (v1, streamer->next());
244 EXPECT_EQ (
v2, streamer->next());
245 EXPECT_EQ (v3, streamer->next());
246 EXPECT_EQ (
vec{}, streamer->next());
249 TEST(JetStreamerTester, SimpleThenCombinationsJetStreams) {
259 EXPECT_EQ (
v0, streamer->next());
260 EXPECT_EQ (v1, streamer->next());
261 EXPECT_EQ (
v2, streamer->next());
262 EXPECT_EQ (v3, streamer->next());
263 EXPECT_EQ (v4, streamer->next());
264 EXPECT_EQ (v5, streamer->next());
265 EXPECT_EQ (
vec{}, streamer->next());
268 TEST(JetStreamerTester, CombinationsThenSimpleJetStreams) {
278 EXPECT_EQ (
v0, streamer->next());
279 EXPECT_EQ (v1, streamer->next());
280 EXPECT_EQ (
v2, streamer->next());
281 EXPECT_EQ (v3, streamer->next());
282 EXPECT_EQ (v4, streamer->next());
283 EXPECT_EQ (v5, streamer->next());
284 EXPECT_EQ (
vec{}, streamer->next());
287 TEST(JetStreamerTester, SimmpleThenCombinationsThenSimpleJetStreams) {
303 EXPECT_EQ (
v0, streamer->next());
304 EXPECT_EQ (v1, streamer->next());
305 EXPECT_EQ (
v2, streamer->next());
306 EXPECT_EQ (v3, streamer->next());
307 EXPECT_EQ (v4, streamer->next());
308 EXPECT_EQ (v5, streamer->next());
309 EXPECT_EQ (v6, streamer->next());
310 EXPECT_EQ (v7, streamer->next());
311 EXPECT_EQ (v8, streamer->next());
312 EXPECT_EQ (v9, streamer->next());
313 EXPECT_EQ (v10, streamer->next());
314 EXPECT_EQ (v11, streamer->next());
315 EXPECT_EQ (
vec{}, streamer->next());
318 TEST(JetStreamerTester, InvalidJetIndices) {
321 EXPECT_EQ (
vec{}, streamer->next());
325 TEST(JetStreamerTester, InvalidNchooseK) {
328 EXPECT_EQ (
vec{}, streamer->next());
331 TEST(JetStreamerTester, InvalidJetStream) {
334 EXPECT_EQ (
vec{}, streamer->next());