28class ReferenceCountedArrayTests :
public UnitTest
32 : UnitTest (
"ReferenceCountedArray", UnitTestCategories::containers)
36 void runTest()
override
38 beginTest (
"Add derived objects");
43 expectEquals (
derivedArray.getObjectPointer (0)->getReferenceCount(), 1);
47 expectEquals (
o->getReferenceCount(), 1);
53 expectEquals (
o->getReferenceCount(), 2);
60 expectEquals (
baseObject->getReferenceCount(), 1);
70 expectEquals (
o->getReferenceCount(), 2);
72 expectEquals (
baseObject->getReferenceCount(), 2);
78 expectEquals (
o->getReferenceCount(), 3);
83 expectEquals (
baseObject->getReferenceCount(), 1);
90 expectEquals (
o->getReferenceCount(), 2);
95 expectEquals (
o->getReferenceCount(), 3);
98 beginTest (
"Iterate in destructor");
103 for (
int i = 0; i < 2; ++i)
109 for (
int i = 0; i < 1025; ++i)
112 while (!
arr.isEmpty())
115 for (
int i = 0; i < 1025; ++i)
118 arr.removeRange (1,
arr.size() - 3);
120 for (
int i = 0; i < 1025; ++i)
130 using Ptr = ReferenceCountedObjectPtr<TestBaseObj>;
132 TestBaseObj() =
default;
134 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TestBaseObj)
139 using Ptr = ReferenceCountedObjectPtr<TestDerivedObj>;
141 TestDerivedObj() =
default;
143 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TestDerivedObj)
148 DestructorObj (ReferenceCountedArrayTests& p,
149 ReferenceCountedArray<DestructorObj>& arr)
150 : parent (p), objectArray (arr)
157 for (
auto* o : objectArray)
159 parent.expect (o !=
nullptr);
160 parent.expect (o !=
this);
161 parent.expectEquals (o->data, 374);
165 ReferenceCountedArrayTests& parent;
166 ReferenceCountedArray<DestructorObj>& objectArray;
169 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DestructorObj)
173static ReferenceCountedArrayTests referenceCountedArrayTests;