summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp')
-rw-r--r--tests/auto/corelib/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp310
1 files changed, 0 insertions, 310 deletions
diff --git a/tests/auto/corelib/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp b/tests/auto/corelib/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
deleted file mode 100644
index 46562b5eb0..0000000000
--- a/tests/auto/corelib/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
+++ /dev/null
@@ -1,310 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QThread>
-
-struct TestIterator
-{
- TestIterator(int i)
- :i(i) { }
-
- int operator-(const TestIterator &other)
- {
- return i - other.i;
- }
-
- TestIterator& operator++()
- {
- ++i;
- return *this;
- }
-
- bool operator!=(const TestIterator &other) const
- {
- return i != other.i;
- }
-
- int i;
-};
-
-#include <qiterator.h>
-#ifndef QT_NO_STL
-namespace std {
-template <>
-struct iterator_traits<TestIterator>
-{
- typedef random_access_iterator_tag iterator_category;
-};
-
-int distance(TestIterator &a, TestIterator &b)
-{
- return b - a;
-}
-
-}
-#endif
-
-#include <qtconcurrentiteratekernel.h>
-#include <QtTest/QtTest>
-
-using namespace QtConcurrent;
-
-class tst_QtConcurrentIterateKernel: public QObject
-{
- Q_OBJECT
-private slots:
- // "for" iteration tests:
- void instantiate();
- void cancel();
- void stresstest();
- void noIterations();
- void throttling();
-#ifndef QT_NO_STL
- void blockSize();
- void multipleResults();
-#endif
-};
-
-QAtomicInt iterations;
-class PrintFor : public IterateKernel<TestIterator, void>
-{
-public:
- PrintFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(begin, end) { iterations.store(0); }
- bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *)
- {
- iterations.fetchAndAddRelaxed(end - begin);
-#ifdef PRINT
- qDebug() << QThread::currentThread() << "iteration" << begin << "to" << end << "(exclusive)";
-#endif
- return false;
- }
- bool runIteration(TestIterator it, int index , void *result)
- {
- return runIterations(it, index, index + 1, result);
- }
-
-};
-
-class SleepPrintFor : public IterateKernel<TestIterator, void>
-{
-public:
- SleepPrintFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(begin, end) { iterations.store(0); }
- inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *)
- {
- QTest::qSleep(200);
- iterations.fetchAndAddRelaxed(end - begin);
-#ifdef PRINT
- qDebug() << QThread::currentThread() << "iteration" << begin << "to" << end << "(exclusive)";
-#endif
- return false;
- }
- bool runIteration(TestIterator it, int index , void *result)
- {
- return runIterations(it, index, index + 1, result);
- }
-};
-
-
-void tst_QtConcurrentIterateKernel::instantiate()
-{
- startThreadEngine(new PrintFor(0, 40)).startBlocking();
- QCOMPARE(iterations.load(), 40);
-}
-
-void tst_QtConcurrentIterateKernel::cancel()
-{
- {
- QFuture<void> f = startThreadEngine(new SleepPrintFor(0, 40)).startAsynchronously();
- f.cancel();
- f.waitForFinished();
- QVERIFY(f.isCanceled());
- QVERIFY(iterations.load() <= QThread::idealThreadCount()); // the threads might run one iteration each before they are canceled.
- }
-}
-
-QAtomicInt counter;
-class CountFor : public IterateKernel<TestIterator, void>
-{
-public:
- CountFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(begin, end) { iterations.store(0); }
- inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *)
- {
- counter.fetchAndAddRelaxed(end - begin);
- return false;
- }
- bool runIteration(TestIterator it, int index , void *result)
- {
- return runIterations(it, index, index + 1, result);
- }
-};
-
-void tst_QtConcurrentIterateKernel::stresstest()
-{
- const int iterations = 1000;
- const int times = 50;
- for (int i = 0; i < times; ++i) {
- counter.store(0);
- CountFor f(0, iterations);
- f.startBlocking();
- QCOMPARE(counter.load(), iterations);
- }
-}
-
-void tst_QtConcurrentIterateKernel::noIterations()
-{
- const int times = 20000;
- for (int i = 0; i < times; ++i)
- startThreadEngine(new IterateKernel<TestIterator, void>(0, 0)).startBlocking();
-}
-
-QMutex threadsMutex;
-QSet<QThread *> threads;
-class ThrottleFor : public IterateKernel<TestIterator, void>
-{
-public:
- // this class throttles between iterations 100 and 200,
- // and then records how many threads that run between
- // iterations 140 and 160.
- ThrottleFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(begin, end) { iterations.store(0); throttling = false; }
- inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *)
- {
- if (200 >= begin && 200 < end) {
- throttling = false;
- }
-
- iterations.fetchAndAddRelaxed(end - begin);
-
- QThread *thread = QThread::currentThread();
-
- if (begin > 140 && end < 160) {
- QMutexLocker locker(&threadsMutex);
- threads.insert(thread);
- }
-
- if (100 >= begin && 100 < end) {
- throttling = true;
- }
-
- QTest::qWait(1);
-
- return false;
- }
- bool runIteration(TestIterator it, int index , void *result)
- {
- return runIterations(it, index, index + 1, result);
- }
-
- bool shouldThrottleThread()
- {
- const int load = iterations.load();
- return (load > 100 && load < 200);
- }
- bool throttling;
-};
-
-void tst_QtConcurrentIterateKernel::throttling()
-{
- const int totalIterations = 400;
- iterations.store(0);
-
- threads.clear();
-
- ThrottleFor f(0, totalIterations);
- f.startBlocking();
-
- QCOMPARE(iterations.load(), totalIterations);
-
-
- QCOMPARE(threads.count(), 1);
-}
-
-
-int peakBlockSize = 0;
-class BlockSizeRecorder : public IterateKernel<TestIterator, void>
-{
-public:
- BlockSizeRecorder(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(begin, end) { }
- inline bool runIterations(TestIterator, int begin, int end, void *)
- {
- peakBlockSize = qMax(peakBlockSize, end - begin);
- return false;
- }
-};
-
-// Missing stl iterators prevent correct block size calculation.
-#ifndef QT_NO_STL
-void tst_QtConcurrentIterateKernel::blockSize()
-{
- const int expectedMinimumBlockSize = 1024 / QThread::idealThreadCount();
- BlockSizeRecorder(0, 10000).startBlocking();
- if (peakBlockSize < expectedMinimumBlockSize)
- qDebug() << "block size" << peakBlockSize;
- QVERIFY(peakBlockSize >= expectedMinimumBlockSize);
-}
-#endif
-
-class MultipleResultsFor : public IterateKernel<TestIterator, int>
-{
-public:
- MultipleResultsFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, int>(begin, end) { }
- inline bool runIterations(TestIterator, int begin, int end, int *results)
- {
- for (int i = begin; i < end; ++i)
- results[i - begin] = i;
- return true;
- }
-};
-
-// Missing stl iterators prevent correct summation.
-#ifndef QT_NO_STL
-void tst_QtConcurrentIterateKernel::multipleResults()
-{
- QFuture<int> f = startThreadEngine(new MultipleResultsFor(0, 10)).startAsynchronously();
- QCOMPARE(f.results().count() , 10);
- QCOMPARE(f.resultAt(0), 0);
- QCOMPARE(f.resultAt(5), 5);
- QCOMPARE(f.resultAt(9), 9);
- f.waitForFinished();
-}
-#endif
-
-QTEST_MAIN(tst_QtConcurrentIterateKernel)
-
-#include "tst_qtconcurrentiteratekernel.moc"