summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@theqtcompany.com>2015-03-18 09:28:59 +0100
committerKai Koehne <kai.koehne@theqtcompany.com>2015-03-23 08:13:42 +0000
commitd3659bf88bac8dbfcdc6c957bdcc25e29bef0f04 (patch)
tree93b7823a2fc198d47441610592238b039101b2ab /tests
parent5c379f3ff0471c51827577d047c93bab88ad44ce (diff)
QVarLengthArray: Add initializer_list constructor
Implement an initializer_list constructor, which was probably just forgotten so far. Technically this is a SC incompatible change, since QVarLengthArray<int> array = {10}; will now create an array with one element 10, instead of an empty array with a reserved size of 10. Anyhow, keeping the inconsistency with the STL / other Qt containers here would certainly do more harm than good in the long run. Task-number: QTBUG-45047 Change-Id: I4675880f93e141181250939942fa32300916b0e3 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
index 0b507ca277..40917eebea 100644
--- a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
+++ b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
@@ -54,6 +54,12 @@ private slots:
void indexOf();
void lastIndexOf();
void contains();
+ void initializeListInt();
+ void initializeListMovable();
+ void initializeListComplex();
+private:
+ template<typename T>
+ void initializeList();
};
int fooCtor = 0;
@@ -333,11 +339,23 @@ struct MyPrimitive
struct MyMovable
: MyBase
{
+ MyMovable(char input = 'j') : i(input) {}
+ bool operator==(const MyMovable &other) const
+ {
+ return i == other.i;
+ }
+ char i;
};
struct MyComplex
: MyBase
{
+ MyComplex(char input = 'j') : i(input) {}
+ bool operator==(const MyComplex &other) const
+ {
+ return i == other.i;
+ }
+ char i;
};
QT_BEGIN_NAMESPACE
@@ -734,5 +752,49 @@ void tst_QVarLengthArray::contains()
QVERIFY(myvec.contains(QLatin1String("I don't exist")));
}
+void tst_QVarLengthArray::initializeListInt()
+{
+ initializeList<int>();
+}
+
+void tst_QVarLengthArray::initializeListMovable()
+{
+ const int instancesCount = MyMovable::liveCount;
+ initializeList<MyMovable>();
+ QCOMPARE(MyMovable::liveCount, instancesCount);
+}
+
+void tst_QVarLengthArray::initializeListComplex()
+{
+ const int instancesCount = MyComplex::liveCount;
+ initializeList<MyComplex>();
+ QCOMPARE(MyComplex::liveCount, instancesCount);
+}
+
+template<typename T>
+void tst_QVarLengthArray::initializeList()
+{
+#ifdef Q_COMPILER_INITIALIZER_LISTS
+ T val1(110);
+ T val2(105);
+ T val3(101);
+ T val4(114);
+
+ QVarLengthArray<T> v1 {val1, val2, val3};
+ QCOMPARE(v1, QVarLengthArray<T>() << val1 << val2 << val3);
+ QCOMPARE(v1, (QVarLengthArray<T> {val1, val2, val3}));
+
+ QVarLengthArray<QVarLengthArray<T>, 4> v2{ v1, {val4}, QVarLengthArray<T>(), {val1, val2, val3} };
+ QVarLengthArray<QVarLengthArray<T>, 4> v3;
+ v3 << v1 << (QVarLengthArray<T>() << val4) << QVarLengthArray<T>() << v1;
+ QCOMPARE(v3, v2);
+
+ QVarLengthArray<T> v4({});
+ QCOMPARE(v4.size(), 0);
+#else
+ QSKIP("This tests requires a compiler that supports initializer lists.");
+#endif
+}
+
QTEST_APPLESS_MAIN(tst_QVarLengthArray)
#include "tst_qvarlengtharray.moc"