summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
diff options
context:
space:
mode:
authorDennis Oberst <dennis.oberst@qt.io>2022-12-21 14:12:05 +0100
committerDennis Oberst <dennis.oberst@qt.io>2023-02-08 21:13:08 +0100
commit7cbdc8abbda12488f51317313347bbc220b42fe0 (patch)
tree2babcf1fc2b0d53eaf56196477a6323935f6dc9c /tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
parent65cda1f06aa24d9b75e81b37a5c23dcedbc53b92 (diff)
QVarLengthArray: add STL-style assign()
Implemented assign() methods for QVarLengthArray to align with the criteria of std::vector, addressing the previously missing functionality. Reference: https://en.cppreference.com/w/cpp/container/vector/assign [ChangeLog][QtCore][QVarLengthArray] Added assign(). Fixes: QTBUG-106200 Change-Id: If671069808ff561b0f4c77b6c7f7aca360a0c663 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp')
-rw-r--r--tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp b/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
index c3a56b68ec..92d4863aab 100644
--- a/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
+++ b/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
@@ -332,6 +332,16 @@ private Q_SLOTS:
void resize_QByteArray() { resize_impl<QByteArray>(); }
private:
+ template<typename Container>
+ void assign_impl() const;
+
+private Q_SLOTS:
+ void assign_std_vector()
+ { assign_impl<std::vector<int>>(); };
+ void assign_QVarLengthArray()
+ { assign_impl<QVarLengthArray<int, 4>>(); };
+
+private:
template <typename Container>
void front_back_impl() const;
@@ -760,6 +770,71 @@ void tst_ContainerApiSymmetry::resize_impl() const
}
template <typename Container>
+void tst_ContainerApiSymmetry::assign_impl() const
+{
+#define CHECK(Arr, ComparisonData, Sz_n, Sz_e, Cap_n, Cap_e) \
+ QCOMPARE(Sz_n, Sz_e); \
+ QCOMPARE(Cap_n, Cap_e); \
+ for (const auto &e : Arr) \
+ QCOMPARE(e, ComparisonData) \
+ /*end*/
+ using V = typename Container::value_type;
+ using S = typename Container::size_type;
+ auto tData = V(9);
+ {
+ // fill version
+ auto c = make<Container>(4);
+ c.assign(4, tData);
+ CHECK(c, tData, c.size(), S(4), c.capacity(), S(4));
+
+ c.assign(8, tData);
+ CHECK(c, tData, c.size(), S(8), c.capacity(), S(8));
+
+ c.assign(0, tData);
+ CHECK(c, tData, c.size(), S(0), c.capacity(), S(8));
+ }
+ {
+ // range version for non input iterator
+ auto c = make<Container>(4);
+ auto iter = make<Container>(1);
+
+ iter.assign(8, tData);
+ c.assign(iter.begin(), iter.end());
+ CHECK(c, tData, c.size(), S(8), c.capacity(), S(8));
+ }
+ {
+ // range version for input iterator
+ auto c = make<Container>(4);
+
+ std::stringstream ss("9 9 ");
+ c.assign(std::istream_iterator<V>{ss}, std::istream_iterator<V>{});
+ CHECK(c, tData, c.size(), S(2), c.capacity(), S(4));
+
+ ss.str("");
+ ss.clear();
+ ss << "9 9 9 9 ";
+ c.assign(std::istream_iterator<V>{ss}, std::istream_iterator<V>{});
+ CHECK(c, tData, c.size(), S(4), c.capacity(), S(4));
+
+ ss.str("");
+ ss.clear();
+ ss << "9 9 9 9 9 9 9 ";
+ c.assign(std::istream_iterator<V>{ss}, std::istream_iterator<V>{});
+ // We cannot check the capacity here because growth rates differ between implementations.
+ CHECK(c, tData, c.size(), S(7), 8, S(8));
+ }
+ {
+ // initializer-list version
+ auto c = make<Container>(4);
+ std::initializer_list<V> list = {tData, tData, tData};
+ c.assign(list);
+ CHECK(c, tData, c.size(), S(3), c.capacity(), S(4));
+ }
+
+#undef CHECK
+}
+
+template<typename Container>
void tst_ContainerApiSymmetry::front_back_impl() const
{
using V = typename Container::value_type;