aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/common/array.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/test/common/array.h b/test/common/array.h
index cb793004a4..bce4e8cba1 100644
--- a/test/common/array.h
+++ b/test/common/array.h
@@ -124,6 +124,29 @@ class ArrayTestSuite : public CxxTest::TestSuite
TS_ASSERT_EQUALS(array2.size(), (unsigned int)3);
}
+ struct SafeInt {
+ int val;
+ SafeInt() : val(0) {}
+ SafeInt(int v) : val(v) {}
+ ~SafeInt() { val = -1; }
+ bool operator==(int v) {
+ return val == v;
+ }
+ };
+
+ void test_push_back_ex() {
+ // This test makes sure that inserting an element invalidates
+ // references/iterators/pointers to elements in the array itself
+ // only *after* their value has been copied.
+ Common::Array<SafeInt> array;
+
+ array.push_back(42);
+ for (int i = 0; i < 40; ++i) {
+ array.push_back(array[0]);
+ TS_ASSERT_EQUALS(array[i], 42);
+ }
+ }
+
void test_copy_constructor() {
Common::Array<int> array1;