summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp')
-rw-r--r--tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp b/tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp
new file mode 100644
index 0000000000..eccfad91da
--- /dev/null
+++ b/tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp
@@ -0,0 +1,120 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest/QTest>
+
+#include <QStringTokenizer>
+
+class tst_QStringTokenizer : public QObject
+{
+ Q_OBJECT
+
+ void tokenize_data() const;
+ template <typename T, typename U>
+ void tokenize() const;
+private slots:
+ void tokenize_qlatin1string_qlatin1string_data() const { tokenize_data(); }
+ void tokenize_qlatin1string_qlatin1string() const { tokenize<QLatin1String, QLatin1String>(); }
+ void tokenize_qstring_qstring_data() const { tokenize_data(); }
+ void tokenize_qstring_qstring() const { tokenize<QString, QString>(); }
+ void tokenize_qlatin1string_qstring_data() const { tokenize_data(); }
+ void tokenize_qlatin1string_qstring() const { tokenize<QLatin1String, QString>(); }
+ void tokenize_qstring_qlatin1string_data() const { tokenize_data(); }
+ void tokenize_qstring_qlatin1string() const { tokenize<QString, QLatin1String>(); }
+};
+
+template<typename T>
+T fromByteArray(QByteArrayView v);
+
+template<>
+QString fromByteArray<QString>(QByteArrayView v)
+{
+ return QString::fromLatin1(v);
+}
+
+template<>
+QLatin1String fromByteArray<QLatin1String>(QByteArrayView v)
+{
+ return QLatin1String(v.data(), v.size());
+}
+
+void tst_QStringTokenizer::tokenize_data() const
+{
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<QByteArray>("separator");
+ QTest::addColumn<bool>("caseSensitive");
+ QTest::addColumn<int>("expectedCount");
+
+ QByteArray shortSentence = "A seriously short sentence.";
+ QTest::addRow("short-sentence-spaces") << shortSentence << QByteArray(" ") << true << 4;
+ QTest::addRow("short-sentence-spaces-case-insensitive")
+ << shortSentence << QByteArray(" ") << false << 4;
+
+ QTest::addRow("short-sentence-se") << shortSentence << QByteArray("se") << true << 3;
+ QTest::addRow("short-sentence-se-case-insensitive")
+ << shortSentence << QByteArray("Se") << false << 3;
+
+ QFile file(":/data/lorem.txt");
+ if (!file.open(QFile::ReadOnly))
+ qFatal("Can't open lorem.txt");
+
+ const QByteArray content = file.readAll();
+ QTest::addRow("lorem-ipsum-spaces") << content << QByteArray(" ") << true << 3250;
+ QTest::addRow("lorem-ipsum-spaces-case-insensitive")
+ << content << QByteArray(" ") << false << 3250;
+
+ QTest::addRow("lorem-ipsum-l") << content << QByteArray("l") << true << 771;
+ QTest::addRow("lorem-ipsum-l-case-insensitive")
+ << content << QByteArray("l") << false << 772;
+
+ QTest::addRow("lorem-ipsum-lo") << content << QByteArray("lo") << true << 130;
+ QTest::addRow("lorem-ipsum-lo-case-insensitive")
+ << content << QByteArray("lo") << false << 131;
+
+ QTest::addRow("lorem-ipsum-lor") << content << QByteArray("lor") << true << 122;
+ QTest::addRow("lorem-ipsum-lor-case-insensitive")
+ << content << QByteArray("lor") << false << 123;
+
+ QTest::addRow("lorem-ipsum-lore") << content << QByteArray("lore") << true << 73;
+ QTest::addRow("lorem-ipsum-lore-case-insensitive")
+ << content << QByteArray("lore") << false << 74;
+
+ QTest::addRow("lorem-ipsum-lorem") << content << QByteArray("lorem") << true << 34;
+ QTest::addRow("lorem-ipsum-lorem-case-insensitive")
+ << content << QByteArray("lorem") << false << 35;
+
+ QTest::addRow("lorem-ipsum-lorem i") << content << QByteArray("lorem i") << true << 5;
+ QTest::addRow("lorem-ipsum-lorem i-case-insensitive")
+ << content << QByteArray("lorem i") << false << 6;
+
+ QTest::addRow("lorem-ipsum-et explicabo s") << content << QByteArray("et explicabo s") << true << 3;
+ QTest::addRow("lorem-ipsum-et explicabo s-case-insensitive")
+ << content << QByteArray("et explicabo s") << false << 3;
+}
+
+template<typename T, typename U>
+void tst_QStringTokenizer::tokenize() const
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QByteArray, separator);
+ QFETCH(bool, caseSensitive);
+ QFETCH(int, expectedCount);
+
+ T haystack = fromByteArray<T>(input);
+ U needle = fromByteArray<U>(separator);
+
+ const Qt::CaseSensitivity sensitivity = caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ QBENCHMARK {
+ QStringTokenizer tok(haystack, needle, sensitivity);
+ qsizetype count = 0;
+ for (auto res : tok) {
+ count++;
+ Q_UNUSED(res);
+ }
+ QCOMPARE(count, expectedCount);
+ }
+}
+
+QTEST_MAIN(tst_QStringTokenizer)
+
+#include "tst_bench_qstringtokenizer.moc"