diff options
author | Marc Mutz <marc.mutz@qt.io> | 2022-01-09 10:07:34 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2022-01-12 16:14:18 +0100 |
commit | 6891e10f9717a51b72583bf18e5a1a8d5f5fd527 (patch) | |
tree | 7f6b2f6c896b8d70d0bc58b894539dda40f2f1fe /tests/auto/corelib/tools | |
parent | 9f32fc97aa42da098ab08fc0371a78004080a00a (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.cpp | 66 |
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 |