diff options
author | Kai Koehne <kai.koehne@theqtcompany.com> | 2015-03-18 09:28:59 +0100 |
---|---|---|
committer | Kai Koehne <kai.koehne@theqtcompany.com> | 2015-03-23 08:13:42 +0000 |
commit | d3659bf88bac8dbfcdc6c957bdcc25e29bef0f04 (patch) | |
tree | 93b7823a2fc198d47441610592238b039101b2ab /tests/auto/corelib | |
parent | 5c379f3ff0471c51827577d047c93bab88ad44ce (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/auto/corelib')
-rw-r--r-- | tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp | 62 |
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" |