summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2022-01-09 10:07:34 +0100
committerMarc Mutz <marc.mutz@qt.io>2022-01-12 16:14:18 +0100
commit6891e10f9717a51b72583bf18e5a1a8d5f5fd527 (patch)
tree7f6b2f6c896b8d70d0bc58b894539dda40f2f1fe /tests/auto/corelib/tools
parent9f32fc97aa42da098ab08fc0371a78004080a00a (diff)
QFlatMap: add insert_or_assign
This does exactly what insert() on Qt associative containers does, but allows to express the intent of using the STL-incompatible Qt insert() semantics, in an STL-compatible way, instead of leaving the reader of the code wondering what semantics are expected. This is part of a very-long-term goal of fixing Qt associative container's insert() behavior, in which QFlatMap, being an affected, but private-API type, is used for proof-of-concept purposes. Task-number: QTBUG-99651 Pick-to: 6.3 6.2 Change-Id: I69010285438259918aef659d3235180c1b5be696 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'tests/auto/corelib/tools')
-rw-r--r--tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp66
1 files changed, 64 insertions, 2 deletions
diff --git a/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp b/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
index 1ba060cc91..1de1c3ad71 100644
--- a/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
+++ b/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
@@ -53,7 +53,7 @@ private slots:
void iterators();
void statefulComparator();
void transparency();
- void try_emplace();
+ void try_emplace_and_insert_or_assign();
void viewIterators();
void varLengthArray();
};
@@ -428,7 +428,7 @@ void tst_QFlatMap::transparency()
QCOMPARE(m.lower_bound(sv3).value(), "dree");
}
-void tst_QFlatMap::try_emplace()
+void tst_QFlatMap::try_emplace_and_insert_or_assign()
{
using Map = QFlatMap<QByteArray, QByteArray>;
@@ -457,12 +457,32 @@ void tst_QFlatMap::try_emplace()
Map m;
QVERIFY(m.try_emplace(lvalue(foo), lvalue(qqq)).second);
CHECKS();
+ QVERIFY(!m.insert_or_assign(lvalue(foo), lvalue(foo)).second);
+ QCOMPARE(m.value(foo), foo);
+ }
+
+ {
+ Map m;
+ QVERIFY(m.insert_or_assign(lvalue(foo), lvalue(qqq)).second);
+ CHECKS();
+ QVERIFY(!m.try_emplace(lvalue(foo), lvalue(foo)).second);
+ QCOMPARE(m.value(foo), qqq);
}
{
Map m;
QVERIFY(m.try_emplace(lvalue(foo), rvalue(qqq)).second);
CHECKS();
+ QVERIFY(!m.insert_or_assign(lvalue(foo), rvalue(foo)).second);
+ QCOMPARE(m.value(foo), foo);
+ }
+
+ {
+ Map m;
+ QVERIFY(m.insert_or_assign(lvalue(foo), rvalue(qqq)).second);
+ CHECKS();
+ QVERIFY(!m.try_emplace(lvalue(foo), rvalue(foo)).second);
+ QCOMPARE(m.value(foo), qqq);
}
{
@@ -477,18 +497,49 @@ void tst_QFlatMap::try_emplace()
QVERIFY(m.try_emplace(lvalue(foo), sb(qqq)).second);
QCOMPARE(m.value(foo), qqq);
CHECKS();
+ QVERIFY(!m.insert_or_assign(lvalue(foo), sb(foo)).second);
+ QCOMPARE(m.value(foo), foo);
+ }
+
+ {
+ Map m;
+ QVERIFY(m.insert_or_assign(lvalue(foo), sb(qqq)).second);
+ QCOMPARE(m.value(foo), qqq);
+ CHECKS();
+ QVERIFY(!m.try_emplace(lvalue(foo), sb(foo)).second);
+ QCOMPARE(m.value(foo), qqq);
}
{
Map m;
QVERIFY(m.try_emplace(rvalue(foo), lvalue(qqq)).second);
CHECKS();
+ QVERIFY(!m.insert_or_assign(rvalue(foo), lvalue(foo)).second);
+ QCOMPARE(m.value(foo), foo);
+ }
+
+ {
+ Map m;
+ QVERIFY(m.insert_or_assign(rvalue(foo), lvalue(qqq)).second);
+ CHECKS();
+ QVERIFY(!m.try_emplace(rvalue(foo), lvalue(foo)).second);
+ QCOMPARE(m.value(foo), qqq);
}
{
Map m;
QVERIFY(m.try_emplace(rvalue(foo), rvalue(qqq)).second);
CHECKS();
+ QVERIFY(!m.insert_or_assign(rvalue(foo), rvalue(foo)).second);
+ QCOMPARE(m.value(foo), foo);
+ }
+
+ {
+ Map m;
+ QVERIFY(m.insert_or_assign(rvalue(foo), rvalue(qqq)).second);
+ CHECKS();
+ QVERIFY(!m.try_emplace(rvalue(foo), rvalue(foo)).second);
+ QCOMPARE(m.value(foo), qqq);
}
{
@@ -503,6 +554,17 @@ void tst_QFlatMap::try_emplace()
QVERIFY(m.try_emplace(rvalue(foo), sb(qqq)).second);
QCOMPARE(m.value(foo), qqq);
CHECKS();
+ QVERIFY(!m.insert_or_assign(rvalue(foo), sb(foo)).second);
+ QCOMPARE(m.value(foo), foo);
+ }
+
+ {
+ Map m;
+ QVERIFY(m.insert_or_assign(rvalue(foo), sb(qqq)).second);
+ QCOMPARE(m.value(foo), qqq);
+ CHECKS();
+ QVERIFY(!m.try_emplace(rvalue(foo), sb(foo)).second);
+ QCOMPARE(m.value(foo), qqq);
}
#undef CHECKS
#undef lvalue