summaryrefslogtreecommitdiffstats
path: root/benchmark/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/main.cpp')
-rw-r--r--benchmark/main.cpp157
1 files changed, 157 insertions, 0 deletions
diff --git a/benchmark/main.cpp b/benchmark/main.cpp
new file mode 100644
index 0000000..3a05abb
--- /dev/null
+++ b/benchmark/main.cpp
@@ -0,0 +1,157 @@
+/** This file is part of QtCollator **
+
+Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).*
+
+Contact: Nokia Corporation (info@qt.nokia.com)**
+
+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.
+
+*/
+
+#include <QtCore>
+#include <QtTest>
+
+#include "qtcollator.h"
+
+class tst_QtCollator: public QObject
+{
+ Q_OBJECT
+
+private:
+ QStringList chileanData, chileanWords;
+ QStringList castellanoData, castellanoWords;
+
+ QStringList allData, allWords;
+
+ QStringList read(const QString &filename);
+ QStringList splitWords(const QStringList &list);
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+ void localeAwareCompare_data();
+ void localeAwareCompare();
+
+ void normal_data();
+ void normal();
+};
+
+QStringList tst_QtCollator::splitWords(const QStringList &list)
+{
+ QStringList result;
+ foreach (const QString &s, list)
+ result << s.split(" ");
+ return result;
+}
+
+QStringList tst_QtCollator::read(const QString &filename)
+{
+ QFile file(filename);
+ if (!file.open(QFile::ReadOnly))
+ return QStringList();
+
+ QByteArray data = file.readAll();
+ return QString::fromUtf8(data.constData(), data.size()).split("\n");
+}
+
+void tst_QtCollator::initTestCase()
+{
+ chileanData = read("chilean.txt");
+ chileanWords = splitWords(chileanData);
+ castellanoData = read("castellano.txt");
+ castellanoWords = splitWords(castellanoData);
+
+ allData << chileanData << castellanoData;
+ allWords << chileanWords << castellanoWords;
+}
+
+void tst_QtCollator::cleanupTestCase()
+{
+
+}
+
+void tst_QtCollator::localeAwareCompare_data()
+{
+ normal_data();
+}
+
+void tst_QtCollator::normal_data()
+{
+ QTest::addColumn<QString>("locale");
+ QTest::addColumn<QStringList>("data");
+
+ QTest::newRow("pt-PT:chilean:data") << "pt-PT" << chileanData;
+ QTest::newRow("pt-PT:chilean:words") << "pt-PT" << chileanWords;
+ QTest::newRow("pt-PT:castellano:data") << "pt-PT" << castellanoData;
+ QTest::newRow("pt-PT:castellano:words") << "pt-PT" << castellanoWords;
+
+ QTest::newRow("pt-PT:all:data") << "pt-PT" << allData;
+ QTest::newRow("pt-PT:all:words") << "pt-PT" << allWords;
+
+ QTest::newRow("zh-CN:all:data") << "zh-CN" << allData;
+ QTest::newRow("zh-CN:all:words") << "zh-CN" << allWords;
+
+ QTest::newRow("fr-FR:all:data") << "fr-FR" << allData;
+ QTest::newRow("fr-FR:all:words") << "fr-FR" << allWords;
+
+ QTest::newRow("fr-CA:all:data") << "fr-CA" << allData;
+ QTest::newRow("fr-Ca:all:words") << "fr-CA" << allWords;
+}
+
+void tst_QtCollator::normal()
+{
+ QFETCH(QString, locale);
+ QFETCH(QStringList, data);
+
+ QtCollator collator(locale);
+
+ QBENCHMARK {
+ qSort(data.begin(), data.end(), collator);
+ }
+}
+
+struct Comparator
+{
+ inline bool operator()(const QString &s1, const QString &s2) const
+ { return s1.localeAwareCompare(s2) < 0; }
+};
+
+void tst_QtCollator::localeAwareCompare()
+{
+ QFETCH(QString, locale);
+ QFETCH(QStringList, data);
+
+ Comparator c;
+
+ QBENCHMARK {
+ qSort(data.begin(), data.end(), c);
+ }
+}
+
+
+QTEST_MAIN(tst_QtCollator)
+
+#include "main.moc"