28class ReferenceCountedArrayTests :
public UnitTest
31 ReferenceCountedArrayTests() : UnitTest (
"ReferenceCountedArray",
"Containers") {}
34 void runTest()
override
36 beginTest (
"Add derived objects");
38 ReferenceCountedArray<TestDerivedObj> derivedArray;
39 derivedArray.add (
static_cast<TestDerivedObj*
> (
new TestBaseObj()));
40 expectEquals (derivedArray.size(), 1);
41 expectEquals (derivedArray.getObjectPointer (0)->getReferenceCount(), 1);
42 expectEquals (derivedArray[0]->getReferenceCount(), 2);
44 for (
auto o : derivedArray)
45 expectEquals (o->getReferenceCount(), 1);
47 ReferenceCountedArray<TestBaseObj> baseArray;
48 baseArray.addArray (derivedArray);
50 for (
auto o : baseArray)
51 expectEquals (o->getReferenceCount(), 2);
53 derivedArray.clearQuick();
54 baseArray.clearQuick();
56 auto* baseObject =
new TestBaseObj();
57 TestBaseObj::Ptr baseObjectPtr = baseObject;
58 expectEquals (baseObject->getReferenceCount(), 1);
60 auto* derivedObject =
new TestDerivedObj();
61 TestDerivedObj::Ptr derivedObjectPtr = derivedObject;
62 expectEquals (derivedObject->getReferenceCount(), 1);
64 baseArray.add (baseObject);
65 baseArray.add (derivedObject);
67 for (
auto o : baseArray)
68 expectEquals (o->getReferenceCount(), 2);
70 expectEquals (baseObject->getReferenceCount(), 2);
71 expectEquals (derivedObject->getReferenceCount(), 2);
73 derivedArray.add (derivedObject);
75 for (
auto o : derivedArray)
76 expectEquals (o->getReferenceCount(), 3);
78 derivedArray.clearQuick();
79 baseArray.clearQuick();
81 expectEquals (baseObject->getReferenceCount(), 1);
82 expectEquals (derivedObject->getReferenceCount(), 1);
84 baseArray.add (baseObjectPtr);
86 #if JUCE_STRICT_REFCOUNTEDPOINTER
87 baseArray.add (derivedObjectPtr);
89 baseArray.add (derivedObjectPtr.get());
92 for (
auto o : baseArray)
93 expectEquals (o->getReferenceCount(), 2);
95 derivedArray.add (derivedObjectPtr);
97 for (
auto o : derivedArray)
98 expectEquals (o->getReferenceCount(), 3);
103 struct TestBaseObj :
public ReferenceCountedObject
105 using Ptr = ReferenceCountedObjectPtr<TestBaseObj>;
107 TestBaseObj() =
default;
110 struct TestDerivedObj :
public TestBaseObj
112 using Ptr = ReferenceCountedObjectPtr<TestDerivedObj>;
114 TestDerivedObj() =
default;
118static ReferenceCountedArrayTests referenceCountedArrayTests;