Fix QMultiHash::keys(const T&) overload
The method was never tested, but it failed to compile after QMultiHash was introduced as a separate class in 6.0. This patch fixes it and adds some unit-tests to cover the case. Task-number: QTBUG-91736 Pick-to: 6.2 6.1 Change-Id: I5dd989d4775efc6a9bb13c5ed1d892e499d95dc2 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
parent
15592ec4f7
commit
a8bcf68a5e
@ -1458,7 +1458,7 @@ public:
|
||||
QList<Key> res;
|
||||
const_iterator i = begin();
|
||||
while (i != end()) {
|
||||
if (i.value()->contains(value))
|
||||
if (i.value() == value)
|
||||
res.append(i.key());
|
||||
++i;
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ private slots:
|
||||
void erase();
|
||||
void erase_edge_case();
|
||||
void key();
|
||||
void keys();
|
||||
|
||||
void swap();
|
||||
void count(); // copied from tst_QMap
|
||||
@ -620,6 +621,62 @@ void tst_QHash::key()
|
||||
QCOMPARE(hash2.key("zero"), 0);
|
||||
QCOMPARE(hash2.key("zero", def), 0);
|
||||
}
|
||||
|
||||
{
|
||||
const int def = -1;
|
||||
QMultiHash<int, QString> hash;
|
||||
QCOMPARE(hash.key("val"), 0);
|
||||
QCOMPARE(hash.key("val", def), def);
|
||||
QVERIFY(!hash.isDetached());
|
||||
|
||||
hash.insert(1, "value1");
|
||||
hash.insert(1, "value2");
|
||||
hash.insert(2, "value1");
|
||||
|
||||
QCOMPARE(hash.key("value2"), 1);
|
||||
const auto key = hash.key("value1");
|
||||
QVERIFY(key == 1 || key == 2);
|
||||
QCOMPARE(hash.key("value"), 0);
|
||||
QCOMPARE(hash.key("value", def), def);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
QList<T> sorted(const QList<T> &list)
|
||||
{
|
||||
QList<T> res = list;
|
||||
std::sort(res.begin(), res.end());
|
||||
return res;
|
||||
}
|
||||
|
||||
void tst_QHash::keys()
|
||||
{
|
||||
{
|
||||
QHash<QString, int> hash;
|
||||
QVERIFY(hash.keys().isEmpty());
|
||||
QVERIFY(hash.keys(1).isEmpty());
|
||||
QVERIFY(!hash.isDetached());
|
||||
|
||||
hash.insert("key1", 1);
|
||||
hash.insert("key2", 2);
|
||||
hash.insert("key3", 1);
|
||||
|
||||
QCOMPARE(sorted(hash.keys()), QStringList({ "key1", "key2", "key3" }));
|
||||
QCOMPARE(sorted(hash.keys(1)), QStringList({ "key1", "key3" }));
|
||||
}
|
||||
{
|
||||
QMultiHash<QString, int> hash;
|
||||
QVERIFY(hash.keys().isEmpty());
|
||||
QVERIFY(hash.keys(1).isEmpty());
|
||||
QVERIFY(!hash.isDetached());
|
||||
|
||||
hash.insert("key1", 1);
|
||||
hash.insert("key2", 1);
|
||||
hash.insert("key1", 2);
|
||||
|
||||
QCOMPARE(sorted(hash.keys()), QStringList({ "key1", "key1", "key2" }));
|
||||
QCOMPARE(sorted(hash.keys(1)), QStringList({ "key1", "key2" }));
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QHash::swap()
|
||||
@ -1484,14 +1541,6 @@ void tst_QHash::qmultihash_qhash_rvalue_ref_unite()
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
QList<T> sorted(const QList<T> &list)
|
||||
{
|
||||
QList<T> res = list;
|
||||
std::sort(res.begin(), res.end());
|
||||
return res;
|
||||
}
|
||||
|
||||
void tst_QHash::keys_values_uniqueKeys()
|
||||
{
|
||||
QMultiHash<QString, int> hash;
|
||||
|
Loading…
Reference in New Issue
Block a user