Removed the "tst_QVector::outOfMemory" test.

The test is useless as we assert if the requested size exceeds
a certain limit. We could, as an alternative,
throw an exception, but in the end it's the caller's responsibility
to ensure that the requested size is a sane value.

Task-number: QTBUG-27285
Change-Id: I738950a6a2b51671a54e4d25c7e4c3ac0d7f63b8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Christian Strømme 2012-10-05 16:32:19 +02:00 committed by The Qt Project
parent 2cce297b58
commit 0ed3cf2a1c
2 changed files with 1 additions and 149 deletions

View File

@ -70,7 +70,7 @@ int qFindByteArray(
int qAllocMore(int alloc, int extra)
{
Q_ASSERT(alloc >= 0 && extra >= 0);
Q_ASSERT(alloc < (1 << 30) - extra);
Q_ASSERT_X(alloc < (1 << 30) - extra, "qAllocMore", "Requested size is too large!");
unsigned nalloc = alloc + extra;

View File

@ -250,7 +250,6 @@ private slots:
void testOperators() const;
void outOfMemory();
void reserve();
void reallocAfterCopy_data();
void reallocAfterCopy();
@ -1739,153 +1738,6 @@ struct Foo
~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;