From d3659bf88bac8dbfcdc6c957bdcc25e29bef0f04 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 18 Mar 2015 09:28:59 +0100 Subject: 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 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 --- .../tools/qvarlengtharray/tst_qvarlengtharray.cpp | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) (limited to 'tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp') 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 + 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(); +} + +void tst_QVarLengthArray::initializeListMovable() +{ + const int instancesCount = MyMovable::liveCount; + initializeList(); + QCOMPARE(MyMovable::liveCount, instancesCount); +} + +void tst_QVarLengthArray::initializeListComplex() +{ + const int instancesCount = MyComplex::liveCount; + initializeList(); + QCOMPARE(MyComplex::liveCount, instancesCount); +} + +template +void tst_QVarLengthArray::initializeList() +{ +#ifdef Q_COMPILER_INITIALIZER_LISTS + T val1(110); + T val2(105); + T val3(101); + T val4(114); + + QVarLengthArray v1 {val1, val2, val3}; + QCOMPARE(v1, QVarLengthArray() << val1 << val2 << val3); + QCOMPARE(v1, (QVarLengthArray {val1, val2, val3})); + + QVarLengthArray, 4> v2{ v1, {val4}, QVarLengthArray(), {val1, val2, val3} }; + QVarLengthArray, 4> v3; + v3 << v1 << (QVarLengthArray() << val4) << QVarLengthArray() << v1; + QCOMPARE(v3, v2); + + QVarLengthArray 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" -- cgit v1.2.3