summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorRobin Burchell <robin+qt@viroteck.net>2012-02-28 20:56:14 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-29 22:39:00 +0100
commit1f4804452c05c57308979bf090305c7c882f92c9 (patch)
tree9b95efd8dee3081008e22867b753f2ebc0d64507 /tests
parent57004b7fda861e1e59a00688a859f30d9a088b4e (diff)
Copy Qt 4's QString hash algorithm.
We must do this the same way we do all other hash algorithms for fair comparison, as otherwise, the call to the PLT unfairly penalises QHash<QString>'s results, as it's in a different shared object. Change-Id: I69c891f5a97dcccdfcfbdbf32796f86242a42963 Reviewed-by: João Abecasis <joao.abecasis@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/benchmarks/corelib/tools/qhash/main.cpp7
-rw-r--r--tests/benchmarks/corelib/tools/qhash/main.h11
-rw-r--r--tests/benchmarks/corelib/tools/qhash/outofline.cpp18
3 files changed, 32 insertions, 4 deletions
diff --git a/tests/benchmarks/corelib/tools/qhash/main.cpp b/tests/benchmarks/corelib/tools/qhash/main.cpp
index 7a871b455c..62384fbaa7 100644
--- a/tests/benchmarks/corelib/tools/qhash/main.cpp
+++ b/tests/benchmarks/corelib/tools/qhash/main.cpp
@@ -138,8 +138,11 @@ void tst_QHash::data()
void tst_QHash::qhash_qt4()
{
QFETCH(QStringList, items);
- QStringList realitems = items; // for copy/paste ease between benchmarks
- QHash<QString, int> hash;
+ QHash<Qt4String, int> hash;
+
+ QList<Qt4String> realitems;
+ foreach (const QString &s, items)
+ realitems.append(s);
QBENCHMARK {
for (int i = 0, n = realitems.size(); i != n; ++i) {
diff --git a/tests/benchmarks/corelib/tools/qhash/main.h b/tests/benchmarks/corelib/tools/qhash/main.h
index c4cf94e190..3d193b5e40 100644
--- a/tests/benchmarks/corelib/tools/qhash/main.h
+++ b/tests/benchmarks/corelib/tools/qhash/main.h
@@ -41,6 +41,17 @@
#include <QString>
+struct Qt4String : QString
+{
+ Qt4String() {}
+ Qt4String(const QString &s) : QString(s) {}
+};
+
+QT_BEGIN_NAMESPACE
+uint qHash(const Qt4String &);
+QT_END_NAMESPACE
+
+
struct String : QString
{
String() {}
diff --git a/tests/benchmarks/corelib/tools/qhash/outofline.cpp b/tests/benchmarks/corelib/tools/qhash/outofline.cpp
index 162c604a35..8adaa0a04f 100644
--- a/tests/benchmarks/corelib/tools/qhash/outofline.cpp
+++ b/tests/benchmarks/corelib/tools/qhash/outofline.cpp
@@ -41,6 +41,22 @@
#include "main.h"
+QT_BEGIN_NAMESPACE
+
+uint qHash(const Qt4String &str)
+{
+ int n = str.length();
+ const QChar *p = str.unicode();
+ uint h = 0;
+
+ while (n--) {
+ h = (h << 4) + (*p++).unicode();
+ h ^= (h & 0xf0000000) >> 23;
+ h &= 0x0fffffff;
+ }
+ return h;
+}
+
static void doHash(const unsigned short *p, uint &h)
{
#if 1
@@ -67,8 +83,6 @@ static void doHash(const unsigned short *p, uint &h)
#endif
}
-QT_BEGIN_NAMESPACE
-
uint qHash(const String &str)
{
const unsigned short *p = (unsigned short *)str.constData();