Add diagnostic output to tst_QtConcurrentIterateKernel.

Add messages to comparisons and expect failure of blockSize()
on Windows.

Task-number: QTBUG-37822

Change-Id: Ie71d35a3d1ba0e52c93d5ba3fd7e92465b170d49
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
This commit is contained in:
Friedemann Kleint 2014-03-31 11:24:43 +02:00 committed by The Qt Project
parent e215aba4aa
commit 7d012552b0

View File

@ -151,7 +151,9 @@ void tst_QtConcurrentIterateKernel::cancel()
f.cancel(); f.cancel();
f.waitForFinished(); f.waitForFinished();
QVERIFY(f.isCanceled()); QVERIFY(f.isCanceled());
QVERIFY(iterations.load() <= QThread::idealThreadCount()); // the threads might run one iteration each before they are canceled. // the threads might run one iteration each before they are canceled.
QVERIFY2(iterations.load() <= QThread::idealThreadCount(),
(QByteArray::number(iterations.load()) + ' ' + QByteArray::number(QThread::idealThreadCount())));
} }
} }
@ -251,26 +253,48 @@ void tst_QtConcurrentIterateKernel::throttling()
QCOMPARE(threads.count(), 1); QCOMPARE(threads.count(), 1);
} }
int peakBlockSize = 0;
class BlockSizeRecorder : public IterateKernel<TestIterator, void> class BlockSizeRecorder : public IterateKernel<TestIterator, void>
{ {
public: public:
BlockSizeRecorder(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(begin, end) { } BlockSizeRecorder(TestIterator begin, TestIterator end)
: IterateKernel<TestIterator, void>(begin, end)
, peakBlockSize(0)
, peakBegin(0)
{}
inline bool runIterations(TestIterator, int begin, int end, void *) inline bool runIterations(TestIterator, int begin, int end, void *)
{ {
peakBlockSize = qMax(peakBlockSize, end - begin); const int blockSize = end - begin;
if (blockSize > peakBlockSize) {
peakBlockSize = blockSize;
peakBegin = begin;
}
return false; return false;
} }
int peakBlockSize;
int peakBegin;
}; };
static QByteArray msgBlockSize(const BlockSizeRecorder &recorder, int expectedMinimumBlockSize)
{
return QByteArrayLiteral("peakBlockSize=") + QByteArray::number(recorder.peakBlockSize)
+ QByteArrayLiteral(" is less than expectedMinimumBlockSize=")
+ QByteArray::number(expectedMinimumBlockSize)
+ QByteArrayLiteral(", reached at: ") + QByteArray::number(recorder.peakBegin)
+ QByteArrayLiteral(" (ideal thread count: ") + QByteArray::number(QThread::idealThreadCount())
+ ')';
}
void tst_QtConcurrentIterateKernel::blockSize() void tst_QtConcurrentIterateKernel::blockSize()
{ {
const int expectedMinimumBlockSize = 1024 / QThread::idealThreadCount(); const int expectedMinimumBlockSize = 1024 / QThread::idealThreadCount();
BlockSizeRecorder(0, 10000).startBlocking(); BlockSizeRecorder recorder(0, 10000);
if (peakBlockSize < expectedMinimumBlockSize) recorder.startBlocking();
qDebug() << "block size" << peakBlockSize; #ifdef Q_OS_WIN
QVERIFY(peakBlockSize >= expectedMinimumBlockSize); if (recorder.peakBlockSize < expectedMinimumBlockSize)
QEXPECT_FAIL("", msgBlockSize(recorder, expectedMinimumBlockSize).constData(), Abort);
#endif // Q_OS_WIN
QVERIFY2(recorder.peakBlockSize >= expectedMinimumBlockSize, msgBlockSize(recorder, expectedMinimumBlockSize));
} }
class MultipleResultsFor : public IterateKernel<TestIterator, int> class MultipleResultsFor : public IterateKernel<TestIterator, int>