diff options
author | Marc Mutz <marc.mutz@qt.io> | 2023-05-10 21:23:50 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2023-05-13 16:58:36 +0200 |
commit | 3b0536bbe8d6782f79e1bcc2b4f1925547c14c0b (patch) | |
tree | 7caa57ed73d592916f3d75d630ad0de8bd2b8f56 /tests/auto/corelib/tools | |
parent | fb58df3260c1c919814810ecbced4f9db6caf9df (diff) |
tst_ContainerApiSymmetry: make assign_impl() robust w.r.t. overallocation
The parameter passed to reserve() is just a hint. The container
implementation is free to choose a larger capacity, and some do
(e.g. QList in prepend optimization mode).
Fix the test by querying the container for its post-make<>()
capacity() and taking a larger-than-expected initial capacity() into
account when later re-checking the capacity().
Change-Id: Id8f26f14e8df9d685ca2387ec4a52d74fea7cb9d
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'tests/auto/corelib/tools')
-rw-r--r-- | tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp b/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp index b97763fe65..b16c820730 100644 --- a/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp +++ b/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp @@ -783,37 +783,40 @@ void tst_ContainerApiSymmetry::assign_impl() const { // fill version auto c = make<Container>(4); + const S oldCapacity = c.capacity(); c.assign(4, tData); - CHECK(c, tData, c.size(), S(4), c.capacity(), S(4)); + CHECK(c, tData, c.size(), S(4), c.capacity(), oldCapacity); c.assign(8, tData); - CHECK(c, tData, c.size(), S(8), c.capacity(), S(8)); + CHECK(c, tData, c.size(), S(8), c.capacity(), std::max(oldCapacity, S(8))); c.assign(0, tData); - CHECK(c, tData, c.size(), S(0), c.capacity(), S(8)); + CHECK(c, tData, c.size(), S(0), c.capacity(), std::max(oldCapacity, S(8))); } { // range version for non input iterator auto c = make<Container>(4); + const S oldCapacity = c.capacity(); 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)); + CHECK(c, tData, c.size(), S(8), c.capacity(), std::max(oldCapacity, S(8))); } { // range version for input iterator auto c = make<Container>(4); + const S oldCapacity = c.capacity(); 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)); + CHECK(c, tData, c.size(), S(2), c.capacity(), oldCapacity); 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)); + CHECK(c, tData, c.size(), S(4), c.capacity(), oldCapacity); ss.str(""); ss.clear(); @@ -826,9 +829,10 @@ void tst_ContainerApiSymmetry::assign_impl() const { // initializer-list version auto c = make<Container>(4); + const S oldCapacity = c.capacity(); std::initializer_list<V> list = {tData, tData, tData}; c.assign(list); - CHECK(c, tData, c.size(), S(3), c.capacity(), S(4)); + CHECK(c, tData, c.size(), S(3), c.capacity(), oldCapacity); } #undef CHECK |