tst_qvarlengtharray: add test for QVLA(n) ctor

Also add one for types that are neither copy- nor move-constructible.
In contrast to resize(n), the QVLA(n) ctor worked for such types, so
make sure it stays that way.

Change-Id: If54fbc9dd6a4808175c4bcb0ffb492b33c879746
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit e7c792ba7179c4c81fb2e26f66031ec81234b0d7)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Marc Mutz 2023-02-27 14:30:21 +01:00 committed by Qt Cherry-pick Bot
parent ecb118d45e
commit f77356c6e9

View File

@ -42,12 +42,29 @@ public:
{ return !operator==(lhs, rhs); }
};
class NonCopyable
{
Q_DISABLE_COPY(NonCopyable)
int n;
public:
NonCopyable() : n(0) {}
explicit NonCopyable(int n) : n(n) {}
friend bool operator==(const NonCopyable &lhs, const NonCopyable &rhs) noexcept
{ return lhs.n == rhs.n; }
friend bool operator!=(const NonCopyable &lhs, const NonCopyable &rhs) noexcept
{ return !operator==(lhs, rhs); }
};
class tst_QVarLengthArray : public QObject
{
Q_OBJECT
private slots:
void defaultConstructor_int() { defaultConstructor<int>(); }
void defaultConstructor_QString() { defaultConstructor<QString>(); }
void sizeConstructor_int() { sizeConstructor<int>(); }
void sizeConstructor_QString() { sizeConstructor<QString>(); }
void sizeConstructor_NonCopyable() { sizeConstructor<NonCopyable>(); }
void append();
#if QT_DEPRECATED_SINCE(6, 3)
void prepend();
@ -99,6 +116,8 @@ private slots:
private:
template <typename T>
void defaultConstructor();
template <typename T>
void sizeConstructor();
template <qsizetype N, typename T>
void move(T t1, T t2);
template <qsizetype N>
@ -128,6 +147,31 @@ void tst_QVarLengthArray::defaultConstructor()
}
}
template <typename T>
void tst_QVarLengthArray::sizeConstructor()
{
{
QVarLengthArray<T, 123> vla(0);
QCOMPARE(vla.size(), 0);
QVERIFY(vla.empty());
QVERIFY(vla.isEmpty());
QCOMPARE(vla.begin(), vla.end());
QCOMPARE(vla.capacity(), 123);
}
{
QVarLengthArray<T, 124> vla(124);
QCOMPARE(vla.size(), 124);
QVERIFY(!vla.empty());
QCOMPARE(vla.capacity(), 124);
}
{
QVarLengthArray<T, 124> vla(125);
QCOMPARE(vla.size(), 125);
QVERIFY(!vla.empty());
QCOMPARE_GE(vla.capacity(), 125);
}
}
void tst_QVarLengthArray::append()
{
QVarLengthArray<QString, 2> v;