From 3b0536bbe8d6782f79e1bcc2b4f1925547c14c0b Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 10 May 2023 21:23:50 +0200 Subject: [PATCH] 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 Reviewed-by: Qt CI Bot --- .../tst_containerapisymmetry.cpp | 18 +++++++++++------- 1 file 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(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(4); + const S oldCapacity = c.capacity(); auto iter = make(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(4); + const S oldCapacity = c.capacity(); std::stringstream ss("9 9 "); c.assign(std::istream_iterator{ss}, std::istream_iterator{}); - 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{ss}, std::istream_iterator{}); - 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(4); + const S oldCapacity = c.capacity(); std::initializer_list 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