summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r--tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp92
1 files changed, 77 insertions, 15 deletions
diff --git a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
index 74654a3862..1ce5f1e0e6 100644
--- a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
+++ b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
@@ -29,14 +29,55 @@
#include <QtTest/QtTest>
#include <qvarlengtharray.h>
#include <qvariant.h>
+#include <qscopeguard.h>
#include <memory>
+struct Tracker
+{
+ static int count;
+ Tracker() { ++count; }
+ Tracker(const Tracker &) { ++count; }
+ Tracker(Tracker &&) { ++count; }
+
+ Tracker &operator=(const Tracker &) = default;
+ Tracker &operator=(Tracker &&) = default;
+
+ ~Tracker() { --count; }
+
+};
+
+int Tracker::count = 0;
+
+template <typename T>
+class ValueTracker
+{
+ Tracker m_tracker;
+public:
+ ValueTracker() = default;
+ ValueTracker(T value) : value{std::move(value)} {}
+ T value;
+
+ friend bool operator==(const ValueTracker &lhs, const ValueTracker &rhs) noexcept
+ { return lhs.value == rhs.value; }
+ friend bool operator!=(const ValueTracker &lhs, const ValueTracker &rhs) noexcept
+ { return !operator==(lhs, rhs); }
+};
+
class tst_QVarLengthArray : public QObject
{
Q_OBJECT
private slots:
void append();
+ void move_int_1() { move_int<1>(); }
+ void move_int_2() { move_int<2>(); }
+ void move_int_3() { move_int<3>(); }
+ void move_QString_1() { move_QString<1>(); }
+ void move_QString_2() { move_QString<2>(); }
+ void move_QString_3() { move_QString<3>(); }
+ void move_Tracker_1() { move_Tracker<1>(); }
+ void move_Tracker_2() { move_Tracker<2>(); }
+ void move_Tracker_3() { move_Tracker<3>(); }
void removeLast();
void oldTests();
void appendCausingRealloc();
@@ -61,25 +102,18 @@ private slots:
void implicitDefaultCtor();
private:
+ template <qsizetype N, typename T>
+ void move(T t1, T t2);
+ template <qsizetype N>
+ void move_int() { move<N, int>(42, 24); }
+ template <qsizetype N>
+ void move_QString() { move<N, QString>("Hello", "World"); }
+ template <qsizetype N>
+ void move_Tracker();
template<typename T>
void initializeList();
};
-struct Tracker
-{
- static int count;
- Tracker() { ++count; }
- Tracker(const Tracker &) { ++count; }
- Tracker(Tracker &&) { ++count; }
-
- Tracker &operator=(const Tracker &) = default;
- Tracker &operator=(Tracker &&) = default;
-
- ~Tracker() { --count; }
-};
-
-int Tracker::count = 0;
-
void tst_QVarLengthArray::append()
{
QVarLengthArray<QString, 2> v;
@@ -102,6 +136,34 @@ void tst_QVarLengthArray::append()
v2.append(5);
}
+template <qsizetype N>
+void tst_QVarLengthArray::move_Tracker()
+{
+ const auto reset = qScopeGuard([] { Tracker::count = 0; });
+ move<N, ValueTracker<int>>({24}, {24});
+ QCOMPARE(Tracker::count, 0);
+}
+
+template <qsizetype N, typename T>
+void tst_QVarLengthArray::move(T t1, T t2)
+{
+ {
+ QVarLengthArray<T, N> v;
+ v.append(t1);
+ v.append(t2);
+
+ auto moved = std::move(v);
+ QCOMPARE(moved.size(), 2);
+ QCOMPARE(moved[0], t1);
+ QCOMPARE(moved[1], t2);
+
+ v = std::move(moved);
+ QCOMPARE(v.size(), 2);
+ QCOMPARE(v[0], t1);
+ QCOMPARE(v[1], t2);
+ }
+}
+
void tst_QVarLengthArray::removeLast()
{
{