28static struct OwnedArrayTest :
public UnitTest
33 virtual ~Base() =
default;
35 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Base)
38 struct Derived final :
public Base
42 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Derived)
47 DestructorObj (OwnedArrayTest& p,
48 OwnedArray<DestructorObj>& arr)
49 : parent (p), objectArray (arr)
56 for (
auto* o : objectArray)
58 parent.expect (o !=
nullptr);
59 parent.expect (o !=
this);
62 parent.expectEquals (o->data, 956);
66 OwnedArrayTest& parent;
67 OwnedArray<DestructorObj>& objectArray;
70 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DestructorObj)
74 : UnitTest (
"OwnedArray", UnitTestCategories::containers)
77 void runTest()
override
79 beginTest (
"After converting move construction, ownership is transferred");
81 OwnedArray<Derived> derived {
new Derived{},
new Derived{},
new Derived{} };
83 OwnedArray<Base> base { std::move (derived) };
85 expectEquals (base.size(), 3);
86 expectEquals (derived.size(), 0);
89 beginTest (
"After converting move assignment, ownership is transferred");
91 OwnedArray<Base> base;
93 base = OwnedArray<Derived> {
new Derived{},
new Derived{},
new Derived{} };
95 expectEquals (base.size(), 3);
98 beginTest (
"Iterate in destructor");
101 OwnedArray<DestructorObj> arr;
103 for (
int i = 0; i < 2; ++i)
104 arr.add (
new DestructorObj (*
this, arr));
107 OwnedArray<DestructorObj> arr;
109 for (
int i = 0; i < 1025; ++i)
110 arr.add (
new DestructorObj (*
this, arr));
112 while (! arr.isEmpty())
115 for (
int i = 0; i < 1025; ++i)
116 arr.add (
new DestructorObj (*
this, arr));
118 arr.removeRange (1, arr.size() - 3);
120 for (
int i = 0; i < 1025; ++i)
121 arr.add (
new DestructorObj (*
this, arr));
123 arr.set (500,
new DestructorObj (*
this, arr));