Skip to content

Commit b0449c0

Browse files
committed
[ntuple] add serialization test of descriptor with attribute sets
1 parent ced87f4 commit b0449c0

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

tree/ntuple/test/ntuple_serialize.cxx

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2082,3 +2082,93 @@ TEST(RNTuple, SerializeAttrSets)
20822082

20832083
ASSERT_EQ(attrSetDesc, deserializedDesc);
20842084
}
2085+
2086+
TEST(RNTuple, SerializeDescriptorWithAttrSets)
2087+
{
2088+
RNTupleDescriptorBuilder builder;
2089+
builder.SetVersionForWriting();
2090+
builder.SetNTuple("ntpl", "");
2091+
2092+
builder.AddField(RFieldDescriptorBuilder()
2093+
.FieldId(0)
2094+
.FieldName("")
2095+
.Structure(ROOT::ENTupleStructure::kRecord)
2096+
.MakeDescriptor()
2097+
.Unwrap());
2098+
2099+
builder.AddField(RFieldDescriptorBuilder()
2100+
.FieldId(5)
2101+
.FieldName("pt")
2102+
.TypeName("float")
2103+
.Structure(ROOT::ENTupleStructure::kPlain)
2104+
.MakeDescriptor()
2105+
.Unwrap());
2106+
builder.AddFieldLink(0, 5);
2107+
builder.AddColumn(RColumnDescriptorBuilder()
2108+
.LogicalColumnId(0)
2109+
.PhysicalColumnId(0)
2110+
.FieldId(5)
2111+
.BitsOnStorage(32)
2112+
.Type(ROOT::ENTupleColumnType::kReal32)
2113+
.FirstElementIndex(1)
2114+
.MakeDescriptor()
2115+
.Unwrap());
2116+
builder.AddColumn(RColumnDescriptorBuilder()
2117+
.LogicalColumnId(1)
2118+
.PhysicalColumnId(1)
2119+
.FieldId(5)
2120+
.BitsOnStorage(16)
2121+
.Type(ROOT::ENTupleColumnType::kReal16)
2122+
.RepresentationIndex(1)
2123+
.FirstElementIndex(1)
2124+
.SetSuppressedDeferred()
2125+
.MakeDescriptor()
2126+
.Unwrap());
2127+
2128+
RNTupleLocator locator;
2129+
locator.SetType(ROOT::RNTupleLocator::kTypeFile);
2130+
locator.SetPosition(128ul);
2131+
auto attrSetDesc = ROOT::Experimental::Internal::RNTupleAttrSetDescriptor{1, // schema version major
2132+
0, // schema version minor
2133+
1024, // uncomp len
2134+
locator, "AttrSetName"};
2135+
// First cluster
2136+
RClusterDescriptorBuilder clusterBuilder;
2137+
clusterBuilder.ClusterId(0).FirstEntryIndex(0).NEntries(1);
2138+
builder.AddCluster(clusterBuilder.MoveDescriptor().Unwrap());
2139+
2140+
RClusterGroupDescriptorBuilder cgBuilder;
2141+
cgBuilder.ClusterGroupId(0).NClusters(1).EntrySpan(3);
2142+
cgBuilder.AddSortedClusters({0});
2143+
builder.AddClusterGroup(cgBuilder.MoveDescriptor().Unwrap());
2144+
2145+
builder.AddAttributeSet(std::move(attrSetDesc));
2146+
auto desc = builder.MoveDescriptor();
2147+
2148+
auto context = RNTupleSerializer::SerializeHeader(nullptr, desc).Unwrap();
2149+
auto bufHeader = MakeUninitArray<unsigned char>(context.GetHeaderSize());
2150+
context = RNTupleSerializer::SerializeHeader(bufHeader.get(), desc).Unwrap();
2151+
2152+
std::vector<ROOT::DescriptorId_t> physClusterIDs{context.MapClusterId(0)};
2153+
context.MapClusterGroupId(0);
2154+
auto sizePageList = RNTupleSerializer::SerializePageList(nullptr, desc, physClusterIDs, context).Unwrap();
2155+
EXPECT_GT(sizePageList, 0);
2156+
auto bufPageList = MakeUninitArray<unsigned char>(sizePageList);
2157+
EXPECT_EQ(sizePageList,
2158+
RNTupleSerializer::SerializePageList(bufPageList.get(), desc, physClusterIDs, context).Unwrap());
2159+
2160+
auto sizeFooter = RNTupleSerializer::SerializeFooter(nullptr, desc, context).Unwrap();
2161+
EXPECT_GT(sizeFooter, 0);
2162+
auto bufFooter = MakeUninitArray<unsigned char>(sizeFooter);
2163+
EXPECT_EQ(sizeFooter, RNTupleSerializer::SerializeFooter(bufFooter.get(), desc, context).Unwrap());
2164+
2165+
builder.SetVersionForWriting();
2166+
RNTupleSerializer::DeserializeHeader(bufHeader.get(), context.GetHeaderSize(), builder).ThrowOnError();
2167+
RNTupleSerializer::DeserializeFooter(bufFooter.get(), sizeFooter, builder);
2168+
auto deserializedDesc = builder.MoveDescriptor();
2169+
RNTupleSerializer::DeserializePageList(bufPageList.get(), sizePageList, 0, deserializedDesc,
2170+
EDeserializeMode::kForReading);
2171+
2172+
ASSERT_EQ(ROOT::Experimental::Internal::GetAttributeSets(desc),
2173+
ROOT::Experimental::Internal::GetAttributeSets(deserializedDesc));
2174+
}

0 commit comments

Comments
 (0)