From 5b1c6edb2b3fd77aba702eb0e7e10d8137f11f87 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Fri, 13 Jun 2025 20:11:47 +0200 Subject: [PATCH 1/3] [tree] properly copy entry list, also queried indices Fixes https://github.com/root-project/root/issues/13338 --- tree/tree/src/TEntryList.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tree/tree/src/TEntryList.cxx b/tree/tree/src/TEntryList.cxx index 78de65da2cd18..b1488fa02ffb5 100644 --- a/tree/tree/src/TEntryList.cxx +++ b/tree/tree/src/TEntryList.cxx @@ -1264,6 +1264,8 @@ void TEntryList::SetTree(const char *treename, const char *filename) elist->fBlocks = fBlocks; fBlocks = nullptr; elist->fNBlocks = fNBlocks; + elist->fLastIndexQueried = fLastIndexQueried; + elist->fLastIndexReturned = fLastIndexReturned; fLists->Add(elist); elist = new TEntryList("", "", treename, fn.Data()); if (elist->GetDirectory()) { From 7e062dd8b06a02c25fbd755739ef262a50075870 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Fri, 13 Jun 2025 20:27:37 +0200 Subject: [PATCH 2/3] [test] add test for preused entrylists See example https://github.com/root-project/root/issues/13338 --- tree/tree/test/chain_setentrylist.cxx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tree/tree/test/chain_setentrylist.cxx b/tree/tree/test/chain_setentrylist.cxx index 1af7b027ba982..d72b21ca08646 100644 --- a/tree/tree/test/chain_setentrylist.cxx +++ b/tree/tree/test/chain_setentrylist.cxx @@ -158,3 +158,30 @@ TEST(TChain, SetEntryListSyncWrongNumberOfSubLists) { gSystem->Unlink(filename1); gSystem->Unlink(filename2); } + +TEST(TTree, SetEntryListPreUsed) +{ + // https://github.com/root-project/root/issues/13338 + // Define and fill an entry list + TEntryList entryList; + const std::vector entries {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; + for (long long int entry : entries) + entryList.Enter(entry); + // Read tree + TTree tree("t", "t"); + unsigned int x1; + tree.Branch("x1", &x1); + unsigned int NEntries = 100; + for (unsigned int iEntry = 0; iEntry < NEntries; iEntry++) { + x1 = iEntry; + tree.Fill(); + } + // On purpose get entry 15 before setting entry list for tree + entryList.GetEntry(15); + tree.SetEntryList(&entryList); + // Check results + for (long long int entry : entries) { + EXPECT_EQ(tree.GetEntryNumber(entry), entry); + EXPECT_EQ(tree.GetEntryNumber(entry), entry); + } +} From 87d6950f2f04aab3be808892f667e991850de057 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Fri, 13 Jun 2025 21:28:22 +0200 Subject: [PATCH 3/3] [nfc] clangf --- tree/tree/test/chain_setentrylist.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tree/tree/test/chain_setentrylist.cxx b/tree/tree/test/chain_setentrylist.cxx index d72b21ca08646..63613f5da3e11 100644 --- a/tree/tree/test/chain_setentrylist.cxx +++ b/tree/tree/test/chain_setentrylist.cxx @@ -162,9 +162,9 @@ TEST(TChain, SetEntryListSyncWrongNumberOfSubLists) { TEST(TTree, SetEntryListPreUsed) { // https://github.com/root-project/root/issues/13338 - // Define and fill an entry list + // Define and fill an entry list TEntryList entryList; - const std::vector entries {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; + const std::vector entries{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; for (long long int entry : entries) entryList.Enter(entry); // Read tree @@ -176,7 +176,7 @@ TEST(TTree, SetEntryListPreUsed) x1 = iEntry; tree.Fill(); } - // On purpose get entry 15 before setting entry list for tree + // On purpose get entry 15 before setting entry list for tree entryList.GetEntry(15); tree.SetEntryList(&entryList); // Check results