qt6-bb10/tests/auto/corelib/tools
Marc Mutz eb10876c7d Unbreak QSet::intersect()
The selection of which set to iterate over and which one to remove
from based on their relative size violates the function's
documentation, which clearly states that items are removed from *this,
and not from `other`, so the result must never contain any elements
from `other`.

Amends 4f2c96eaa8. Instead of reverting
to the gruesome old code with the forced detach-just-to-remove copies,
distinguish four cases:

- if the two sets are shallow copies of each other, then their
  intersection is *this

- otherwise, if either set is empty, clear() *this. This is required
  for one of the tests that 29017f1395
  added to succeed.

- otherwise, if *this is detached, perform the operation in-place,
  using removeIf()

- otherwise, create a new set and move-assign to *this to avoid
  detaching just to remove something again. In this case, we can
  continue to iterate over the smaller set, but we need to keep
  picking elements from LHS into the result.

[ChangeLog][QtCore][QSet] Fixed a regression (introduced for Qt 5.2)
in intersect() that caused equivalent elements of `*this` to be
overwritten by elements of `other` if `other.size()` was larger than
`this->size()`.

Not picking to 5.15, as users will have likely adjusted their code to
the buggy behavior, and because removeIf() isn't available there.

Pick-to: 6.5
Fixes: QTBUG-132536
Task-number: QTBUG-106179
Change-Id: Idfa17c3b3589c4eacec27259fc01df6aeaa6c45f
Reviewed-by: Øystein Heskestad <oystein.heskestad@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
(cherry picked from commit 162015e9c6f469951d9212ef655cff16dcace071)
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
(cherry picked from commit eb13efc4a606cdb0c6f785a6319c489ad53626f3)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2025-02-05 15:57:55 +00:00
..
collections tst_collections.cpp: fix RecursiveList comparison case 2024-12-04 15:14:25 +00:00
containerapisymmetry QHash: adapt to C++20 ranges not offering operator->() 2024-08-20 01:28:02 +00:00
qalgorithms Change license for tests files 2024-02-04 09:56:42 +01:00
qarraydata Change license for tests files 2024-02-04 09:56:42 +01:00
qatomicscopedvaluerollback Change license for tests files 2024-02-04 09:56:42 +01:00
qbitarray Tests: disable various compiler warnings 2024-07-12 00:48:40 +00:00
qcache Change license for tests files 2024-02-04 09:56:42 +01:00
qcommandlineparser QCommandLineParser: include the positional arguments' sizes in --help 2024-12-20 04:30:30 +00:00
qcontiguouscache Change license for tests files 2024-02-04 09:56:42 +01:00
qcryptographichash QCryptographicHash: hashInto(): check the buffer size earlier 2025-01-01 04:02:35 +00:00
qduplicatetracker QDuplicateTracker: shed memory_resource on clear() 2025-01-31 14:06:20 +00:00
qeasingcurve QEasingCurve: use comparison helper macros 2024-05-10 16:31:28 +02:00
qexplicitlyshareddatapointer Change license for tests files 2024-02-04 09:56:42 +01:00
qexplicitlyshareddatapointerv2 QExplicitlySharedDataPointerV2: Add unit-tests 2024-07-16 15:37:55 +00:00
qflatmap Change license for tests files 2024-02-04 09:56:42 +01:00
qfreelist QFreeList: return timer IDs with the serial included 2024-10-19 06:50:26 +00:00
qhash QHash: Unconceptify heterogeneous search code 2024-09-06 15:55:07 +00:00
qhashfunctions Fix QT_SUPPORTS_INT128 checks 2024-08-07 19:57:04 +00:00
qhashseed Fix test compilation issues with QtLite configuration 2024-05-06 14:29:02 +00:00
qline Tests: suppress has_denorm deprecation 2024-09-06 14:38:21 +00:00
qlist QList: fix std::to_address(QList::iterator) on older compilers 2024-10-29 01:10:27 +00:00
qmacautoreleasepool Change license for tests files 2024-02-04 09:56:42 +01:00
qmakearray Change license for tests files 2024-02-04 09:56:42 +01:00
qmap QMap: add missing qHash() overload 2024-02-09 20:33:05 +00:00
qmargins QMarginsF: add qFuzzyCompare and qFuzzyIsNull overloads 2024-05-10 15:33:40 +02:00
qmessageauthenticationcode Change license for tests files 2024-02-04 09:56:42 +01:00
qoffsetstringarray QOffsetStringArray: fix off-by-one error for the past-the-end elements 2024-07-25 20:06:41 +00:00
qpair Change license for tests files 2024-02-04 09:56:42 +01:00
qpoint QPoint(F): use comparison helper macros 2024-05-10 15:33:39 +02:00
qpointf Add qFuzzyCompare() and qFuzzyIsNull() overloads for QPointF 2024-05-10 15:33:39 +02:00
qqueue Change license for tests files 2024-02-04 09:56:42 +01:00
qrect QDebug: do not trigger integer overflow when printing a QRect 2025-01-29 10:50:18 +00:00
qringbuffer Change license for tests files 2024-02-04 09:56:42 +01:00
qscopedpointer Change license for tests files 2024-02-04 09:56:42 +01:00
qscopedvaluerollback Change license for tests files 2024-02-04 09:56:42 +01:00
qscopeguard Change license for tests files 2024-02-04 09:56:42 +01:00
qset Unbreak QSet::intersect() 2025-02-05 15:57:55 +00:00
qsharedpointer Don't increase the refcount if qobject_cast failed 2024-09-05 12:29:51 +00:00
qsize QSize(F): use comparison helper macros 2024-05-14 14:33:21 +02:00
qsizef QSizeF: add qFuzzyCompare and qFuzzyIsNull overloads 2024-05-14 14:33:21 +02:00
qspan tst_QSpan: check QList<int> -> QSpan<const int> doesn't detach the former 2024-12-25 07:37:44 +00:00
qstl Change license for tests files 2024-02-04 09:56:42 +01:00
qtaggedpointer Change license for tests files 2024-02-04 09:56:42 +01:00
qtimeline Change license for tests files 2024-02-04 09:56:42 +01:00
qtyperevision QTypeRevision: fix support for 8-bit signed segments 2024-09-14 16:38:08 +00:00
quniquehandle Compare QUniqueHandles using comparesEqual and compareThreeWay 2025-01-22 19:31:26 +00:00
qvarlengtharray QVarLengthArray: re-publish Prealloc as a nested PreallocatedSize 2024-02-15 17:44:36 +00:00
qversionnumber QVersionNumber: use new comparison helper macros 2024-05-06 22:47:55 +02:00
CMakeLists.txt QExplicitlySharedDataPointerV2: Add unit-tests 2024-07-16 15:37:55 +00:00