diff options
Diffstat (limited to 'tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp')
-rw-r--r-- | tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp | 79 |
1 files changed, 32 insertions, 47 deletions
diff --git a/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp b/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp index 3dd77ed3d0..27113ad8b7 100644 --- a/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp +++ b/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp @@ -1,31 +1,7 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QThread> +#include <QSet> struct TestIterator { @@ -67,7 +43,7 @@ int distance(TestIterator &a, TestIterator &b) } #include <qtconcurrentiteratekernel.h> -#include <QtTest/QtTest> +#include <QTest> using namespace QtConcurrent; @@ -89,7 +65,7 @@ class PrintFor : public IterateKernel<TestIterator, void> { public: PrintFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(QThreadPool::globalInstance(), begin, end) { iterations.storeRelaxed(0); } - bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *) + bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *) override { iterations.fetchAndAddRelaxed(end - begin); #ifdef PRINT @@ -97,7 +73,7 @@ public: #endif return false; } - bool runIteration(TestIterator it, int index , void *result) + bool runIteration(TestIterator it, int index , void *result) override { return runIterations(it, index, index + 1, result); } @@ -108,7 +84,7 @@ class SleepPrintFor : public IterateKernel<TestIterator, void> { public: SleepPrintFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(QThreadPool::globalInstance(), begin, end) { iterations.storeRelaxed(0); } - inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *) + inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *) override { QTest::qSleep(200); iterations.fetchAndAddRelaxed(end - begin); @@ -117,7 +93,7 @@ public: #endif return false; } - bool runIteration(TestIterator it, int index , void *result) + bool runIteration(TestIterator it, int index , void *result) override { return runIterations(it, index, index + 1, result); } @@ -126,7 +102,8 @@ public: void tst_QtConcurrentIterateKernel::instantiate() { - startThreadEngine(new PrintFor(0, 40)).startBlocking(); + auto future = startThreadEngine(new PrintFor(0, 40)).startAsynchronously(); + future.waitForFinished(); QCOMPARE(iterations.loadRelaxed(), 40); } @@ -148,12 +125,12 @@ class CountFor : public IterateKernel<TestIterator, void> { public: CountFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(QThreadPool::globalInstance(), begin, end) { iterations.storeRelaxed(0); } - inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *) + inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *) override { counter.fetchAndAddRelaxed(end - begin); return false; } - bool runIteration(TestIterator it, int index , void *result) + bool runIteration(TestIterator it, int index , void *result) override { return runIterations(it, index, index + 1, result); } @@ -165,8 +142,10 @@ void tst_QtConcurrentIterateKernel::stresstest() const int times = 50; for (int i = 0; i < times; ++i) { counter.storeRelaxed(0); - CountFor f(0, iterations); - f.startBlocking(); + // ThreadEngine will delete f when it finishes + auto f = new CountFor(0, iterations); + auto future = f->startAsynchronously(); + future.waitForFinished(); QCOMPARE(counter.loadRelaxed(), iterations); } } @@ -174,8 +153,12 @@ void tst_QtConcurrentIterateKernel::stresstest() void tst_QtConcurrentIterateKernel::noIterations() { const int times = 20000; - for (int i = 0; i < times; ++i) - startThreadEngine(new IterateKernel<TestIterator, void>(QThreadPool::globalInstance(), 0, 0)).startBlocking(); + for (int i = 0; i < times; ++i) { + auto future = startThreadEngine(new IterateKernel<TestIterator, void>( + QThreadPool::globalInstance(), 0, 0)) + .startAsynchronously(); + future.waitForFinished(); + } } QMutex threadsMutex; @@ -187,7 +170,7 @@ public: // and then records how many threads that run between // iterations 140 and 160. ThrottleFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, void>(QThreadPool::globalInstance(), begin, end) { iterations.storeRelaxed(0); throttling = false; } - inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *) + inline bool runIterations(TestIterator/*beginIterator*/, int begin, int end, void *) override { if (200 >= begin && 200 < end) { throttling = false; @@ -210,12 +193,12 @@ public: return false; } - bool runIteration(TestIterator it, int index , void *result) + bool runIteration(TestIterator it, int index , void *result) override { return runIterations(it, index, index + 1, result); } - bool shouldThrottleThread() + bool shouldThrottleThread() override { const int load = iterations.loadRelaxed(); return (load > 100 && load < 200); @@ -230,20 +213,22 @@ void tst_QtConcurrentIterateKernel::throttling() threads.clear(); - ThrottleFor f(0, totalIterations); - f.startBlocking(); + // ThreadEngine will delete f when it finishes + auto f = new ThrottleFor(0, totalIterations); + auto future = f->startAsynchronously(); + future.waitForFinished(); QCOMPARE(iterations.loadRelaxed(), totalIterations); - QCOMPARE(threads.count(), 1); + QCOMPARE(threads.size(), 1); } class MultipleResultsFor : public IterateKernel<TestIterator, int> { public: MultipleResultsFor(TestIterator begin, TestIterator end) : IterateKernel<TestIterator, int>(QThreadPool::globalInstance(), begin, end) { } - inline bool runIterations(TestIterator, int begin, int end, int *results) + inline bool runIterations(TestIterator, int begin, int end, int *results) override { for (int i = begin; i < end; ++i) results[i - begin] = i; @@ -254,7 +239,7 @@ public: void tst_QtConcurrentIterateKernel::multipleResults() { QFuture<int> f = startThreadEngine(new MultipleResultsFor(0, 10)).startAsynchronously(); - QCOMPARE(f.results().count() , 10); + QCOMPARE(f.results().size() , 10); QCOMPARE(f.resultAt(0), 0); QCOMPARE(f.resultAt(5), 5); QCOMPARE(f.resultAt(9), 9); |