@@ -151,21 +151,25 @@ TEST(RNTupleBulk, RVec)
151151 FileRaii fileGuard (" test_ntuple_bulk_rvec.root" );
152152 {
153153 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" );
157158 auto writer = RNTupleWriter::Recreate (std::move (model), " ntpl" , fileGuard.GetPath ());
158159 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);
162164 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);
166168 for (int k = 0 ; k < j; ++k) {
167- fldVecVI ->at (j).at (k) = k;
169+ ptrVecVI ->at (j).at (k) = k;
168170 }
171+ ptrVecArrI->at (j).at (0 ) = 1000 * i + 2 * j;
172+ ptrVecArrI->at (j).at (1 ) = 1000 * i + 2 * j + 1 ;
169173 }
170174 writer->Fill ();
171175 }
@@ -177,6 +181,7 @@ TEST(RNTupleBulk, RVec)
177181 RFieldBase::RBulkValues bulkI = model.CreateBulk (" vint" );
178182 RFieldBase::RBulkValues bulkS = model.CreateBulk (" vs" );
179183 RFieldBase::RBulkValues bulkVI = model.CreateBulk (" vvint" );
184+ RFieldBase::RBulkValues bulkVArrI = model.CreateBulk (" varrint" );
180185
181186 auto mask = std::make_unique<bool []>(10 );
182187 std::fill (mask.get (), mask.get () + 10 , true );
@@ -185,12 +190,17 @@ TEST(RNTupleBulk, RVec)
185190 auto iArr = static_cast <ROOT::RVecI *>(bulkI.ReadBulk (RNTupleLocalIndex (0 , 0 ), mask.get (), 10 ));
186191 auto sArr = static_cast <ROOT::RVec<CustomStruct> *>(bulkS.ReadBulk (RNTupleLocalIndex (0 , 0 ), mask.get (), 10 ));
187192 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 ));
188195 for (int i = 0 ; i < 10 ; ++i) {
189196 EXPECT_EQ (i, iArr[i].size ());
197+ EXPECT_EQ (i, arriArr[i].size ());
190198 EXPECT_EQ (i == 1 ? 0 : i, sArr [i].size ());
191199 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) {
193201 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 ));
194204 }
195205 // RVec<PoD> should have all the vector elements of the bulk stored consecutively in memory
196206 if (i > 1 ) {
0 commit comments