ContainerApiSymmetry: verify Qt containers member erase returns iterator
For QSet, the key_type is const, so can't test assiging to it. Change-Id: I9d363ef3fe52646b937d6a422227b19c48fdaf1f Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit 93f54f0aa44467da1ea7ef7bcb01e891c619c8f5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
c1bbd4e442
commit
d95b21706f
@ -354,6 +354,15 @@ private:
|
||||
template <typename Container>
|
||||
void erase_if_associative_impl() const;
|
||||
|
||||
template <typename Container>
|
||||
void member_erase_impl() const;
|
||||
|
||||
template <typename Container>
|
||||
void member_erase_associative_impl() const;
|
||||
|
||||
template <typename Container>
|
||||
void member_erase_set_impl() const;
|
||||
|
||||
private Q_SLOTS:
|
||||
void erase_QList() { erase_impl<QList<int>>(); }
|
||||
void erase_QVarLengthArray() { erase_impl<QVarLengthArray<int>>(); }
|
||||
@ -380,6 +389,17 @@ private Q_SLOTS:
|
||||
void erase_if_QHash() { erase_if_associative_impl<QHash<int, int>>(); }
|
||||
void erase_if_QMultiHash() { erase_if_associative_impl<QMultiHash<int, int>>(); }
|
||||
|
||||
void member_erase_QList() { member_erase_impl<QList<int>>(); }
|
||||
void member_erase_QVarLengthArray() { member_erase_impl<QVarLengthArray<int>>(); }
|
||||
void member_erase_QString() { member_erase_impl<QString>(); }
|
||||
void member_erase_QByteArray() { member_erase_impl<QByteArray>(); }
|
||||
void member_erase_QSet() { member_erase_set_impl<QSet<int>>(); }
|
||||
|
||||
void member_erase_QMap() { member_erase_associative_impl<QMap<int, int>>(); }
|
||||
void member_erase_QMultiMap() {member_erase_associative_impl<QMultiMap<int, int>>(); }
|
||||
void member_erase_QHash() { member_erase_associative_impl<QHash<int, int>>(); }
|
||||
void member_erase_QMultiHash() { member_erase_associative_impl<QMultiHash<int, int>>(); }
|
||||
|
||||
private:
|
||||
template <typename Container>
|
||||
void keyValueRange_impl() const;
|
||||
@ -873,6 +893,65 @@ void tst_ContainerApiSymmetry::erase_if_associative_impl() const
|
||||
QCOMPARE(c.size(), S(0));
|
||||
}
|
||||
|
||||
template <typename Container>
|
||||
void tst_ContainerApiSymmetry::member_erase_impl() const
|
||||
{
|
||||
using S = typename Container::size_type;
|
||||
using V = typename Container::value_type;
|
||||
const S size = 7;
|
||||
auto c = make<Container>(size); // {1, 2, 3, 4, 5, 6, 7}
|
||||
QCOMPARE(c.size(), size);
|
||||
|
||||
auto copy = c;
|
||||
// Container::erase() returns an iterator, not const_iterator
|
||||
auto it = c.erase(c.cbegin(), c.cbegin());
|
||||
static_assert(std::is_same_v<decltype(it), typename Container::iterator>);
|
||||
QCOMPARE(c.size(), size);
|
||||
const V newVal{100};
|
||||
QCOMPARE_NE(*it, newVal);
|
||||
*it = newVal;
|
||||
QCOMPARE(it, c.cbegin());
|
||||
QCOMPARE(*c.cbegin(), newVal);
|
||||
|
||||
QCOMPARE(std::find(copy.cbegin(), copy.cend(), newVal), copy.cend());
|
||||
}
|
||||
|
||||
template <typename Container>
|
||||
void tst_ContainerApiSymmetry::member_erase_associative_impl() const
|
||||
{
|
||||
using S = typename Container::size_type;
|
||||
using V = typename Container::mapped_type;
|
||||
|
||||
const S size = 20;
|
||||
auto c = makeAssociative<Container>(size);
|
||||
QCOMPARE(c.size(), size);
|
||||
|
||||
// Verify Container::erase() returns iterator, not const_iterator
|
||||
auto it = c.erase(c.cbegin());
|
||||
static_assert(std::is_same_v<decltype(it), typename Container::iterator>);
|
||||
QCOMPARE(c.size(), size - 1);
|
||||
QCOMPARE(it, c.cbegin());
|
||||
const auto current = it.value();
|
||||
it.value() = current + V(5);
|
||||
QCOMPARE(c.cbegin().value(),current + V(5));
|
||||
}
|
||||
|
||||
template <typename Container>
|
||||
void tst_ContainerApiSymmetry::member_erase_set_impl() const
|
||||
{
|
||||
using S = typename Container::size_type;
|
||||
|
||||
const S size = 20;
|
||||
auto c = make<Container>(size);
|
||||
QCOMPARE(c.size(), size);
|
||||
|
||||
// Verify Container::erase() returns iterator, not const_iterator
|
||||
auto it = c.erase(c.cbegin());
|
||||
static_assert(std::is_same_v<decltype(it), typename Container::iterator>);
|
||||
QCOMPARE(c.size(), size - 1);
|
||||
QCOMPARE(it, c.cbegin());
|
||||
}
|
||||
|
||||
template <typename Container>
|
||||
void tst_ContainerApiSymmetry::keyValueRange_impl() const
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user