From db5163dca9e1f0c64a2881e1b3e2a7fc15b2bfbe Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Mon, 14 Aug 2023 18:20:52 +0300 Subject: [PATCH] Benchmarks: port Q_FOREACH to ranged-for Simple cases, all local const containers. tst_QHash: rename the template parameter to "Str". My eyes saw "QList", but my brain somehow assumed QList<*Q*String>. You could argue that I am a bit slow, but it has tricked someone else in code review, so just rename it for the sake of clarity. Drive-by, remove braces from one-line for-loop-block. Task-number: QTBUG-115839 Change-Id: Ia1a56bea7b931efb377ba8c04ee8933561abf341 Reviewed-by: Marc Mutz --- .../io/qdir/10000/tst_bench_qdir_10000.cpp | 25 +++++++--------- .../corelib/tools/qhash/tst_bench_qhash.cpp | 29 +++++++++---------- .../corelib/tools/qrect/tst_bench_qrect.cpp | 10 +++---- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp b/tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp index a53742b5363..b12e920df31 100644 --- a/tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp +++ b/tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp @@ -1,8 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only -#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses - #include #include @@ -42,8 +40,8 @@ private slots: { QBENCHMARK { QDir testdir(QDir::tempPath() + QLatin1String("/test_speed")); - QFileInfoList fileInfoList = testdir.entryInfoList(QDir::Files, QDir::Unsorted); - foreach (const QFileInfo &fileInfo, fileInfoList) { + const QFileInfoList fileInfoList = testdir.entryInfoList(QDir::Files, QDir::Unsorted); + for (const QFileInfo &fileInfo : fileInfoList) { fileInfo.isDir(); fileInfo.size(); } @@ -66,10 +64,9 @@ private slots: { QBENCHMARK { QDir testdir(QDir::tempPath() + QLatin1String("/test_speed")); - QFileInfoList fileInfoList = testdir.entryInfoList(QDir::NoFilter, QDir::Unsorted); - foreach (const QFileInfo &fileInfo, fileInfoList) { + const QFileInfoList fileInfoList = testdir.entryInfoList(QDir::NoFilter, QDir::Unsorted); + for (const QFileInfo &fileInfo : fileInfoList) fileInfo.size(); - } } } void sizeSpeedWithoutFilterIterator() @@ -90,8 +87,8 @@ private slots: QBENCHMARK { QDir testdir(QDir::tempPath() + QLatin1String("/test_speed")); testdir.setSorting(QDir::Unsorted); - QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted); - foreach (const QString &filename, fileList) { + const QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted); + for (const QString &filename : fileList) { QFileInfo fileInfo(filename); fileInfo.size(); } @@ -104,10 +101,9 @@ private slots: QDir testdir(QDir::tempPath() + QLatin1String("/test_speed")); testdir.setSorting(QDir::Unsorted); testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden); - QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted); - foreach (const QString &filename, fileList) { + const QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted); + for (const QString &filename : fileList) Q_UNUSED(filename); - } } } void iDontWantAnyStatIterator() @@ -126,10 +122,9 @@ private slots: QDir testdir(QDir::tempPath() + QLatin1String("/test_speed")); testdir.setSorting(QDir::Time); testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden); - QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Time); - foreach (const QString &filename, fileList) { + const QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Time); + for (const QString &filename : fileList) Q_UNUSED(filename); - } } } diff --git a/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp b/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp index 1a62a484372..2159cfaf83c 100644 --- a/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp +++ b/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp @@ -2,8 +2,6 @@ // Copyright (C) 2016 Intel Corporation. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only -#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses - #include "tst_bench_qhash.h" #include @@ -84,7 +82,7 @@ void tst_QHash::initTestCase() uuids.reserve(smallFilePaths.size()); longstrings.reserve(smallFilePaths.size()); - foreach (const QString &path, smallFilePaths) + for (const QString &path : std::as_const(smallFilePaths)) uuids.append(QUuid::createUuidV5(ns, path).toString()); for (qsizetype i = 0; i < uuids.size(); ++i) longstrings.append(uuids.at(i).repeated(8)); @@ -133,13 +131,14 @@ void tst_QHash::data() QTest::newRow("numbers") << numbers; } -template void tst_QHash::qhash_template() +template void tst_QHash::qhash_template() { - QFETCH(QStringList, items); - QHash hash; + QFETCH(const QStringList, items); + QHash hash; - QList realitems; - foreach (const QString &s, items) + QList realitems; + realitems.reserve(items.size()); + for (const QString &s : items) realitems.append(s); QBENCHMARK { @@ -149,18 +148,18 @@ template void tst_QHash::qhash_template() } } -template void tst_QHash::hashing_template() +template void tst_QHash::hashing_template() { // just the hashing function - QFETCH(QStringList, items); + QFETCH(const QStringList, items); - QList realitems; + QList realitems; realitems.reserve(items.size()); - foreach (const QString &s, items) { - if constexpr (std::is_same_v) { + for (const QString &s : items) { + if constexpr (std::is_same_v) { realitems.append(s); - } else if constexpr (sizeof(typename String::value_type) == 1) { - realitems.append(String(s.toLatin1())); + } else if constexpr (sizeof(typename Str::value_type) == 1) { + realitems.append(Str(s.toLatin1())); } } diff --git a/tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp b/tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp index 0ba9e159634..e2f53e1a55c 100644 --- a/tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp +++ b/tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp @@ -2,8 +2,6 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only // This file contains benchmarks for QRect/QRectF functions. -#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses - #include #include @@ -79,8 +77,8 @@ static void addRectRectData(bool includeProperArg = false) if (includeProperArg) QTest::addColumn("proper"); for (int i = 0; i < (includeProperArg ? 2 : 1); ++i) { - QList combinations = createRectRectCombinations(); - foreach (RectRectCombination c, combinations) { + const QList combinations = createRectRectCombinations(); + for (const RectRectCombination &c : combinations) { QTestData &testData = QTest::newRow(c.tag.toLatin1().data()); QRectF r1(c.x1, c.y1, c.w1, c.h1); QRectF r2(c.x2, c.y2, c.w2, c.h2); @@ -124,8 +122,8 @@ static void addRectPointData(bool includeProperArg = false) if (includeProperArg) QTest::addColumn("proper"); for (int i = 0; i < (includeProperArg ? 2 : 1); ++i) { - QList combinations = createRectPointCombinations(); - foreach (RectPointCombination c, combinations) { + const QList combinations = createRectPointCombinations(); + for (const RectPointCombination &c : combinations) { QTestData &testData = QTest::newRow(c.tag.toLatin1().data()); QRectF r(c.x, c.y, c.w, c.h); QPointF p(c.px, c.py);