|
| 1 | +#include "ntuple_test.hxx" |
| 2 | + |
| 3 | +#include <limits> |
| 4 | + |
| 5 | +TEST(RNTuple, DISABLED_LargeVector) |
| 6 | +{ |
| 7 | + FileRaii fileGuard("test_ntuple_large_vector.root"); |
| 8 | + |
| 9 | + // write out a vector too large for RVec |
| 10 | + { |
| 11 | + auto m = RNTupleModel::Create(); |
| 12 | + auto vec = m->MakeField<std::vector<int8_t>>("v"); |
| 13 | + auto writer = RNTupleWriter::Recreate(std::move(m), "r", fileGuard.GetPath()); |
| 14 | + vec->push_back(1); |
| 15 | + writer->Fill(); |
| 16 | + vec->resize(std::numeric_limits<std::int32_t>::max()); |
| 17 | + writer->Fill(); |
| 18 | + vec->push_back(2); |
| 19 | + writer->Fill(); |
| 20 | + vec->clear(); |
| 21 | + writer->Fill(); |
| 22 | + } |
| 23 | + |
| 24 | + ROOT::RNTupleReadOptions options; |
| 25 | + options.SetClusterCache(ROOT::RNTupleReadOptions::EClusterCache::kOff); |
| 26 | + auto reader = RNTupleReader::Open("r", fileGuard.GetPath(), options); |
| 27 | + ASSERT_EQ(4u, reader->GetNEntries()); |
| 28 | + |
| 29 | + auto viewRVec = reader->GetView<ROOT::RVec<int8_t>>("v"); |
| 30 | + EXPECT_EQ(1u, viewRVec(0).size()); |
| 31 | + EXPECT_EQ(1, viewRVec(0).at(0)); |
| 32 | + const auto &v1 = viewRVec(1); |
| 33 | + EXPECT_EQ(std::numeric_limits<std::int32_t>::max(), v1.size()); |
| 34 | + EXPECT_EQ(1, v1.at(0)); |
| 35 | + EXPECT_EQ(0, v1.at(1000)); |
| 36 | + EXPECT_THROW(viewRVec(2), ROOT::RException); |
| 37 | + EXPECT_TRUE(viewRVec(3).empty()); |
| 38 | + |
| 39 | + auto viewVector = reader->GetView<std::vector<int8_t>>("v"); |
| 40 | + const auto &v3 = viewVector(2); |
| 41 | + EXPECT_EQ(static_cast<std::size_t>(std::numeric_limits<std::int32_t>::max()) + 1, v3.size()); |
| 42 | + EXPECT_EQ(1, v3.at(0)); |
| 43 | + EXPECT_EQ(0, v3.at(1000)); |
| 44 | + EXPECT_EQ(2, v3.at(std::numeric_limits<std::int32_t>::max())); |
| 45 | +} |
0 commit comments