From 6c573aec7ba96e837a581ba582815f01f5d4eb57 Mon Sep 17 00:00:00 2001 From: Ravindra Kumar Bundela Date: Sat, 10 Oct 2026 22:55:04 +0530 Subject: [PATCH 1/3] [core] Add essential unit tests for TObjArray --- core/cont/test/CMakeLists.txt | 1 + core/cont/test/TObjArrayTest.cxx | 220 +++++++++++++++++++++++++++++++ 2 files changed, 221 insertions(+) create mode 100644 core/cont/test/TObjArrayTest.cxx diff --git a/core/cont/test/CMakeLists.txt b/core/cont/test/CMakeLists.txt index a9faa0cb8449c..ebe52ab3d71b8 100644 --- a/core/cont/test/CMakeLists.txt +++ b/core/cont/test/CMakeLists.txt @@ -11,3 +11,4 @@ ROOT_ADD_GTEST(TSeqTests TSeqTests.cxx LIBRARIES Core) ROOT_ADD_GTEST(testIter testIter.cxx LIBRARIES Core) ROOT_ADD_GTEST(TListTest TListTest.cxx LIBRARIES Core) ROOT_ADD_GTEST(THashListTest THashListTest.cxx LIBRARIES Core) +ROOT_ADD_GTEST(TObjArrayTest TObjArrayTest.cxx LIBRARIES Core) diff --git a/core/cont/test/TObjArrayTest.cxx b/core/cont/test/TObjArrayTest.cxx new file mode 100644 index 0000000000000..f46a0b9a0b654 --- /dev/null +++ b/core/cont/test/TObjArrayTest.cxx @@ -0,0 +1,220 @@ +#include "gtest/gtest.h" +#include "TObjArray.h" +#include "TObjString.h" + +TEST(TObjArrayTest, DefaultConstructor) +{ + TObjArray array; + EXPECT_EQ(array.GetEntries(), 0); + EXPECT_EQ(array.GetEntriesFast(), 0); + EXPECT_EQ(array.GetLast(), -1); + EXPECT_TRUE(array.IsEmpty()); +} + +TEST(TObjArrayTest, AddAndAt) +{ + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + + array.Add(s1); + array.Add(s2); + + EXPECT_EQ(array.GetEntries(), 2); + EXPECT_EQ(array.GetLast(), 1); + EXPECT_FALSE(array.IsEmpty()); + + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), s2); + EXPECT_EQ(array.At(2), nullptr); // Out of bounds +} + +TEST(TObjArrayTest, AddFirstAndLast) +{ + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + TObjString *s3 = new TObjString("third"); + + array.AddFirst(s2); // Array: [s2] + array.AddFirst(s1); // Array: [s1, s2] + array.AddLast(s3); // Array: [s1, s2, s3] + + EXPECT_EQ(array.GetEntries(), 3); + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), s2); + EXPECT_EQ(array.At(2), s3); +} + +TEST(TObjArrayTest, AddAt) +{ + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + + array.AddAt(s1, 0); + array.AddAt(s2, 2); // Position 1 should be empty (nullptr) + + EXPECT_EQ(array.GetEntries(), 2); + EXPECT_EQ(array.GetLast(), 2); // Highest index is 2 + + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), nullptr); + EXPECT_EQ(array.At(2), s2); +} + +TEST(TObjArrayTest, AddAtAndExpand) +{ + TObjArray array(2); // Initial size 2 + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("element"); + + // Add at index beyond current capacity + array.AddAtAndExpand(s1, 5); + + EXPECT_EQ(array.GetEntries(), 1); + EXPECT_EQ(array.GetLast(), 5); + EXPECT_EQ(array.At(5), s1); +} + +TEST(TObjArrayTest, AddAtFree) +{ + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + TObjString *s3 = new TObjString("third"); + + array.AddAt(s1, 0); + array.AddAt(s2, 2); + + // Should find the first free slot, which is index 1 + Int_t idx = array.AddAtFree(s3); + EXPECT_EQ(idx, 1); + EXPECT_EQ(array.At(1), s3); + EXPECT_EQ(array.GetEntries(), 3); +} + +TEST(TObjArrayTest, AddBeforeAndAfter) +{ + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + TObjString *s3 = new TObjString("third"); + TObjString *s4 = new TObjString("fourth"); + + array.Add(s1); + array.Add(s3); + + array.AddBefore(s3, s2); // Array: [s1, s2, s3] + array.AddAfter(s3, s4); // Array: [s1, s2, s3, s4] + + EXPECT_EQ(array.GetEntries(), 4); + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), s2); + EXPECT_EQ(array.At(2), s3); + EXPECT_EQ(array.At(3), s4); +} + +TEST(TObjArrayTest, Remove) +{ + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + TObjString *s3 = new TObjString("third"); + + array.Add(s1); + array.Add(s2); + array.Add(s3); + + TObject *removed = array.Remove(s2); + EXPECT_EQ(removed, s2); + EXPECT_EQ(array.GetEntries(), 2); + + // Remove leaves a "hole", doesn't shift elements in TObjArray + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), nullptr); + EXPECT_EQ(array.At(2), s3); + + delete removed; // Clean up since array didn't delete it +} + +TEST(TObjArrayTest, RemoveAt) +{ + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + + array.Add(s1); + array.Add(s2); + + TObject *removed = array.RemoveAt(0); + EXPECT_EQ(removed, s1); + EXPECT_EQ(array.GetEntries(), 1); + EXPECT_EQ(array.At(0), nullptr); + EXPECT_EQ(array.At(1), s2); + + delete removed; +} + +TEST(TObjArrayTest, ClearAndDelete) +{ + TObjArray array; + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + + array.Add(s1); + array.Add(s2); + + // Clear doesn't delete elements unless SetOwner(kTRUE) is called or Option is "C" + array.Clear(); + EXPECT_EQ(array.GetEntries(), 0); + + // Manually delete them since array wasn't owner + delete s1; + delete s2; + + TObjString *s3 = new TObjString("third"); + TObjString *s4 = new TObjString("fourth"); + + array.Add(s3); + array.Add(s4); + + // Delete forces deletion of elements regardless of SetOwner + array.Delete(); + EXPECT_EQ(array.GetEntries(), 0); +} + +TEST(TObjArrayTest, Iteration) +{ + TObjArray array; + array.SetOwner(kTRUE); + + array.Add(new TObjString("A")); + array.Add(new TObjString("B")); + array.Add(new TObjString("C")); + + Int_t count = 0; + TIter next(&array); + TObject *obj; + while ((obj = next())) { + count++; + } + + EXPECT_EQ(count, 3); +} From 774a5ec3d518683bc03ec999e004ecf302b108d4 Mon Sep 17 00:00:00 2001 From: Ravindra Kumar Bundela Date: Sun, 11 Oct 2026 22:27:55 +0530 Subject: [PATCH 2/3] [core] Address review feedback on TObjArray unit tests --- core/cont/test/TObjArrayTest.cxx | 270 +++++++++++++++++++++---------- 1 file changed, 185 insertions(+), 85 deletions(-) diff --git a/core/cont/test/TObjArrayTest.cxx b/core/cont/test/TObjArrayTest.cxx index f46a0b9a0b654..e55f4ad9616a9 100644 --- a/core/cont/test/TObjArrayTest.cxx +++ b/core/cont/test/TObjArrayTest.cxx @@ -2,6 +2,16 @@ #include "TObjArray.h" #include "TObjString.h" +namespace { +class TrackObject : public TObject { +public: + static int fgCount; + TrackObject() { fgCount++; } + ~TrackObject() override { fgCount--; } +}; +int TrackObject::fgCount = 0; +} // namespace + TEST(TObjArrayTest, DefaultConstructor) { TObjArray array; @@ -15,35 +25,35 @@ TEST(TObjArrayTest, AddAndAt) { TObjArray array; array.SetOwner(kTRUE); - + TObjString *s1 = new TObjString("first"); TObjString *s2 = new TObjString("second"); - + array.Add(s1); array.Add(s2); - + EXPECT_EQ(array.GetEntries(), 2); EXPECT_EQ(array.GetLast(), 1); EXPECT_FALSE(array.IsEmpty()); - + EXPECT_EQ(array.At(0), s1); EXPECT_EQ(array.At(1), s2); - EXPECT_EQ(array.At(2), nullptr); // Out of bounds + EXPECT_EQ(array.At(2), nullptr); } TEST(TObjArrayTest, AddFirstAndLast) { TObjArray array; array.SetOwner(kTRUE); - + TObjString *s1 = new TObjString("first"); TObjString *s2 = new TObjString("second"); TObjString *s3 = new TObjString("third"); - - array.AddFirst(s2); // Array: [s2] - array.AddFirst(s1); // Array: [s1, s2] - array.AddLast(s3); // Array: [s1, s2, s3] - + + array.AddFirst(s2); + array.AddFirst(s1); + array.AddLast(s3); + EXPECT_EQ(array.GetEntries(), 3); EXPECT_EQ(array.At(0), s1); EXPECT_EQ(array.At(1), s2); @@ -54,16 +64,16 @@ TEST(TObjArrayTest, AddAt) { TObjArray array; array.SetOwner(kTRUE); - + TObjString *s1 = new TObjString("first"); TObjString *s2 = new TObjString("second"); - + array.AddAt(s1, 0); - array.AddAt(s2, 2); // Position 1 should be empty (nullptr) - + array.AddAt(s2, 2); + EXPECT_EQ(array.GetEntries(), 2); - EXPECT_EQ(array.GetLast(), 2); // Highest index is 2 - + EXPECT_EQ(array.GetLast(), 2); + EXPECT_EQ(array.At(0), s1); EXPECT_EQ(array.At(1), nullptr); EXPECT_EQ(array.At(2), s2); @@ -71,14 +81,13 @@ TEST(TObjArrayTest, AddAt) TEST(TObjArrayTest, AddAtAndExpand) { - TObjArray array(2); // Initial size 2 + TObjArray array(2); array.SetOwner(kTRUE); - + TObjString *s1 = new TObjString("element"); - - // Add at index beyond current capacity + array.AddAtAndExpand(s1, 5); - + EXPECT_EQ(array.GetEntries(), 1); EXPECT_EQ(array.GetLast(), 5); EXPECT_EQ(array.At(5), s1); @@ -88,15 +97,14 @@ TEST(TObjArrayTest, AddAtFree) { TObjArray array; array.SetOwner(kTRUE); - + TObjString *s1 = new TObjString("first"); TObjString *s2 = new TObjString("second"); TObjString *s3 = new TObjString("third"); - + array.AddAt(s1, 0); array.AddAt(s2, 2); - - // Should find the first free slot, which is index 1 + Int_t idx = array.AddAtFree(s3); EXPECT_EQ(idx, 1); EXPECT_EQ(array.At(1), s3); @@ -107,114 +115,206 @@ TEST(TObjArrayTest, AddBeforeAndAfter) { TObjArray array; array.SetOwner(kTRUE); - - TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + array.AddAt(s2, 2); + + TObjString *s1 = new TObjString("first"); + array.AddBefore(s2, s1); + TObjString *s3 = new TObjString("third"); - TObjString *s4 = new TObjString("fourth"); - - array.Add(s1); - array.Add(s3); - - array.AddBefore(s3, s2); // Array: [s1, s2, s3] - array.AddAfter(s3, s4); // Array: [s1, s2, s3, s4] - - EXPECT_EQ(array.GetEntries(), 4); - EXPECT_EQ(array.At(0), s1); - EXPECT_EQ(array.At(1), s2); - EXPECT_EQ(array.At(2), s3); - EXPECT_EQ(array.At(3), s4); + array.AddAfter(s2, s3); + + EXPECT_EQ(array.GetEntries(), 3); + EXPECT_EQ(array.At(1), s1); + EXPECT_EQ(array.At(2), s2); + EXPECT_EQ(array.At(3), s3); } TEST(TObjArrayTest, Remove) { TObjArray array; array.SetOwner(kTRUE); - + TObjString *s1 = new TObjString("first"); TObjString *s2 = new TObjString("second"); TObjString *s3 = new TObjString("third"); - + array.Add(s1); array.Add(s2); array.Add(s3); - + TObject *removed = array.Remove(s2); EXPECT_EQ(removed, s2); EXPECT_EQ(array.GetEntries(), 2); - - // Remove leaves a "hole", doesn't shift elements in TObjArray + EXPECT_EQ(array.At(0), s1); EXPECT_EQ(array.At(1), nullptr); EXPECT_EQ(array.At(2), s3); - - delete removed; // Clean up since array didn't delete it + + delete removed; } TEST(TObjArrayTest, RemoveAt) +{ + // Test removing middle element + { + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + TObjString *s3 = new TObjString("third"); + + array.Add(s1); + array.Add(s2); + array.Add(s3); + EXPECT_EQ(array.GetLast(), 2); + + TObject *removed = array.RemoveAt(1); + EXPECT_EQ(removed, s2); + EXPECT_EQ(array.GetEntries(), 2); + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), nullptr); + EXPECT_EQ(array.At(2), s3); + EXPECT_EQ(array.GetLast(), 2); + + delete removed; + } + + // Test removing last element updates GetLast() + { + TObjArray array; + array.SetOwner(kTRUE); + + TObjString *s1 = new TObjString("first"); + TObjString *s2 = new TObjString("second"); + TObjString *s3 = new TObjString("third"); + + array.Add(s1); + array.Add(s2); + array.Add(s3); + EXPECT_EQ(array.GetLast(), 2); + + TObject *removed = array.RemoveAt(2); + EXPECT_EQ(removed, s3); + EXPECT_EQ(array.GetEntries(), 2); + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), s2); + EXPECT_EQ(array.At(2), nullptr); + EXPECT_EQ(array.GetLast(), 1); + + delete removed; + } +} + +TEST(TObjArrayTest, Compress) { TObjArray array; array.SetOwner(kTRUE); - + TObjString *s1 = new TObjString("first"); TObjString *s2 = new TObjString("second"); - + TObjString *s3 = new TObjString("third"); + array.Add(s1); array.Add(s2); - - TObject *removed = array.RemoveAt(0); - EXPECT_EQ(removed, s1); - EXPECT_EQ(array.GetEntries(), 1); - EXPECT_EQ(array.At(0), nullptr); - EXPECT_EQ(array.At(1), s2); - + array.Add(s3); + + // Remove the middle element, creating a gap: [s1, nullptr, s3] + TObject *removed = array.RemoveAt(1); delete removed; + + EXPECT_EQ(array.GetEntries(), 2); + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), nullptr); + EXPECT_EQ(array.At(2), s3); + EXPECT_EQ(array.GetLast(), 2); + + // Compress closes the gap: [s1, s3, nullptr] + array.Compress(); + + EXPECT_EQ(array.GetEntries(), 2); + EXPECT_EQ(array.At(0), s1); + EXPECT_EQ(array.At(1), s3); + EXPECT_EQ(array.At(2), nullptr); + EXPECT_EQ(array.GetLast(), 1); } TEST(TObjArrayTest, ClearAndDelete) { - TObjArray array; - - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); - - array.Add(s1); - array.Add(s2); - - // Clear doesn't delete elements unless SetOwner(kTRUE) is called or Option is "C" - array.Clear(); - EXPECT_EQ(array.GetEntries(), 0); - - // Manually delete them since array wasn't owner - delete s1; - delete s2; - - TObjString *s3 = new TObjString("third"); - TObjString *s4 = new TObjString("fourth"); - - array.Add(s3); - array.Add(s4); - - // Delete forces deletion of elements regardless of SetOwner - array.Delete(); - EXPECT_EQ(array.GetEntries(), 0); + TrackObject::fgCount = 0; + + // 1. Non-owner Clear(): removes pointers but does NOT delete objects + { + TObjArray array; + array.SetOwner(kFALSE); + + auto *o1 = new TrackObject(); + auto *o2 = new TrackObject(); + array.Add(o1); + array.Add(o2); + + EXPECT_EQ(TrackObject::fgCount, 2); + EXPECT_EQ(array.GetEntries(), 2); + + array.Clear(); + EXPECT_EQ(array.GetEntries(), 0); + EXPECT_EQ(TrackObject::fgCount, 2); + + delete o1; + delete o2; + EXPECT_EQ(TrackObject::fgCount, 0); + } + + // 2. Non-owner Delete(): explicitly deletes all heap objects + { + TObjArray array; + array.SetOwner(kFALSE); + + array.Add(new TrackObject()); + array.Add(new TrackObject()); + + EXPECT_EQ(TrackObject::fgCount, 2); + EXPECT_EQ(array.GetEntries(), 2); + + array.Delete(); + EXPECT_EQ(array.GetEntries(), 0); + EXPECT_EQ(TrackObject::fgCount, 0); + } + + // 3. Owner Clear(): delegates to Delete(), deleting all objects + { + TObjArray array; + array.SetOwner(kTRUE); + + array.Add(new TrackObject()); + array.Add(new TrackObject()); + + EXPECT_EQ(TrackObject::fgCount, 2); + EXPECT_EQ(array.GetEntries(), 2); + + array.Clear(); + EXPECT_EQ(array.GetEntries(), 0); + EXPECT_EQ(TrackObject::fgCount, 0); + } } TEST(TObjArrayTest, Iteration) { TObjArray array; array.SetOwner(kTRUE); - + array.Add(new TObjString("A")); array.Add(new TObjString("B")); array.Add(new TObjString("C")); - + Int_t count = 0; TIter next(&array); TObject *obj; while ((obj = next())) { count++; } - + EXPECT_EQ(count, 3); } From 716eebcb129a467700e20405a11070aef838b07c Mon Sep 17 00:00:00 2001 From: Ravindra Kumar Bundela Date: Tue, 13 Oct 2026 00:05:23 +0530 Subject: [PATCH 3/3] [core] Fix TObjArray test assertions and use TNamed objects --- core/cont/test/TObjArrayTest.cxx | 65 +++++++++++++++----------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/core/cont/test/TObjArrayTest.cxx b/core/cont/test/TObjArrayTest.cxx index e55f4ad9616a9..3a6a652e4b7a7 100644 --- a/core/cont/test/TObjArrayTest.cxx +++ b/core/cont/test/TObjArrayTest.cxx @@ -1,6 +1,6 @@ #include "gtest/gtest.h" +#include "TNamed.h" #include "TObjArray.h" -#include "TObjString.h" namespace { class TrackObject : public TObject { @@ -26,8 +26,8 @@ TEST(TObjArrayTest, AddAndAt) TObjArray array; array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); + auto *s1 = new TNamed("first", ""); + auto *s2 = new TNamed("second", ""); array.Add(s1); array.Add(s2); @@ -46,18 +46,15 @@ TEST(TObjArrayTest, AddFirstAndLast) TObjArray array; array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); - TObjString *s3 = new TObjString("third"); + auto *s1 = new TNamed("first", ""); + auto *s2 = new TNamed("second", ""); - array.AddFirst(s2); array.AddFirst(s1); - array.AddLast(s3); + array.AddLast(s2); - EXPECT_EQ(array.GetEntries(), 3); + EXPECT_EQ(array.GetEntries(), 2); EXPECT_EQ(array.At(0), s1); EXPECT_EQ(array.At(1), s2); - EXPECT_EQ(array.At(2), s3); } TEST(TObjArrayTest, AddAt) @@ -65,8 +62,8 @@ TEST(TObjArrayTest, AddAt) TObjArray array; array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); + auto *s1 = new TNamed("first", ""); + auto *s2 = new TNamed("second", ""); array.AddAt(s1, 0); array.AddAt(s2, 2); @@ -84,7 +81,7 @@ TEST(TObjArrayTest, AddAtAndExpand) TObjArray array(2); array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("element"); + auto *s1 = new TNamed("element", ""); array.AddAtAndExpand(s1, 5); @@ -98,9 +95,9 @@ TEST(TObjArrayTest, AddAtFree) TObjArray array; array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); - TObjString *s3 = new TObjString("third"); + auto *s1 = new TNamed("first", ""); + auto *s2 = new TNamed("second", ""); + auto *s3 = new TNamed("third", ""); array.AddAt(s1, 0); array.AddAt(s2, 2); @@ -116,13 +113,13 @@ TEST(TObjArrayTest, AddBeforeAndAfter) TObjArray array; array.SetOwner(kTRUE); - TObjString *s2 = new TObjString("second"); + auto *s2 = new TNamed("second", ""); array.AddAt(s2, 2); - TObjString *s1 = new TObjString("first"); + auto *s1 = new TNamed("first", ""); array.AddBefore(s2, s1); - TObjString *s3 = new TObjString("third"); + auto *s3 = new TNamed("third", ""); array.AddAfter(s2, s3); EXPECT_EQ(array.GetEntries(), 3); @@ -136,9 +133,9 @@ TEST(TObjArrayTest, Remove) TObjArray array; array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); - TObjString *s3 = new TObjString("third"); + auto *s1 = new TNamed("first", ""); + auto *s2 = new TNamed("second", ""); + auto *s3 = new TNamed("third", ""); array.Add(s1); array.Add(s2); @@ -162,9 +159,9 @@ TEST(TObjArrayTest, RemoveAt) TObjArray array; array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); - TObjString *s3 = new TObjString("third"); + auto *s1 = new TNamed("first", ""); + auto *s2 = new TNamed("second", ""); + auto *s3 = new TNamed("third", ""); array.Add(s1); array.Add(s2); @@ -187,9 +184,9 @@ TEST(TObjArrayTest, RemoveAt) TObjArray array; array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); - TObjString *s3 = new TObjString("third"); + auto *s1 = new TNamed("first", ""); + auto *s2 = new TNamed("second", ""); + auto *s3 = new TNamed("third", ""); array.Add(s1); array.Add(s2); @@ -213,9 +210,9 @@ TEST(TObjArrayTest, Compress) TObjArray array; array.SetOwner(kTRUE); - TObjString *s1 = new TObjString("first"); - TObjString *s2 = new TObjString("second"); - TObjString *s3 = new TObjString("third"); + auto *s1 = new TNamed("first", ""); + auto *s2 = new TNamed("second", ""); + auto *s3 = new TNamed("third", ""); array.Add(s1); array.Add(s2); @@ -305,9 +302,9 @@ TEST(TObjArrayTest, Iteration) TObjArray array; array.SetOwner(kTRUE); - array.Add(new TObjString("A")); - array.Add(new TObjString("B")); - array.Add(new TObjString("C")); + array.Add(new TNamed("A", "")); + array.Add(new TNamed("B", "")); + array.Add(new TNamed("C", "")); Int_t count = 0; TIter next(&array);