Skip to content

Commit 77ae690

Browse files
committed
[RDF] Add tests for GetDatasetGlobalClusterBoundaries
1 parent 3734652 commit 77ae690

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

tree/dataframe/test/dataframe_utils.cxx

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "ROOT/RDataFrame.hxx"
22
#include "ROOT/RDF/Utils.hxx"
3+
#include "ROOT/RNTupleDS.hxx"
34
#include "TTree.h"
45

56
#include "gtest/gtest.h"
@@ -237,3 +238,91 @@ TEST(RDataFrameUtils, TypeName2TypeID)
237238
EXPECT_THROW(RDFInt::TypeName2TypeID("float *"), std::runtime_error);
238239
EXPECT_THROW(RDFInt::TypeName2TypeID("float &"), std::runtime_error);
239240
}
241+
242+
TEST(RDataFrameUtils, GetClusterRanges)
243+
{
244+
// Helper RAII class for file cleanup
245+
class FileRAII {
246+
private:
247+
std::string fPath;
248+
249+
public:
250+
explicit FileRAII(const std::string &path) : fPath(path) {}
251+
FileRAII(const FileRAII &) = delete;
252+
FileRAII &operator=(const FileRAII &) = delete;
253+
~FileRAII() { std::remove(fPath.c_str()); }
254+
auto GetPath() const { return fPath.c_str(); }
255+
};
256+
257+
FileRAII fTTree1("dataframe_interfaceAndUtils_2_tree_1.root");
258+
FileRAII fTTree2("dataframe_interfaceAndUtils_2_tree_2.root");
259+
FileRAII fRNTuple1("dataframe_interfaceAndUtils_2_rntuple_1.root");
260+
FileRAII fRNTuple2("dataframe_interfaceAndUtils_2_rntuple_2.root");
261+
262+
const int nEntries = 1000;
263+
const int clusterSize = 250;
264+
265+
// Test TTree single file
266+
{
267+
ROOT::RDF::RSnapshotOptions opts;
268+
opts.fAutoFlush = clusterSize;
269+
auto df = ROOT::RDataFrame(nEntries).Define("i", "rdfentry_");
270+
df.Snapshot("t", fTTree1.GetPath(), {"i"}, opts);
271+
df.Snapshot("t", fTTree2.GetPath(), {"i"}, opts);
272+
}
273+
{
274+
ROOT::RDataFrame dfTTree("t", fTTree1.GetPath());
275+
auto rangesTTree = RDFInt::GetDatasetGlobalClusterBoundaries(dfTTree);
276+
277+
EXPECT_EQ(rangesTTree.size(), nEntries / clusterSize);
278+
for (size_t i = 0; i < rangesTTree.size(); ++i) {
279+
EXPECT_EQ(rangesTTree[i].first, i * clusterSize);
280+
EXPECT_EQ(rangesTTree[i].second, (i + 1) * clusterSize);
281+
}
282+
}
283+
284+
// Test TTree multiple files (chain)
285+
{
286+
ROOT::RDataFrame dfTTreeChain("t", {fTTree1.GetPath(), fTTree2.GetPath()});
287+
auto rangesTTreeChain = RDFInt::GetDatasetGlobalClusterBoundaries(dfTTreeChain);
288+
289+
EXPECT_EQ(rangesTTreeChain.size(), 2 * nEntries / clusterSize);
290+
for (size_t i = 0; i < rangesTTreeChain.size(); ++i) {
291+
EXPECT_EQ(rangesTTreeChain[i].first, i * clusterSize);
292+
EXPECT_EQ(rangesTTreeChain[i].second, (i + 1) * clusterSize);
293+
}
294+
}
295+
296+
// Test RNTuple single file
297+
{
298+
ROOT::RDF::RSnapshotOptions opts;
299+
opts.fOutputFormat = ROOT::RDF::ESnapshotOutputFormat::kRNTuple;
300+
auto df = ROOT::RDataFrame(nEntries).Define("i", "rdfentry_");
301+
df.Snapshot("nt", fRNTuple1.GetPath(), {"i"}, opts);
302+
df.Snapshot("nt", fRNTuple2.GetPath(), {"i"}, opts);
303+
}
304+
{
305+
auto dfRNTuple = ROOT::RDF::FromRNTuple("nt", fRNTuple1.GetPath());
306+
auto rangesRNTuple = RDFInt::GetDatasetGlobalClusterBoundaries(dfRNTuple);
307+
308+
EXPECT_FALSE(rangesRNTuple.empty());
309+
EXPECT_EQ(rangesRNTuple.front().first, 0u);
310+
EXPECT_EQ(rangesRNTuple.back().second, ULong64_t(nEntries));
311+
for (size_t i = 1; i < rangesRNTuple.size(); ++i) {
312+
EXPECT_EQ(rangesRNTuple[i].first, rangesRNTuple[i - 1].second);
313+
}
314+
}
315+
316+
// Test RNTuple multiple files
317+
{
318+
auto dfRNTupleChain = ROOT::RDF::FromRNTuple("nt", {fRNTuple1.GetPath(), fRNTuple2.GetPath()});
319+
auto rangesRNTupleChain = RDFInt::GetDatasetGlobalClusterBoundaries(dfRNTupleChain);
320+
321+
EXPECT_FALSE(rangesRNTupleChain.empty());
322+
EXPECT_EQ(rangesRNTupleChain.front().first, 0u);
323+
EXPECT_EQ(rangesRNTupleChain.back().second, ULong64_t(2 * nEntries));
324+
for (size_t i = 1; i < rangesRNTupleChain.size(); ++i) {
325+
EXPECT_EQ(rangesRNTupleChain[i].first, rangesRNTupleChain[i - 1].second);
326+
}
327+
}
328+
}

0 commit comments

Comments
 (0)