diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-09-03 13:41:39 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-09-12 09:12:26 +0200 |
commit | ef93fdeb098f78a0afe1df72c53ba26bf7a11c60 (patch) | |
tree | 4862c44b7013f5965ba6c888d1059d24dfb5d87a /tests/auto | |
parent | 73fe229eb434236402ec1685b1f17f96417001b9 (diff) |
Provide methods for adding values to a sequential iterable
Provide functionality to add and remove values, so that you can use a
sequential iterable as stack or queue if the underlying container
supports this. To this end, provide a way to specify whether the
value should be added or removed at the beginning or the end of the
iterable.
Change-Id: If63d302f3ca085e56d601116ce4dfaa6b94a0c4f
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp | 8 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 23 |
2 files changed, 22 insertions, 9 deletions
diff --git a/tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp b/tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp index 69f8cf0169..c4892de2cc 100644 --- a/tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp +++ b/tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp @@ -215,7 +215,7 @@ void tst_QMetaContainer::testSequence_data() QTest::addColumn<bool>("hasRandomAccessIterator"); QTest::addColumn<bool>("canInsertAtIterator"); QTest::addColumn<bool>("canEraseAtIterator"); - QTest::addColumn<bool>("isOrdered"); + QTest::addColumn<bool>("isSortable"); QTest::addRow("QVector") << static_cast<void *>(&qvector) @@ -256,7 +256,7 @@ void tst_QMetaContainer::testSequence() QFETCH(bool, hasRandomAccessIterator); QFETCH(bool, canInsertAtIterator); QFETCH(bool, canEraseAtIterator); - QFETCH(bool, isOrdered); + QFETCH(bool, isSortable); QVERIFY(metaSequence.canAddValue()); QCOMPARE(metaSequence.hasSize(), hasSize); @@ -267,7 +267,7 @@ void tst_QMetaContainer::testSequence() QCOMPARE(metaSequence.hasRandomAccessIterator(), hasRandomAccessIterator); QCOMPARE(metaSequence.canInsertValueAtIterator(), canInsertAtIterator); QCOMPARE(metaSequence.canEraseValueAtIterator(), canEraseAtIterator); - QCOMPARE(metaSequence.isOrdered(), isOrdered); + QCOMPARE(metaSequence.isSortable(), isSortable); QVariant var1(metaType); QVariant var2(metaType); @@ -434,7 +434,7 @@ void tst_QMetaContainer::testSequence() const qsizetype newSize = metaSequence.diffIterator(end, it); - if (metaSequence.isOrdered()) { + if (metaSequence.isSortable()) { QCOMPARE(newSize, size + 3); QVariant var4(metaType); metaSequence.valueAtIterator(it, var4.data()); diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index d606f449cf..b0e622e440 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -4539,7 +4539,8 @@ void tst_QVariant::shouldDeleteVariantDataWorksForSequential() [](const void *, QtMetaContainerPrivate::QMetaSequenceInterface::Position) -> void* { return nullptr; }; - metaSequence.addValueFn = [](void *, const void *) {}; + metaSequence.addValueFn = [](void *, const void *, + QtMetaContainerPrivate::QMetaSequenceInterface::Position) {}; metaSequence.advanceConstIteratorFn = [](void *, qsizetype) {}; metaSequence.destroyConstIteratorFn = [](const void *){}; metaSequence.compareConstIteratorFn = [](const void *, const void *) { @@ -4697,10 +4698,19 @@ void tst_QVariant::sequentialIterableAppend() QVERIFY(variant.canConvert<QSequentialIterable>()); auto asIterable = variant.value<QSequentialIterable>(); const int i = 3, j = 4; - void *mutableIterable = const_cast<void *>(asIterable.constIterable()); - asIterable.metaSequence().addValue(mutableIterable, &i); - asIterable.metaSequence().addValue(mutableIterable, &j); + void *mutableIterable = asIterable.mutableIterable(); + asIterable.metaSequence().addValueAtEnd(mutableIterable, &i); + asIterable.metaSequence().addValueAtEnd(mutableIterable, &j); QCOMPARE(variant.value<QList<int>>(), QList<int> ({ 1, 2, 3, 4 })); + + asIterable.metaSequence().addValueAtBegin(mutableIterable, &i); + asIterable.metaSequence().addValueAtBegin(mutableIterable, &j); + QCOMPARE(variant.value<QList<int>>(), QList<int> ({ 4, 3, 1, 2, 3, 4 })); + + asIterable.metaSequence().removeValueAtBegin(mutableIterable); + QCOMPARE(variant.value<QList<int>>(), QList<int> ({ 3, 1, 2, 3, 4 })); + asIterable.metaSequence().removeValueAtEnd(mutableIterable); + QCOMPARE(variant.value<QList<int>>(), QList<int> ({ 3, 1, 2, 3 })); } { QSet<QByteArray> container { QByteArray{"hello"}, QByteArray{"world"} }; @@ -4709,11 +4719,14 @@ void tst_QVariant::sequentialIterableAppend() auto asIterable = variant.value<QSequentialIterable>(); QByteArray qba1 {"goodbye"}; QByteArray qba2 { "moon" }; - void *mutableIterable = const_cast<void *>(asIterable.constIterable()); + void *mutableIterable = asIterable.mutableIterable(); asIterable.metaSequence().addValue(mutableIterable, &qba1); asIterable.metaSequence().addValue(mutableIterable, &qba2); QSet<QByteArray> reference { "hello", "world", "goodbye", "moon" }; QCOMPARE(variant.value<QSet<QByteArray>>(), reference); + asIterable.metaSequence().addValue(mutableIterable, &qba1); + asIterable.metaSequence().addValue(mutableIterable, &qba2); + QCOMPARE(variant.value<QSet<QByteArray>>(), reference); } } |