@@ -151,21 +151,25 @@ TEST(RNTupleBulk, RVec)
151
151
FileRaii fileGuard (" test_ntuple_bulk_rvec.root" );
152
152
{
153
153
auto model = RNTupleModel::Create ();
154
- auto fldVecI = model->MakeField <ROOT::RVecI>(" vint" );
155
- auto fldVecS = model->MakeField <ROOT::RVec<CustomStruct>>(" vs" );
156
- auto fldVecVI = model->MakeField <ROOT::RVec<ROOT::RVecI>>(" vvint" );
154
+ auto ptrVecI = model->MakeField <ROOT::RVecI>(" vint" );
155
+ auto ptrVecS = model->MakeField <ROOT::RVec<CustomStruct>>(" vs" );
156
+ auto ptrVecVI = model->MakeField <ROOT::RVec<ROOT::RVecI>>(" vvint" );
157
+ auto ptrVecArrI = model->MakeField <ROOT::RVec<std::array<int , 2 >>>(" varrint" );
157
158
auto writer = RNTupleWriter::Recreate (std::move (model), " ntpl" , fileGuard.GetPath ());
158
159
for (int i = 0 ; i < 10 ; ++i) {
159
- fldVecI->resize (i);
160
- fldVecS->resize (i);
161
- fldVecVI->resize (i);
160
+ ptrVecI->resize (i);
161
+ ptrVecS->resize (i);
162
+ ptrVecVI->resize (i);
163
+ ptrVecArrI->resize (i);
162
164
for (int j = 0 ; j < i; ++j) {
163
- fldVecI ->at (j) = j;
164
- fldVecS ->at (j).a = j;
165
- fldVecVI ->at (j).resize (j);
165
+ ptrVecI ->at (j) = j;
166
+ ptrVecS ->at (j).a = j;
167
+ ptrVecVI ->at (j).resize (j);
166
168
for (int k = 0 ; k < j; ++k) {
167
- fldVecVI ->at (j).at (k) = k;
169
+ ptrVecVI ->at (j).at (k) = k;
168
170
}
171
+ ptrVecArrI->at (j).at (0 ) = 1000 * i + 2 * j;
172
+ ptrVecArrI->at (j).at (1 ) = 1000 * i + 2 * j + 1 ;
169
173
}
170
174
writer->Fill ();
171
175
}
@@ -177,6 +181,7 @@ TEST(RNTupleBulk, RVec)
177
181
RFieldBase::RBulkValues bulkI = model.CreateBulk (" vint" );
178
182
RFieldBase::RBulkValues bulkS = model.CreateBulk (" vs" );
179
183
RFieldBase::RBulkValues bulkVI = model.CreateBulk (" vvint" );
184
+ RFieldBase::RBulkValues bulkVArrI = model.CreateBulk (" varrint" );
180
185
181
186
auto mask = std::make_unique<bool []>(10 );
182
187
std::fill (mask.get (), mask.get () + 10 , true );
@@ -185,12 +190,17 @@ TEST(RNTupleBulk, RVec)
185
190
auto iArr = static_cast <ROOT::RVecI *>(bulkI.ReadBulk (RNTupleLocalIndex (0 , 0 ), mask.get (), 10 ));
186
191
auto sArr = static_cast <ROOT::RVec<CustomStruct> *>(bulkS.ReadBulk (RNTupleLocalIndex (0 , 0 ), mask.get (), 10 ));
187
192
auto viArr = static_cast <ROOT::RVec<ROOT::RVecI> *>(bulkVI.ReadBulk (RNTupleLocalIndex (0 , 0 ), mask.get (), 10 ));
193
+ auto arriArr =
194
+ static_cast <ROOT::RVec<std::array<int , 2 >> *>(bulkVArrI.ReadBulk (RNTupleLocalIndex (0 , 0 ), mask.get (), 10 ));
188
195
for (int i = 0 ; i < 10 ; ++i) {
189
196
EXPECT_EQ (i, iArr[i].size ());
197
+ EXPECT_EQ (i, arriArr[i].size ());
190
198
EXPECT_EQ (i == 1 ? 0 : i, sArr [i].size ());
191
199
EXPECT_EQ (i == 1 ? 0 : i, viArr[i].size ());
192
- for (std:: size_t j = 0 ; j < iArr[i]. size () ; ++j) {
200
+ for (int j = 0 ; j < i ; ++j) {
193
201
EXPECT_EQ (j, iArr[i].at (j));
202
+ EXPECT_EQ (1000 * i + 2 * j, arriArr[i].at (j).at (0 ));
203
+ EXPECT_EQ (1000 * i + 2 * j + 1 , arriArr[i].at (j).at (1 ));
194
204
}
195
205
// RVec<PoD> should have all the vector elements of the bulk stored consecutively in memory
196
206
if (i > 1 ) {
0 commit comments