void testOperators() const;
- void outOfMemory();
void reserve();
void reallocAfterCopy_data();
void reallocAfterCopy();
~Foo() { delete p; ++fooDtor; }
};
-void tst_QVector::outOfMemory()
-{
- fooCtor = 0;
- fooDtor = 0;
-
- const int N = 0x7fffffff / sizeof(Foo);
-
- {
- QVector<Foo> a;
-
- QSKIP("QTBUG-27285 - This test crashes on many of our machines.");
- a.resize(N);
- if (a.size() == N) {
- QVERIFY(a.capacity() >= N);
- QCOMPARE(fooCtor, N);
- QCOMPARE(fooDtor, 0);
-
- for (int i = 0; i < N; i += 35000)
- a[i] = Foo();
- } else {
- // this is the case we're actually testing
- QCOMPARE(a.size(), 0);
- QCOMPARE(a.capacity(), 0);
- QCOMPARE(fooCtor, 0);
- QCOMPARE(fooDtor, 0);
-
- a.resize(5);
- QCOMPARE(a.size(), 5);
- QVERIFY(a.capacity() >= 5);
- QCOMPARE(fooCtor, 5);
- QCOMPARE(fooDtor, 0);
-
- const int Prealloc = a.capacity();
- a.resize(Prealloc + 1);
- QCOMPARE(a.size(), Prealloc + 1);
- QVERIFY(a.capacity() >= Prealloc + 1);
- QCOMPARE(fooCtor, Prealloc + 6);
- QCOMPARE(fooDtor, 5);
-
- a.resize(0x10000000);
- QCOMPARE(a.size(), 0);
- QCOMPARE(a.capacity(), 0);
- QCOMPARE(fooCtor, Prealloc + 6);
- QCOMPARE(fooDtor, Prealloc + 6);
- }
- }
-
- fooCtor = 0;
- fooDtor = 0;
-
- {
- QVector<Foo> a(N);
- if (a.size() == N) {
- QVERIFY(a.capacity() >= N);
- QCOMPARE(fooCtor, N);
- QCOMPARE(fooDtor, 0);
-
- for (int i = 0; i < N; i += 35000)
- a[i] = Foo();
- } else {
- // this is the case we're actually testing
- QCOMPARE(a.size(), 0);
- QCOMPARE(a.capacity(), 0);
- QCOMPARE(fooCtor, 0);
- QCOMPARE(fooDtor, 0);
- }
- }
-
- Foo foo;
-
- fooCtor = 0;
- fooDtor = 0;
-
- {
- QVector<Foo> a(N, foo);
- if (a.size() == N) {
- QVERIFY(a.capacity() >= N);
- QCOMPARE(fooCtor, N);
- QCOMPARE(fooDtor, 0);
-
- for (int i = 0; i < N; i += 35000)
- a[i] = Foo();
- } else {
- // this is the case we're actually testing
- QCOMPARE(a.size(), 0);
- QCOMPARE(a.capacity(), 0);
- QCOMPARE(fooCtor, 0);
- QCOMPARE(fooDtor, 0);
- }
- }
-
- fooCtor = 0;
- fooDtor = 0;
-
- {
- QVector<Foo> a;
- a.resize(10);
- QCOMPARE(fooCtor, 10);
- QCOMPARE(fooDtor, 0);
-
- QVector<Foo> b(a);
- QCOMPARE(fooCtor, 10);
- QCOMPARE(fooDtor, 0);
-
- a.resize(N);
- if (a.size() == N) {
- QCOMPARE(fooCtor, N + 10);
- } else {
- QCOMPARE(a.size(), 0);
- QCOMPARE(a.capacity(), 0);
- QCOMPARE(fooCtor, 10);
- QCOMPARE(fooDtor, 0);
-
- QCOMPARE(b.size(), 10);
- QVERIFY(b.capacity() >= 10);
- }
- }
-
- {
- QVector<int> a;
- a.resize(10);
-
- QVector<int> b(a);
-
- a.resize(N);
- if (a.size() == N) {
- for (int i = 0; i < N; i += 60000)
- a[i] = i;
- } else {
- QCOMPARE(a.size(), 0);
- QCOMPARE(a.capacity(), 0);
-
- QCOMPARE(b.size(), 10);
- QVERIFY(b.capacity() >= 10);
- }
-
- b.resize(N - 1);
- if (b.size() == N - 1) {
- for (int i = 0; i < N - 1; i += 60000)
- b[i] = i;
- } else {
- QCOMPARE(b.size(), 0);
- QCOMPARE(b.capacity(), 0);
- }
- }
-}
-
void tst_QVector::reserve()
{
fooCtor = 0;