diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/benchmarks/corelib/tools/qhash/main.cpp | 42 | ||||
-rw-r--r-- | tests/benchmarks/corelib/tools/qhash/main.h | 10 | ||||
-rw-r--r-- | tests/benchmarks/corelib/tools/qhash/outofline.cpp | 10 |
3 files changed, 48 insertions, 14 deletions
diff --git a/tests/benchmarks/corelib/tools/qhash/main.cpp b/tests/benchmarks/corelib/tools/qhash/main.cpp index a39ced19fe..b173724aed 100644 --- a/tests/benchmarks/corelib/tools/qhash/main.cpp +++ b/tests/benchmarks/corelib/tools/qhash/main.cpp @@ -55,13 +55,28 @@ class tst_QHash : public QObject private slots: void initTestCase(); + void qhash_current_data() { data(); } + void qhash_current() { qhash_template<QString>(); } + void qhash_qt50_data() { data(); } + void qhash_qt50() { qhash_template<Qt50String>(); } void qhash_qt4_data() { data(); } - void qhash_qt4(); - void javaString_data() { data(); } - void javaString(); + void qhash_qt4() { qhash_template<Qt4String>(); } + void qhash_javaString_data() { data(); } + void qhash_javaString() { qhash_template<JavaString>(); } + + void hashing_current_data() { data(); } + void hashing_current() { hashing_template<QString>(); } + void hashing_qt50_data() { data(); } + void hashing_qt50() { hashing_template<Qt50String>(); } + void hashing_qt4_data() { data(); } + void hashing_qt4() { hashing_template<Qt4String>(); } + void hashing_javaString_data() { data(); } + void hashing_javaString() { hashing_template<JavaString>(); } private: void data(); + template <typename String> void qhash_template(); + template <typename String> void hashing_template(); QStringList smallFilePaths; QStringList uuids; @@ -76,7 +91,7 @@ private: void tst_QHash::initTestCase() { // small list of file paths - QFile smallPathsData("paths_small_data.txt"); + QFile smallPathsData(QFINDTESTDATA("paths_small_data.txt")); QVERIFY(smallPathsData.open(QIODevice::ReadOnly)); smallFilePaths = QString::fromLatin1(smallPathsData.readAll()).split(QLatin1Char('\n')); QVERIFY(!smallFilePaths.isEmpty()); @@ -133,12 +148,12 @@ void tst_QHash::data() QTest::newRow("numbers") << numbers; } -void tst_QHash::qhash_qt4() +template <typename String> void tst_QHash::qhash_template() { QFETCH(QStringList, items); - QHash<Qt4String, int> hash; + QHash<String, int> hash; - QList<Qt4String> realitems; + QList<String> realitems; foreach (const QString &s, items) realitems.append(s); @@ -149,23 +164,22 @@ void tst_QHash::qhash_qt4() } } -void tst_QHash::javaString() +template <typename String> void tst_QHash::hashing_template() { + // just the hashing function QFETCH(QStringList, items); - QHash<JavaString, int> hash; - QList<JavaString> realitems; + QVector<String> realitems; + realitems.reserve(items.size()); foreach (const QString &s, items) realitems.append(s); QBENCHMARK { - for (int i = 0, n = realitems.size(); i != n; ++i) { - hash[realitems.at(i)] = i; - } + for (int i = 0, n = realitems.size(); i != n; ++i) + (void)qHash(realitems.at(i)); } } - QTEST_MAIN(tst_QHash) #include "main.moc" diff --git a/tests/benchmarks/corelib/tools/qhash/main.h b/tests/benchmarks/corelib/tools/qhash/main.h index bd3f0db12d..86a1a3d09b 100644 --- a/tests/benchmarks/corelib/tools/qhash/main.h +++ b/tests/benchmarks/corelib/tools/qhash/main.h @@ -51,6 +51,16 @@ QT_BEGIN_NAMESPACE uint qHash(const Qt4String &); QT_END_NAMESPACE +struct Qt50String : QString +{ + Qt50String() {} + Qt50String(const QString &s) : QString(s) {} +}; + +QT_BEGIN_NAMESPACE +uint qHash(const Qt50String &, uint seed = 0); +QT_END_NAMESPACE + struct JavaString : QString { diff --git a/tests/benchmarks/corelib/tools/qhash/outofline.cpp b/tests/benchmarks/corelib/tools/qhash/outofline.cpp index 9ccfc11224..3a2278503d 100644 --- a/tests/benchmarks/corelib/tools/qhash/outofline.cpp +++ b/tests/benchmarks/corelib/tools/qhash/outofline.cpp @@ -57,6 +57,16 @@ uint qHash(const Qt4String &str) return h; } +uint qHash(const Qt50String &key, uint seed) +{ + const QChar *p = key.unicode(); + int len = key.size(); + uint h = seed; + for (int i = 0; i < len; ++i) + h = 31 * h + p[i].unicode(); + return h; +} + // The Java's hashing algorithm for strings is a variation of D. J. Bernstein // hashing algorithm appeared here http://cr.yp.to/cdb/cdb.txt // and informally known as DJB33XX - DJB's 33 Times Xor. |