summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/corelib/text/qlocale
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks/corelib/text/qlocale')
-rw-r--r--tests/benchmarks/corelib/text/qlocale/CMakeLists.txt7
-rw-r--r--tests/benchmarks/corelib/text/qlocale/main.cpp397
-rw-r--r--tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp593
3 files changed, 597 insertions, 400 deletions
diff --git a/tests/benchmarks/corelib/text/qlocale/CMakeLists.txt b/tests/benchmarks/corelib/text/qlocale/CMakeLists.txt
index 1c692af6c8..04c2f69b9f 100644
--- a/tests/benchmarks/corelib/text/qlocale/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qlocale/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qlocale.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qlocale Binary:
@@ -6,7 +7,7 @@
qt_internal_add_benchmark(tst_bench_qlocale
SOURCES
- main.cpp
- PUBLIC_LIBRARIES
+ tst_bench_qlocale.cpp
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/text/qlocale/main.cpp b/tests/benchmarks/corelib/text/qlocale/main.cpp
deleted file mode 100644
index 0ddaa33110..0000000000
--- a/tests/benchmarks/corelib/text/qlocale/main.cpp
+++ /dev/null
@@ -1,397 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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$
-**
-****************************************************************************/
-
-#include <QLocale>
-#include <QTest>
-
-class tst_QLocale : public QObject
-{
- Q_OBJECT
-
-private Q_SLOTS:
- void fromString_data();
- void fromString();
- void fromTags_data();
- void fromTags();
- void fromLangScript_data();
- void fromLangScript();
- void fromLangLand_data();
- void fromLangLand();
- void fromScriptLand_data();
- void fromScriptLand();
- void fromLang_data();
- void fromLang();
- void fromScript_data();
- void fromScript();
- void fromLand_data();
- void fromLand();
- void toUpper_QLocale_1();
- void toUpper_QLocale_2();
- void toUpper_QString();
- void number_QString();
-};
-
-static QString data()
-{
- return QStringLiteral("/qt-5/qtbase/tests/benchmarks/corelib/tools/qlocale");
-}
-
-// Make individual cycles O(a few) msecs, rather than tiny fractions thereof:
-#define LOOP(s) for (int i = 0; i < 5000; ++i) { s; }
-
-void tst_QLocale::fromString_data()
-{
- QTest::addColumn<QString>("name");
-
- QTest::newRow("C") << QStringLiteral("C");
-#define ROW(name) QTest::newRow(name) << QStringLiteral(name)
- ROW("en-Latn-DE");
- ROW("sd-Deva-IN");
- ROW("az-Cyrl-AZ");
- ROW("az-Latn-AZ");
- ROW("bs-Cyrl-BA");
- ROW("bs-Latn-BA");
- ROW("ff-Latn-LR");
- ROW("ff-Latn-MR");
- ROW("pa-Arab-PK");
- ROW("pa-Guru-IN");
- ROW("shi-Latn-MA");
- ROW("shi-Tfng-MA");
- ROW("sr-Cyrl-BA");
- ROW("sr-Cyrl-RS");
- ROW("sr-Latn-BA");
- ROW("sr-Latn-ME");
- ROW("uz-Arab-AF");
- ROW("uz-Cyrl-UZ");
- ROW("uz-Latn-UZ");
- ROW("vai-Latn-LR");
- ROW("vai-Vaii-LR");
- ROW("yue-Hans-CN");
- ROW("yue-Hant-HK");
- ROW("zh-Hans-CN");
- ROW("zh-Hans-HK");
- ROW("zh-Hans-SG");
- ROW("zh-Hant-HK");
- ROW("zh-Hant-TW");
-#undef ROW
-}
-
-void tst_QLocale::fromString()
-{
- QFETCH(const QString, name);
- QBENCHMARK { LOOP(QLocale loc(name)) }
-}
-
-void tst_QLocale::fromTags_data()
-{
- QTest::addColumn<QLocale::Language>("language");
- QTest::addColumn<QLocale::Script>("script");
- QTest::addColumn<QLocale::Country>("territory");
-
-#define ROW(name, lang, text, land) \
- QTest::newRow(name) << QLocale::lang << QLocale::text << QLocale::land
- ROW("C", C, AnyScript, AnyCountry);
- ROW("en-Latn-DE", English, LatinScript, Germany);
- ROW("sd-Deva-IN", Sindhi, DevanagariScript, India);
- ROW("az-Cyrl-AZ", Azerbaijani, CyrillicScript, Azerbaijan);
- ROW("az-Latn-AZ", Azerbaijani, LatinScript, Azerbaijan);
- ROW("bs-Cyrl-BA", Bosnian, CyrillicScript, BosniaAndHerzegowina);
- ROW("bs-Latn-BA", Bosnian, LatinScript, BosniaAndHerzegowina);
- ROW("ff-Latn-LR", Fulah, LatinScript, Liberia);
- ROW("ff-Latn-MR", Fulah, LatinScript, Mauritania);
- ROW("pa-Arab-PK", Punjabi, ArabicScript, Pakistan);
- ROW("pa-Guru-IN", Punjabi, GurmukhiScript, India);
- ROW("shi-Latn-MA", Tachelhit, LatinScript, Morocco);
- ROW("shi-Tfng-MA", Tachelhit, TifinaghScript, Morocco);
- ROW("sr-Cyrl-BA", Serbian, CyrillicScript, BosniaAndHerzegowina);
- ROW("sr-Cyrl-RS", Serbian, CyrillicScript, Serbia);
- ROW("sr-Latn-BA", Serbian, LatinScript, BosniaAndHerzegowina);
- ROW("sr-Latn-ME", Serbian, LatinScript, Montenegro);
- ROW("uz-Arab-AF", Uzbek, ArabicScript, Afghanistan);
- ROW("uz-Cyrl-UZ", Uzbek, CyrillicScript, Uzbekistan);
- ROW("uz-Latn-UZ", Uzbek, LatinScript, Uzbekistan);
- ROW("vai-Latn-LR", Vai, LatinScript, Liberia);
- ROW("vai-Vaii-LR", Vai, VaiScript, Liberia);
- ROW("yue-Hans-CN", Cantonese, SimplifiedHanScript, China);
- ROW("yue-Hant-HK", Cantonese, TraditionalHanScript, HongKong);
- ROW("zh-Hans-CN", Chinese, SimplifiedHanScript, China);
- ROW("zh-Hans-HK", Chinese, SimplifiedHanScript, HongKong);
- ROW("zh-Hans-SG", Chinese, SimplifiedHanScript, Singapore);
- ROW("zh-Hant-HK", Chinese, TraditionalHanScript, HongKong);
- ROW("zh-Hant-TW", Chinese, TraditionalHanScript, Taiwan);
-#undef ROW
-}
-
-void tst_QLocale::fromTags()
-{
- QFETCH(const QLocale::Language, language);
- QFETCH(const QLocale::Script, script);
- QFETCH(const QLocale::Country, territory);
- QBENCHMARK { LOOP(QLocale loc(language, script, territory)) }
-}
-
-void tst_QLocale::fromLangScript_data()
-{
- QTest::addColumn<QLocale::Language>("language");
- QTest::addColumn<QLocale::Script>("script");
-
-#define ROW(name, lang, text) \
- QTest::newRow(name) << QLocale::lang << QLocale::text
- ROW("C", C, AnyScript);
- ROW("en-Latn", English, LatinScript);
- ROW("sd-Deva", Sindhi, DevanagariScript);
- ROW("az-Cyrl", Azerbaijani, CyrillicScript);
- ROW("az-Latn", Azerbaijani, LatinScript);
- ROW("bs-Cyrl", Bosnian, CyrillicScript);
- ROW("bs-Latn", Bosnian, LatinScript);
- ROW("ff-Latn", Fulah, LatinScript);
- ROW("pa-Arab", Punjabi, ArabicScript);
- ROW("pa-Guru", Punjabi, GurmukhiScript);
- ROW("shi-Latn", Tachelhit, LatinScript);
- ROW("shi-Tfng", Tachelhit, TifinaghScript);
- ROW("sr-Cyrl", Serbian, CyrillicScript);
- ROW("sr-Latn", Serbian, LatinScript);
- ROW("uz-Arab", Uzbek, ArabicScript);
- ROW("uz-Cyrl", Uzbek, CyrillicScript);
- ROW("uz-Latn", Uzbek, LatinScript);
- ROW("vai-Latn", Vai, LatinScript);
- ROW("vai-Vaii", Vai, VaiScript);
- ROW("yue-Hans", Cantonese, SimplifiedHanScript);
- ROW("yue-Hant", Cantonese, TraditionalHanScript);
- ROW("zh-Hans", Chinese, SimplifiedHanScript);
- ROW("zh-Hant", Chinese, TraditionalHanScript);
-#undef ROW
-}
-
-void tst_QLocale::fromLangScript()
-{
- QFETCH(const QLocale::Language, language);
- QFETCH(const QLocale::Script, script);
- QBENCHMARK { LOOP(QLocale loc(language, script, QLocale::AnyCountry)) }
-}
-
-void tst_QLocale::fromLangLand_data()
-{
- QTest::addColumn<QLocale::Language>("language");
- QTest::addColumn<QLocale::Country>("territory");
-
-#define ROW(name, lang, land) \
- QTest::newRow(name) << QLocale::lang << QLocale::land
- ROW("C", C, AnyCountry);
- ROW("en-DE", English, Germany);
- ROW("sd-IN", Sindhi, India);
- ROW("az-AZ", Azerbaijani, Azerbaijan);
- ROW("bs-BA", Bosnian, BosniaAndHerzegowina);
- ROW("ff-LR", Fulah, Liberia);
- ROW("ff-MR", Fulah, Mauritania);
- ROW("pa-PK", Punjabi, Pakistan);
- ROW("pa-IN", Punjabi, India);
- ROW("shi-MA", Tachelhit, Morocco);
- ROW("sr-BA", Serbian, BosniaAndHerzegowina);
- ROW("sr-RS", Serbian, Serbia);
- ROW("sr-ME", Serbian, Montenegro);
- ROW("uz-AF", Uzbek, Afghanistan);
- ROW("uz-UZ", Uzbek, Uzbekistan);
- ROW("vai-LR", Vai, Liberia);
- ROW("yue-CN", Cantonese, China);
- ROW("yue-HK", Cantonese, HongKong);
- ROW("zh-CN", Chinese, China);
- ROW("zh-HK", Chinese, HongKong);
- ROW("zh-SG", Chinese, Singapore);
- ROW("zh-TW", Chinese, Taiwan);
-#undef ROW
-}
-
-void tst_QLocale::fromLangLand()
-{
- QFETCH(const QLocale::Language, language);
- QFETCH(const QLocale::Country, territory);
- QBENCHMARK { LOOP(QLocale loc(language, territory)) }
-}
-
-void tst_QLocale::fromScriptLand_data()
-{
- QTest::addColumn<QLocale::Script>("script");
- QTest::addColumn<QLocale::Country>("territory");
-
-#define ROW(name, text, land) \
- QTest::newRow(name) << QLocale::text << QLocale::land
- ROW("Any", AnyScript, AnyCountry);
- ROW("Latn-DE", LatinScript, Germany);
- ROW("Deva-IN", DevanagariScript, India);
- ROW("Cyrl-AZ", CyrillicScript, Azerbaijan);
- ROW("Latn-AZ", LatinScript, Azerbaijan);
- ROW("Cyrl-BA", CyrillicScript, BosniaAndHerzegowina);
- ROW("Latn-BA", LatinScript, BosniaAndHerzegowina);
- ROW("Latn-LR", LatinScript, Liberia);
- ROW("Latn-MR", LatinScript, Mauritania);
- ROW("Arab-PK", ArabicScript, Pakistan);
- ROW("Guru-IN", GurmukhiScript, India);
- ROW("Latn-MA", LatinScript, Morocco);
- ROW("Tfng-MA", TifinaghScript, Morocco);
- ROW("Cyrl-BA", CyrillicScript, BosniaAndHerzegowina);
- ROW("Cyrl-RS", CyrillicScript, Serbia);
- ROW("Latn-BA", LatinScript, BosniaAndHerzegowina);
- ROW("Latn-ME", LatinScript, Montenegro);
- ROW("Arab-AF", ArabicScript, Afghanistan);
- ROW("Cyrl-UZ", CyrillicScript, Uzbekistan);
- ROW("Latn-UZ", LatinScript, Uzbekistan);
- ROW("Latn-LR", LatinScript, Liberia);
- ROW("Vaii-LR", VaiScript, Liberia);
- ROW("Hans-CN", SimplifiedHanScript, China);
- ROW("Hant-HK", TraditionalHanScript, HongKong);
- ROW("Hans-CN", SimplifiedHanScript, China);
- ROW("Hans-HK", SimplifiedHanScript, HongKong);
- ROW("Hans-SG", SimplifiedHanScript, Singapore);
- ROW("Hant-HK", TraditionalHanScript, HongKong);
- ROW("Hant-TW", TraditionalHanScript, Taiwan);
-#undef ROW
-}
-
-void tst_QLocale::fromScriptLand()
-{
- QFETCH(const QLocale::Script, script);
- QFETCH(const QLocale::Country, territory);
- QBENCHMARK { LOOP(QLocale loc(QLocale::AnyLanguage, script, territory)) }
-}
-
-void tst_QLocale::fromLang_data()
-{
- QTest::addColumn<QLocale::Language>("language");
-
-#define ROW(name, lang) \
- QTest::newRow(name) << QLocale::lang
- ROW("C", C);
- ROW("en", English);
- ROW("sd", Sindhi);
- ROW("az", Azerbaijani);
- ROW("bs", Bosnian);
- ROW("ff", Fulah);
- ROW("pa", Punjabi);
- ROW("shi", Tachelhit);
- ROW("sr", Serbian);
- ROW("uz", Uzbek);
- ROW("vai", Vai);
- ROW("yue", Cantonese);
- ROW("zh", Chinese);
-#undef ROW
-}
-
-void tst_QLocale::fromLang()
-{
- QFETCH(const QLocale::Language, language);
- QBENCHMARK { LOOP(QLocale loc(language)) }
-}
-
-void tst_QLocale::fromScript_data()
-{
- QTest::addColumn<QLocale::Script>("script");
-
-#define ROW(name, text) \
- QTest::newRow(name) << QLocale::text
- ROW("Any", AnyScript);
- ROW("Latn", LatinScript);
- ROW("Deva", DevanagariScript);
- ROW("Cyrl", CyrillicScript);
- ROW("Arab", ArabicScript);
- ROW("Guru", GurmukhiScript);
- ROW("Tfng", TifinaghScript);
- ROW("Vaii", VaiScript);
- ROW("Hans", SimplifiedHanScript);
- ROW("Hant", TraditionalHanScript);
-#undef ROW
-}
-
-void tst_QLocale::fromScript()
-{
- QFETCH(const QLocale::Script, script);
- QBENCHMARK { LOOP(QLocale loc(QLocale::AnyLanguage, script, QLocale::AnyCountry)) }
-}
-
-void tst_QLocale::fromLand_data()
-{
- QTest::addColumn<QLocale::Country>("territory");
-
-#define ROW(name, land) \
- QTest::newRow(name) << QLocale::land
- ROW("Any", AnyCountry);
- ROW("DE", Germany);
- ROW("IN", India);
- ROW("AZ", Azerbaijan);
- ROW("BA", BosniaAndHerzegowina);
- ROW("LR", Liberia);
- ROW("MR", Mauritania);
- ROW("PK", Pakistan);
- ROW("MA", Morocco);
- ROW("RS", Serbia);
- ROW("ME", Montenegro);
- ROW("AF", Afghanistan);
- ROW("UZ", Uzbekistan);
- ROW("CN", China);
- ROW("HK", HongKong);
- ROW("SG", Singapore);
- ROW("TW", Taiwan);
-#undef ROW
-}
-
-void tst_QLocale::fromLand()
-{
- QFETCH(const QLocale::Country, territory);
- QBENCHMARK { LOOP(QLocale loc(QLocale::AnyLanguage, territory)) }
-}
-
-void tst_QLocale::toUpper_QLocale_1()
-{
- QString s = data();
- QBENCHMARK { LOOP(QString t(QLocale().toUpper(s))) }
-}
-
-void tst_QLocale::toUpper_QLocale_2()
-{
- QString s = data();
- QLocale l;
- QBENCHMARK { LOOP(QString t(l.toUpper(s))) }
-}
-
-void tst_QLocale::toUpper_QString()
-{
- QString s = data();
- QBENCHMARK { LOOP(QString t(s.toUpper())) }
-}
-
-void tst_QLocale::number_QString()
-{
- QString s;
- QBENCHMARK {
- s = QString::number(12345678);
- }
-}
-
-QTEST_MAIN(tst_QLocale)
-
-#include "main.moc"
diff --git a/tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp b/tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp
new file mode 100644
index 0000000000..3d13174c9c
--- /dev/null
+++ b/tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp
@@ -0,0 +1,593 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QLocale>
+#include <QTest>
+
+using namespace Qt::StringLiterals;
+
+class tst_QLocale : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void fromString_data();
+ void fromString();
+ void fromTags_data();
+ void fromTags();
+ void fromLangScript_data();
+ void fromLangScript();
+ void fromLangLand_data();
+ void fromLangLand();
+ void fromScriptLand_data();
+ void fromScriptLand();
+ void fromLang_data();
+ void fromLang();
+ void fromScript_data();
+ void fromScript();
+ void fromLand_data();
+ void fromLand();
+ void toUpper_QLocale_1();
+ void toUpper_QLocale_2();
+ void toUpper_QString();
+ void number_QString();
+ void toLongLong_data();
+ void toLongLong();
+ void toULongLong_data();
+ void toULongLong();
+ void toDouble_data();
+ void toDouble();
+};
+
+static QString data()
+{
+ return QStringLiteral("/qt-5/qtbase/tests/benchmarks/corelib/tools/qlocale");
+}
+
+// Make individual cycles O(a few) msecs, rather than tiny fractions thereof:
+#define LOOP(s) for (int i = 0; i < 5000; ++i) { s; }
+
+void tst_QLocale::fromString_data()
+{
+ QTest::addColumn<QString>("name");
+
+ QTest::newRow("C") << QStringLiteral("C");
+#define ROW(name) QTest::newRow(name) << QStringLiteral(name)
+ ROW("en-Latn-DE");
+ ROW("sd-Deva-IN");
+ ROW("az-Cyrl-AZ");
+ ROW("az-Latn-AZ");
+ ROW("bs-Cyrl-BA");
+ ROW("bs-Latn-BA");
+ ROW("ff-Latn-LR");
+ ROW("ff-Latn-MR");
+ ROW("pa-Arab-PK");
+ ROW("pa-Guru-IN");
+ ROW("shi-Latn-MA");
+ ROW("shi-Tfng-MA");
+ ROW("sr-Cyrl-BA");
+ ROW("sr-Cyrl-RS");
+ ROW("sr-Latn-BA");
+ ROW("sr-Latn-ME");
+ ROW("uz-Arab-AF");
+ ROW("uz-Cyrl-UZ");
+ ROW("uz-Latn-UZ");
+ ROW("vai-Latn-LR");
+ ROW("vai-Vaii-LR");
+ ROW("yue-Hans-CN");
+ ROW("yue-Hant-HK");
+ ROW("zh-Hans-CN");
+ ROW("zh-Hans-HK");
+ ROW("zh-Hans-SG");
+ ROW("zh-Hant-HK");
+ ROW("zh-Hant-TW");
+#undef ROW
+}
+
+void tst_QLocale::fromString()
+{
+ QFETCH(const QString, name);
+ QBENCHMARK { LOOP(QLocale loc(name)) }
+}
+
+void tst_QLocale::fromTags_data()
+{
+ QTest::addColumn<QLocale::Language>("language");
+ QTest::addColumn<QLocale::Script>("script");
+ QTest::addColumn<QLocale::Territory>("territory");
+
+#define ROW(name, lang, text, land) \
+ QTest::newRow(name) << QLocale::lang << QLocale::text << QLocale::land
+ ROW("C", C, AnyScript, AnyTerritory);
+ ROW("en-Latn-DE", English, LatinScript, Germany);
+ ROW("sd-Deva-IN", Sindhi, DevanagariScript, India);
+ ROW("az-Cyrl-AZ", Azerbaijani, CyrillicScript, Azerbaijan);
+ ROW("az-Latn-AZ", Azerbaijani, LatinScript, Azerbaijan);
+ ROW("bs-Cyrl-BA", Bosnian, CyrillicScript, BosniaAndHerzegowina);
+ ROW("bs-Latn-BA", Bosnian, LatinScript, BosniaAndHerzegowina);
+ ROW("ff-Latn-LR", Fulah, LatinScript, Liberia);
+ ROW("ff-Latn-MR", Fulah, LatinScript, Mauritania);
+ ROW("pa-Arab-PK", Punjabi, ArabicScript, Pakistan);
+ ROW("pa-Guru-IN", Punjabi, GurmukhiScript, India);
+ ROW("shi-Latn-MA", Tachelhit, LatinScript, Morocco);
+ ROW("shi-Tfng-MA", Tachelhit, TifinaghScript, Morocco);
+ ROW("sr-Cyrl-BA", Serbian, CyrillicScript, BosniaAndHerzegowina);
+ ROW("sr-Cyrl-RS", Serbian, CyrillicScript, Serbia);
+ ROW("sr-Latn-BA", Serbian, LatinScript, BosniaAndHerzegowina);
+ ROW("sr-Latn-ME", Serbian, LatinScript, Montenegro);
+ ROW("uz-Arab-AF", Uzbek, ArabicScript, Afghanistan);
+ ROW("uz-Cyrl-UZ", Uzbek, CyrillicScript, Uzbekistan);
+ ROW("uz-Latn-UZ", Uzbek, LatinScript, Uzbekistan);
+ ROW("vai-Latn-LR", Vai, LatinScript, Liberia);
+ ROW("vai-Vaii-LR", Vai, VaiScript, Liberia);
+ ROW("yue-Hans-CN", Cantonese, SimplifiedHanScript, China);
+ ROW("yue-Hant-HK", Cantonese, TraditionalHanScript, HongKong);
+ ROW("zh-Hans-CN", Chinese, SimplifiedHanScript, China);
+ ROW("zh-Hans-HK", Chinese, SimplifiedHanScript, HongKong);
+ ROW("zh-Hans-SG", Chinese, SimplifiedHanScript, Singapore);
+ ROW("zh-Hant-HK", Chinese, TraditionalHanScript, HongKong);
+ ROW("zh-Hant-TW", Chinese, TraditionalHanScript, Taiwan);
+#undef ROW
+}
+
+void tst_QLocale::fromTags()
+{
+ QFETCH(const QLocale::Language, language);
+ QFETCH(const QLocale::Script, script);
+ QFETCH(const QLocale::Territory, territory);
+ QBENCHMARK { LOOP(QLocale loc(language, script, territory)) }
+}
+
+void tst_QLocale::fromLangScript_data()
+{
+ QTest::addColumn<QLocale::Language>("language");
+ QTest::addColumn<QLocale::Script>("script");
+
+#define ROW(name, lang, text) \
+ QTest::newRow(name) << QLocale::lang << QLocale::text
+ ROW("C", C, AnyScript);
+ ROW("en-Latn", English, LatinScript);
+ ROW("sd-Deva", Sindhi, DevanagariScript);
+ ROW("az-Cyrl", Azerbaijani, CyrillicScript);
+ ROW("az-Latn", Azerbaijani, LatinScript);
+ ROW("bs-Cyrl", Bosnian, CyrillicScript);
+ ROW("bs-Latn", Bosnian, LatinScript);
+ ROW("ff-Latn", Fulah, LatinScript);
+ ROW("pa-Arab", Punjabi, ArabicScript);
+ ROW("pa-Guru", Punjabi, GurmukhiScript);
+ ROW("shi-Latn", Tachelhit, LatinScript);
+ ROW("shi-Tfng", Tachelhit, TifinaghScript);
+ ROW("sr-Cyrl", Serbian, CyrillicScript);
+ ROW("sr-Latn", Serbian, LatinScript);
+ ROW("uz-Arab", Uzbek, ArabicScript);
+ ROW("uz-Cyrl", Uzbek, CyrillicScript);
+ ROW("uz-Latn", Uzbek, LatinScript);
+ ROW("vai-Latn", Vai, LatinScript);
+ ROW("vai-Vaii", Vai, VaiScript);
+ ROW("yue-Hans", Cantonese, SimplifiedHanScript);
+ ROW("yue-Hant", Cantonese, TraditionalHanScript);
+ ROW("zh-Hans", Chinese, SimplifiedHanScript);
+ ROW("zh-Hant", Chinese, TraditionalHanScript);
+#undef ROW
+}
+
+void tst_QLocale::fromLangScript()
+{
+ QFETCH(const QLocale::Language, language);
+ QFETCH(const QLocale::Script, script);
+ QBENCHMARK { LOOP(QLocale loc(language, script, QLocale::AnyTerritory)) }
+}
+
+void tst_QLocale::fromLangLand_data()
+{
+ QTest::addColumn<QLocale::Language>("language");
+ QTest::addColumn<QLocale::Territory>("territory");
+
+#define ROW(name, lang, land) \
+ QTest::newRow(name) << QLocale::lang << QLocale::land
+ ROW("C", C, AnyTerritory);
+ ROW("en-DE", English, Germany);
+ ROW("sd-IN", Sindhi, India);
+ ROW("az-AZ", Azerbaijani, Azerbaijan);
+ ROW("bs-BA", Bosnian, BosniaAndHerzegowina);
+ ROW("ff-LR", Fulah, Liberia);
+ ROW("ff-MR", Fulah, Mauritania);
+ ROW("pa-PK", Punjabi, Pakistan);
+ ROW("pa-IN", Punjabi, India);
+ ROW("shi-MA", Tachelhit, Morocco);
+ ROW("sr-BA", Serbian, BosniaAndHerzegowina);
+ ROW("sr-RS", Serbian, Serbia);
+ ROW("sr-ME", Serbian, Montenegro);
+ ROW("uz-AF", Uzbek, Afghanistan);
+ ROW("uz-UZ", Uzbek, Uzbekistan);
+ ROW("vai-LR", Vai, Liberia);
+ ROW("yue-CN", Cantonese, China);
+ ROW("yue-HK", Cantonese, HongKong);
+ ROW("zh-CN", Chinese, China);
+ ROW("zh-HK", Chinese, HongKong);
+ ROW("zh-SG", Chinese, Singapore);
+ ROW("zh-TW", Chinese, Taiwan);
+#undef ROW
+}
+
+void tst_QLocale::fromLangLand()
+{
+ QFETCH(const QLocale::Language, language);
+ QFETCH(const QLocale::Territory, territory);
+ QBENCHMARK { LOOP(QLocale loc(language, territory)) }
+}
+
+void tst_QLocale::fromScriptLand_data()
+{
+ QTest::addColumn<QLocale::Script>("script");
+ QTest::addColumn<QLocale::Territory>("territory");
+
+#define ROW(name, text, land) \
+ QTest::newRow(name) << QLocale::text << QLocale::land
+ ROW("Any", AnyScript, AnyTerritory);
+ ROW("Latn-DE", LatinScript, Germany);
+ ROW("Deva-IN", DevanagariScript, India);
+ ROW("Cyrl-AZ", CyrillicScript, Azerbaijan);
+ ROW("Latn-AZ", LatinScript, Azerbaijan);
+ ROW("Cyrl-BA", CyrillicScript, BosniaAndHerzegowina);
+ ROW("Latn-BA", LatinScript, BosniaAndHerzegowina);
+ ROW("Latn-LR", LatinScript, Liberia);
+ ROW("Latn-MR", LatinScript, Mauritania);
+ ROW("Arab-PK", ArabicScript, Pakistan);
+ ROW("Guru-IN", GurmukhiScript, India);
+ ROW("Latn-MA", LatinScript, Morocco);
+ ROW("Tfng-MA", TifinaghScript, Morocco);
+ ROW("Cyrl-BA", CyrillicScript, BosniaAndHerzegowina);
+ ROW("Cyrl-RS", CyrillicScript, Serbia);
+ ROW("Latn-BA", LatinScript, BosniaAndHerzegowina);
+ ROW("Latn-ME", LatinScript, Montenegro);
+ ROW("Arab-AF", ArabicScript, Afghanistan);
+ ROW("Cyrl-UZ", CyrillicScript, Uzbekistan);
+ ROW("Latn-UZ", LatinScript, Uzbekistan);
+ ROW("Latn-LR", LatinScript, Liberia);
+ ROW("Vaii-LR", VaiScript, Liberia);
+ ROW("Hans-CN", SimplifiedHanScript, China);
+ ROW("Hant-HK", TraditionalHanScript, HongKong);
+ ROW("Hans-CN", SimplifiedHanScript, China);
+ ROW("Hans-HK", SimplifiedHanScript, HongKong);
+ ROW("Hans-SG", SimplifiedHanScript, Singapore);
+ ROW("Hant-HK", TraditionalHanScript, HongKong);
+ ROW("Hant-TW", TraditionalHanScript, Taiwan);
+#undef ROW
+}
+
+void tst_QLocale::fromScriptLand()
+{
+ QFETCH(const QLocale::Script, script);
+ QFETCH(const QLocale::Territory, territory);
+ QBENCHMARK { LOOP(QLocale loc(QLocale::AnyLanguage, script, territory)) }
+}
+
+void tst_QLocale::fromLang_data()
+{
+ QTest::addColumn<QLocale::Language>("language");
+
+#define ROW(name, lang) \
+ QTest::newRow(name) << QLocale::lang
+ ROW("C", C);
+ ROW("en", English);
+ ROW("sd", Sindhi);
+ ROW("az", Azerbaijani);
+ ROW("bs", Bosnian);
+ ROW("ff", Fulah);
+ ROW("pa", Punjabi);
+ ROW("shi", Tachelhit);
+ ROW("sr", Serbian);
+ ROW("uz", Uzbek);
+ ROW("vai", Vai);
+ ROW("yue", Cantonese);
+ ROW("zh", Chinese);
+#undef ROW
+}
+
+void tst_QLocale::fromLang()
+{
+ QFETCH(const QLocale::Language, language);
+ QBENCHMARK { LOOP(QLocale loc(language)) }
+}
+
+void tst_QLocale::fromScript_data()
+{
+ QTest::addColumn<QLocale::Script>("script");
+
+#define ROW(name, text) \
+ QTest::newRow(name) << QLocale::text
+ ROW("Any", AnyScript);
+ ROW("Latn", LatinScript);
+ ROW("Deva", DevanagariScript);
+ ROW("Cyrl", CyrillicScript);
+ ROW("Arab", ArabicScript);
+ ROW("Guru", GurmukhiScript);
+ ROW("Tfng", TifinaghScript);
+ ROW("Vaii", VaiScript);
+ ROW("Hans", SimplifiedHanScript);
+ ROW("Hant", TraditionalHanScript);
+#undef ROW
+}
+
+void tst_QLocale::fromScript()
+{
+ QFETCH(const QLocale::Script, script);
+ QBENCHMARK { LOOP(QLocale loc(QLocale::AnyLanguage, script, QLocale::AnyTerritory)) }
+}
+
+void tst_QLocale::fromLand_data()
+{
+ QTest::addColumn<QLocale::Territory>("territory");
+
+#define ROW(name, land) \
+ QTest::newRow(name) << QLocale::land
+ ROW("Any", AnyTerritory);
+ ROW("DE", Germany);
+ ROW("IN", India);
+ ROW("AZ", Azerbaijan);
+ ROW("BA", BosniaAndHerzegowina);
+ ROW("LR", Liberia);
+ ROW("MR", Mauritania);
+ ROW("PK", Pakistan);
+ ROW("MA", Morocco);
+ ROW("RS", Serbia);
+ ROW("ME", Montenegro);
+ ROW("AF", Afghanistan);
+ ROW("UZ", Uzbekistan);
+ ROW("CN", China);
+ ROW("HK", HongKong);
+ ROW("SG", Singapore);
+ ROW("TW", Taiwan);
+#undef ROW
+}
+
+void tst_QLocale::fromLand()
+{
+ QFETCH(const QLocale::Territory, territory);
+ QBENCHMARK { LOOP(QLocale loc(QLocale::AnyLanguage, territory)) }
+}
+
+void tst_QLocale::toUpper_QLocale_1()
+{
+ QString s = data();
+ QBENCHMARK { LOOP(QString t(QLocale().toUpper(s))) }
+}
+
+void tst_QLocale::toUpper_QLocale_2()
+{
+ QString s = data();
+ QLocale l;
+ QBENCHMARK { LOOP(QString t(l.toUpper(s))) }
+}
+
+void tst_QLocale::toUpper_QString()
+{
+ QString s = data();
+ QBENCHMARK { LOOP(QString t(s.toUpper())) }
+}
+
+void tst_QLocale::number_QString()
+{
+ QString s;
+ QBENCHMARK {
+ s = QString::number(12345678);
+ }
+}
+
+template <typename Integer>
+void toWholeCommon_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<QString>("locale");
+ QTest::addColumn<bool>("good");
+ QTest::addColumn<Integer>("expected");
+
+ QTest::newRow("C: empty") << u""_s << u"C"_s << false << Integer(0ull);
+ QTest::newRow("C: 0") << u"0"_s << u"C"_s << true << Integer(0ull);
+ QTest::newRow("C: 1234") << u"1234"_s << u"C"_s << true << Integer(1234ull);
+ // C locale omits grouping, but doesn't reject it.
+ QTest::newRow("C: 1,234") << u"1,234"_s << u"C"_s << true << Integer(1234ull);
+ QTest::newRow("C: 123456789")
+ << u"123456789"_s << u"C"_s << true << Integer(123456789ull);
+ QTest::newRow("C: 123,456,789")
+ << u"123,456,789"_s << u"C"_s << true << Integer(123456789ull);
+
+ QTest::newRow("en: empty") << u""_s << u"en"_s << false << Integer(0ull);
+ QTest::newRow("en: 0") << u"0"_s << u"en"_s << true << Integer(0ull);
+ QTest::newRow("en: 1234") << u"1234"_s << u"en"_s << true << Integer(1234ull);
+ QTest::newRow("en: 1,234") << u"1,234"_s << u"en"_s << true << Integer(1234ull);
+ QTest::newRow("en: 123,456,789")
+ << u"123,456,789"_s << u"en"_s << true << Integer(123456789ull);
+ QTest::newRow("en: 123456789")
+ << u"123456789"_s << u"en"_s << true << Integer(123456789ull);
+
+ QTest::newRow("de: empty") << u""_s << u"de"_s << false << Integer(0ull);
+ QTest::newRow("de: 0") << u"0"_s << u"de"_s << true << Integer(0ull);
+ QTest::newRow("de: 1234") << u"1234"_s << u"de"_s << true << Integer(1234ull);
+ QTest::newRow("de: 1.234") << u"1.234"_s << u"de"_s << true << Integer(1234ull);
+ QTest::newRow("de: 123.456.789")
+ << u"123.456.789"_s << u"de"_s << true << Integer(123456789ull);
+ QTest::newRow("de: 123456789")
+ << u"123456789"_s << u"de"_s << true << Integer(123456789ull);
+
+ // Locales with non-single-character signs:
+ QTest::newRow("ar_EG: +403") // Arabic, Egypt
+ << u"\u061c+\u0664\u0660\u0663"_s << u"ar_EG"_s << true << Integer(403ull);
+ QTest::newRow("ar_EG: !403") // Only first character of the sign
+ << u"\u061c\u0664\u0660\u0663"_s << u"ar_EG"_s << false << Integer(0ull);
+ QTest::newRow("fa_IR: +403") // Farsi, Iran
+ << u"\u200e+\u06f4\u06f0\u06f3"_s << u"fa_IR"_s << true << Integer(403ull);
+ QTest::newRow("fa_IR: !403") // Only first character of sign
+ << u"\u200e\u06f4\u06f0\u06f3"_s << u"fa_IR"_s << false << Integer(0ull);
+}
+
+void tst_QLocale::toLongLong_data()
+{
+ toWholeCommon_data<qlonglong>();
+
+ QTest::newRow("C: -1234") << u"-1234"_s << u"C"_s << true << -1234ll;
+ QTest::newRow("C: -123456789") << u"-123456789"_s << u"C"_s << true << -123456789ll;
+ QTest::newRow("C: qlonglong-max")
+ << u"9223372036854775807"_s << u"C"_s << true
+ << std::numeric_limits<qlonglong>::max();
+ QTest::newRow("C: qlonglong-min")
+ << u"-9223372036854775808"_s << u"C"_s << true
+ << std::numeric_limits<qlonglong>::min();
+
+ // Locales with multi-character signs:
+ QTest::newRow("ar_EG: -403") // Arabic, Egypt
+ << u"\u061c-\u0664\u0660\u0663"_s << u"ar_EG"_s << true << -403ll;
+ QTest::newRow("fa_IR: -403") // Farsi, Iran
+ << u"\u200e\u2212\u06f4\u06f0\u06f3"_s << u"fa_IR"_s << true << -403ll;
+}
+
+void tst_QLocale::toLongLong()
+{
+ QFETCH(QString, text);
+ QFETCH(QString, locale);
+ QFETCH(bool, good);
+ QFETCH(qlonglong, expected);
+
+ const QLocale loc(locale);
+ qlonglong actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = loc.toLongLong(text, &ok);
+ }
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
+void tst_QLocale::toULongLong_data()
+{
+ toWholeCommon_data<qulonglong>();
+
+ QTest::newRow("C: qlonglong-max + 1")
+ << u"9223372036854775808"_s << u"C"_s << true
+ << (qulonglong(std::numeric_limits<qlonglong>::max()) + 1);
+ QTest::newRow("C: qulonglong-max")
+ << u"18446744073709551615"_s << u"C"_s << true
+ << std::numeric_limits<qulonglong>::max();
+}
+
+void tst_QLocale::toULongLong()
+{
+ QFETCH(QString, text);
+ QFETCH(QString, locale);
+ QFETCH(bool, good);
+ QFETCH(qulonglong, expected);
+
+ const QLocale loc(locale);
+ qulonglong actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = loc.toULongLong(text, &ok);
+ }
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
+
+void tst_QLocale::toDouble_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<QString>("locale");
+ QTest::addColumn<bool>("good");
+ QTest::addColumn<double>("expected");
+
+ QTest::newRow("C: empty") << u""_s << u"C"_s << false << 0.0;
+ QTest::newRow("C: 0") << u"0"_s << u"C"_s << true << 0.0;
+ QTest::newRow("C: 0.12340") << u"0.12340"_s << u"C"_s << true << 0.12340;
+ QTest::newRow("C: -0.12340") << u"-0.12340"_s << u"C"_s << true << -0.12340;
+ QTest::newRow("C: &minus;0.12340") << u"\u2212" "0.12340"_s << u"C"_s << true << -0.12340;
+ QTest::newRow("C: 1.0e-4") << u"1.0e-4"_s << u"C"_s << true << 1.0e-4;
+ QTest::newRow("C: 1.0e&minus;4") << u"1.0e\u2212" "4"_s << u"C"_s << true << 1.0e-4;
+ QTest::newRow("C: 1.0e+4") << u"1.0e+4"_s << u"C"_s << true << 1.0e+4;
+ QTest::newRow("C: 10.e+3") << u"10.e+3"_s << u"C"_s << true << 1.0e+4;
+ QTest::newRow("C: 10e+3.") << u"10e+3."_s << u"C"_s << false << 0.0; // exp...dot
+ QTest::newRow("C: 1e4") << u"1e4"_s << u"C"_s << true << 1.0e+4;
+
+ // NaN and infinity:
+ QTest::newRow("C: nan") << u"nan"_s << u"C"_s << true << qQNaN();
+ QTest::newRow("C: NaN") << u"NaN"_s << u"C"_s << true << qQNaN();
+ QTest::newRow("C: -nan") << u"-nan"_s << u"C"_s << false << 0.0;
+ QTest::newRow("C: +nan") << u"+nan"_s << u"C"_s << false << 0.0;
+ QTest::newRow("C: inf") << u"inf"_s << u"C"_s << true << qInf();
+ QTest::newRow("C: Inf") << u"Inf"_s << u"C"_s << true << qInf();
+ QTest::newRow("C: +inf") << u"+inf"_s << u"C"_s << true << qInf();
+ QTest::newRow("C: -inf") << u"-inf"_s << u"C"_s << true << -qInf();
+
+ // Wantonly long-form representations, with trailing and leading zeros:
+ QTest::newRow("C: 1e-64 long-form")
+ << (u"0."_s + QString(63, u'0') + u'1' + QString(962, u'0')) << u"C"_s << true << 1e-64;
+ QTest::newRow("C: 1e+64 long-form")
+ << (QString(961, u'0') + u'1' + QString(64, u'0') + u".0"_s) << u"C"_s << true << 1e+64;
+ QTest::newRow("C: long-form 1 via e+64")
+ << (u"0."_s + QString(63, u'0') + u'1' + QString(962, u'0') + u"e+64"_s)
+ << u"C"_s << true << 1.0;
+ QTest::newRow("C: long-form 1 via e-64")
+ << (QString(961, u'0') + u'1' + QString(64, u'0') + u".0e-64"_s)
+ << u"C"_s << true << 1.0;
+ QTest::newRow("C: 12345678.9") << u"12345678.9"_s << u"C"_s << true << 12345678.9;
+
+ // With and without grouping, en vs de for flipped separators:
+ QTest::newRow("en: 12345678.9") << u"12345678.9"_s << u"en"_s << true << 12345678.9;
+ QTest::newRow("en: 12,345,678.9") << u"12,345,678.9"_s << u"en"_s << true << 12'345'678.9;
+ QTest::newRow("de: 12345678,9") << u"12345678,9"_s << u"de"_s << true << 12345678.9;
+ QTest::newRow("de: 12.345.678,9") << u"12.345.678,9"_s << u"de"_s << true << 12'345'678.9;
+
+ // NaN and infinity are locale-independent (for now - QTBUG-95460)
+ QTest::newRow("cy: nan") << u"nan"_s << u"cy"_s << true << qQNaN();
+ QTest::newRow("cy: NaN") << u"NaN"_s << u"cy"_s << true << qQNaN();
+ QTest::newRow("cy: -nan") << u"-nan"_s << u"cy"_s << false << 0.0;
+ QTest::newRow("cy: +nan") << u"+nan"_s << u"cy"_s << false << 0.0;
+ QTest::newRow("cy: inf") << u"inf"_s << u"cy"_s << true << qInf();
+ QTest::newRow("cy: Inf") << u"Inf"_s << u"cy"_s << true << qInf();
+ QTest::newRow("cy: +inf") << u"+inf"_s << u"cy"_s << true << qInf();
+ QTest::newRow("cy: -inf") << u"-inf"_s << u"cy"_s << true << -qInf();
+ // Samples ready for QTBUG-95460:
+ QTest::newRow("en: &infin;") << u"\u221e"_s << u"en"_s << true << qInf();
+ QTest::newRow("ga: Nuimh") << u"Nuimh"_s << u"ga"_s << true << qQNaN();
+
+ // Locales with multi-character exponents:
+ QTest::newRow("sv_SE: 4e-3") // Swedish, Sweden
+ << u"4\u00d7" "10^\u2212" "03"_s << u"sv_SE"_s << true << 4e-3;
+ QTest::newRow("sv_SE: 4x-3") // Only first character of exponent
+ << u"4\u00d7\u2212" "03"_s << u"sv_SE"_s << false << 0.0;
+ QTest::newRow("se_NO: 4e-3") // Northern Sami, Norway
+ << u"4\u00b7" "10^\u2212" "03"_s << u"se_NO"_s << true << 4e-3;
+ QTest::newRow("se_NO: 4x-3") // Only first character of exponent
+ << u"4\u00b7\u2212" "03"_s << u"se_NO"_s << false << 0.0;
+ QTest::newRow("ar_EG: 4e-3") // Arabic, Egypt
+ << u"\u0664\u0627\u0633\u061c-\u0660\u0663"_s << u"ar_EG"_s << true << 4e-3;
+ QTest::newRow("ar_EG: 4x-3") // Only first character of exponent
+ << u"\u0664\u0627\u061c-\u0660\u0663"_s << u"ar_EG"_s << false << 0.0;
+ QTest::newRow("ar_EG: 4e!3") // Only first character of sign
+ << u"\u0664\u0627\u0633\u061c\u0660\u0663"_s << u"ar_EG"_s << false << 0.0;
+ QTest::newRow("ar_EG: 4x!3") // Only first character of sign and exponent
+ << u"\u0664\u0627\u061c\u0660\u0663"_s << u"ar_EG"_s << false << 0.0;
+}
+
+void tst_QLocale::toDouble()
+{
+ QFETCH(QString, text);
+ QFETCH(QString, locale);
+ QFETCH(bool, good);
+ QFETCH(double, expected);
+
+ const QLocale loc(locale);
+ double actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = loc.toDouble(text, &ok);
+ }
+ QEXPECT_FAIL("en: &infin;", "Localized infinity support missing: QTBUG-95460", Abort);
+ QEXPECT_FAIL("ga: Nuimh", "Localized NaN support missing: QTBUG-95460", Abort);
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
+QTEST_MAIN(tst_QLocale)
+
+#include "tst_bench_qlocale.moc"