@@ -11,12 +11,32 @@ TEST_CASE("MultiSpan basic indexing", "[MultiSpan]") {
1111 edm::MultiSpan<int > emptyMultiSpan;
1212 edm::MultiSpan<int > ms;
1313
14+ edm::MultiSpan<int > ms1; // MultiSpan with empty span as first span
15+ edm::MultiSpan<int > ms2; // MultiSpan with several empty spans
16+ edm::MultiSpan<int > ms3; // MultiSpan with empty span as last span
17+
1418 std::vector<int > a = {1 , 2 , 3 };
1519 std::vector<int > b = {4 , 5 };
20+ std::vector<int > c;
1621
1722 ms.add (a);
1823 ms.add (b);
1924
25+ ms1.add (c);
26+ ms1.add (b);
27+ ms1.add (a);
28+
29+ ms2.add (b);
30+ ms2.add (c);
31+ ms2.add (c);
32+ ms2.add (c);
33+ ms2.add (b);
34+ ms2.add (a);
35+ ms2.add (c);
36+
37+ ms3.add (a);
38+ ms3.add (c);
39+
2040 using ElementType = decltype (ms[0 ]);
2141 // Check that the const-correctness of the MultiSpan
2242 static_assert (!std::is_assignable<ElementType, int >::value,
@@ -100,4 +120,59 @@ TEST_CASE("MultiSpan basic indexing", "[MultiSpan]") {
100120 REQUIRE (ms[3 ] == out[3 ]);
101121 REQUIRE (ms[4 ] == out[4 ]);
102122 }
123+
124+ SECTION (" Check MultiSpan with empty span as first span" ) {
125+ REQUIRE (ms1.size () == 5 );
126+
127+ REQUIRE (ms1[0 ] == b[0 ]);
128+ REQUIRE (ms1[1 ] == b[1 ]);
129+ REQUIRE (ms1[2 ] == a[0 ]);
130+ REQUIRE (ms1[3 ] == a[1 ]);
131+ REQUIRE (ms1[4 ] == a[2 ]);
132+
133+ REQUIRE (ms1.globalIndex (1 , 0 ) == 0 );
134+ REQUIRE (ms1.globalIndex (2 , 1 ) == 3 );
135+
136+ std::vector<int > collected;
137+ for (auto val : ms1) {
138+ collected.push_back (val);
139+ }
140+ REQUIRE (collected == std::vector<int >{b[0 ], b[1 ], a[0 ], a[1 ], a[2 ]});
141+ }
142+
143+ SECTION (" Check MultiSpan with serveral empty spans" ) {
144+ REQUIRE (ms2.size () == 7 );
145+
146+ REQUIRE (ms2[0 ] == b[0 ]);
147+ REQUIRE (ms2[1 ] == b[1 ]);
148+ REQUIRE (ms2[2 ] == b[0 ]);
149+ REQUIRE (ms2[3 ] == b[1 ]);
150+ REQUIRE (ms2[4 ] == a[0 ]);
151+ REQUIRE (ms2[5 ] == a[1 ]);
152+ REQUIRE (ms2[6 ] == a[2 ]);
153+
154+ REQUIRE (ms2.globalIndex (0 , 0 ) == 0 );
155+ REQUIRE (ms2.globalIndex (4 , 1 ) == 3 );
156+ REQUIRE (ms2.globalIndex (5 , 1 ) == 5 );
157+
158+ std::vector<int > collected;
159+ for (auto val : ms2) {
160+ collected.push_back (val);
161+ }
162+ REQUIRE (collected == std::vector<int >{b[0 ], b[1 ], b[0 ], b[1 ], a[0 ], a[1 ], a[2 ]});
163+ }
164+
165+ SECTION (" Check MultiSpan with serveral empty spans" ) {
166+ REQUIRE (ms3.size () == 3 );
167+
168+ REQUIRE (ms3[0 ] == a[0 ]);
169+ REQUIRE (ms3[1 ] == a[1 ]);
170+ REQUIRE (ms3[2 ] == a[2 ]);
171+
172+ std::vector<int > collected;
173+ for (auto val : ms3) {
174+ collected.push_back (val);
175+ }
176+ REQUIRE (collected == std::vector<int >{a[0 ], a[1 ], a[2 ]});
177+ }
103178}
0 commit comments