From f0533ba8c22d6366f9d4fb8e8ce18554cd0d01e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Martsum?= Date: Tue, 15 Jan 2013 16:09:44 +0100 Subject: QMap - add multiInsert with hint This provides a fast multiInsert in QMap (and a fast insert in QMultiMap) when providing a correct hint. Change-Id: I3c864c3a7842765fe63f8ecb4b54d0e8c9fd22d7 Reviewed-by: Thiago Macieira --- tests/auto/corelib/tools/qmap/tst_qmap.cpp | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'tests/auto/corelib/tools/qmap/tst_qmap.cpp') diff --git a/tests/auto/corelib/tools/qmap/tst_qmap.cpp b/tests/auto/corelib/tools/qmap/tst_qmap.cpp index 66063d0262..0742f19a5e 100644 --- a/tests/auto/corelib/tools/qmap/tst_qmap.cpp +++ b/tests/auto/corelib/tools/qmap/tst_qmap.cpp @@ -86,6 +86,7 @@ private slots: void checkMostLeftNode(); void initializerList(); void testInsertWithHint(); + void testInsertMultiWithHint(); }; typedef QMap StringMap; @@ -939,6 +940,18 @@ void tst_QMap::qmultimap_specific() QVERIFY(map2.remove(42,5)); QVERIFY(map1 == map2); } + + map1.insert(map1.constBegin(), -1, -1); + QCOMPARE(map1.size(), 45); + map1.insert(map1.constBegin(), -1, -1); + QCOMPARE(map1.size(), 46); + map1.insert(map1.constBegin(), -2, -2); + QCOMPARE(map1.size(), 47); + map1.insert(map1.constBegin(), 5, 5); // Invald hint + QCOMPARE(map1.size(), 48); + map1.insert(map1.constBegin(), 5, 5); // Invald hint + QCOMPARE(map1.size(), 49); + sanityCheckTree(map1, __LINE__); } void tst_QMap::const_shared_null() @@ -1224,5 +1237,58 @@ void tst_QMap::testInsertWithHint() QCOMPARE(map.size(), 12); } +void tst_QMap::testInsertMultiWithHint() +{ + QMap map; + map.setSharable(false); + + typedef QMap::const_iterator cite; // Hack since we define QT_STRICT_ITERATORS + map.insertMulti(cite(map.end()), 64, 65); + map[128] = 129; + map[256] = 257; + sanityCheckTree(map, __LINE__); + + map.insertMulti(cite(map.end()), 512, 513); + map.insertMulti(cite(map.end()), 512, 513 * 2); + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 5); + map.insertMulti(cite(map.end()), 256, 258); // wrong hint + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 6); + + QMap::iterator i = map.insertMulti(map.constBegin(), 256, 259); // wrong hint + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 7); + + QMap::iterator j = map.insertMulti(map.constBegin(), 69, 66); + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 8); + + j = map.insertMulti(cite(j), 68, 259); + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 9); + + j = map.insertMulti(cite(j), 67, 67); + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 10); + + i = map.insertMulti(cite(i), 256, 259); + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 11); + + i = map.insertMulti(cite(i), 256, 260); + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 12); + + map.insertMulti(cite(i), 64, 67); + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 13); + + map.insertMulti(map.constBegin(), 20, 20); + sanityCheckTree(map, __LINE__); + QCOMPARE(map.size(), 14); +} + + QTEST_APPLESS_MAIN(tst_QMap) #include "tst_qmap.moc" -- cgit v1.2.3