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;
|
QList<Key> res;
|
||||||
const_iterator i = begin();
|
const_iterator i = begin();
|
||||||
while (i != end()) {
|
while (i != end()) {
|
||||||
if (i.value()->contains(value))
|
if (i.value() == value)
|
||||||
res.append(i.key());
|
res.append(i.key());
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ private slots:
|
|||||||
void erase();
|
void erase();
|
||||||
void erase_edge_case();
|
void erase_edge_case();
|
||||||
void key();
|
void key();
|
||||||
|
void keys();
|
||||||
|
|
||||||
void swap();
|
void swap();
|
||||||
void count(); // copied from tst_QMap
|
void count(); // copied from tst_QMap
|
||||||
@ -620,6 +621,62 @@ void tst_QHash::key()
|
|||||||
QCOMPARE(hash2.key("zero"), 0);
|
QCOMPARE(hash2.key("zero"), 0);
|
||||||
QCOMPARE(hash2.key("zero", def), 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()
|
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()
|
void tst_QHash::keys_values_uniqueKeys()
|
||||||
{
|
{
|
||||||
QMultiHash<QString, int> hash;
|
QMultiHash<QString, int> hash;
|
||||||
|
Loading…
Reference in New Issue
Block a user