summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2024-04-05 17:07:05 +0200
committerIvan Solovev <ivan.solovev@qt.io>2024-05-10 15:33:40 +0200
commit30bf163355b5a955eb66b968059666c506033e77 (patch)
treeba112f82cfd4127f9938742b139fed27f8965171 /tests/auto/corelib
parent9bedf8a53c8127effb7ab6f331986b967d9c1254 (diff)
QRect(F): use comparison helper macros
Also explicitly add QRectF vs QRect comparison. Previously such comparison was implicitly converting QRect to QRectF, and doing the fuzzy comparison. The new operators are directly calling operator==(QPointF, QPoint), which also does the fuzzy comparison, so the old behavior is preserved. As a drive-by: move the operators into the private section. Task-number: QTBUG-120308 Change-Id: I9b96ed4266e6a6c02a52c8cfff6ec1b2d036a7ca Reviewed-by: Tatiana Borisova <tatiana.borisova@qt.io>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r--tests/auto/corelib/tools/qrect/CMakeLists.txt2
-rw-r--r--tests/auto/corelib/tools/qrect/tst_qrect.cpp67
2 files changed, 69 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/qrect/CMakeLists.txt b/tests/auto/corelib/tools/qrect/CMakeLists.txt
index a02e1c33a5..c98c836379 100644
--- a/tests/auto/corelib/tools/qrect/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qrect/CMakeLists.txt
@@ -14,4 +14,6 @@ endif()
qt_internal_add_test(tst_qrect
SOURCES
tst_qrect.cpp
+ LIBRARIES
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/tools/qrect/tst_qrect.cpp b/tests/auto/corelib/tools/qrect/tst_qrect.cpp
index 0f3dd1a0ef..43b46d8d8e 100644
--- a/tests/auto/corelib/tools/qrect/tst_qrect.cpp
+++ b/tests/auto/corelib/tools/qrect/tst_qrect.cpp
@@ -7,6 +7,8 @@
#include <limits.h>
#include <qdebug.h>
+#include <private/qcomparisontesthelper_p.h>
+
#include <array>
class tst_QRect : public QObject
@@ -33,6 +35,9 @@ public:
static QPoint getQPointCase( QPointCases p );
private slots:
+ void comparisonCompiles();
+ void comparison_data();
+ void comparison();
void isNull_data();
void isNull();
void newIsEmpty_data();
@@ -160,6 +165,8 @@ private slots:
#define LARGE 1000000000
static bool isLarge(int x) { return x > LARGE || x < -LARGE; }
+static constexpr qreal qreal_min = std::numeric_limits<qreal>::min();
+
QRect tst_QRect::getQRectCase( QRectCases c )
{
// Should return the best variety of possible QRects, if a
@@ -242,6 +249,66 @@ QPoint tst_QRect::getQPointCase( QPointCases p )
}
}
+void tst_QRect::comparisonCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QRect>();
+ QTestPrivate::testEqualityOperatorsCompile<QRectF>();
+ QTestPrivate::testEqualityOperatorsCompile<QRectF, QRect>();
+}
+
+void tst_QRect::comparison_data()
+{
+ QTest::addColumn<QRectF>("lhsF");
+ QTest::addColumn<QRectF>("rhsF");
+ QTest::addColumn<bool>("result");
+ QTest::addColumn<bool>("floatResult");
+ QTest::addColumn<bool>("mixedResult");
+
+ QTest::newRow("Invalid_vs_Invalid") << getQRectCase(InvalidQRect).toRectF()
+ << getQRectCase(InvalidQRect).toRectF()
+ << true << true << true;
+
+ QTest::newRow("Null_vs_Null") << getQRectCase(NullQRect).toRectF()
+ << getQRectCase(NullQRect).toRectF()
+ << true << true << true;
+
+ QTest::newRow("Empty_vs_Empty") << getQRectCase(EmptyQRect).toRectF()
+ << getQRectCase(EmptyQRect).toRectF()
+ << true << true << true;
+
+ QTest::newRow("NegativeSize_vs_NegativeSize") << getQRectCase(NegativeSizeQRect).toRectF()
+ << getQRectCase(NegativeSizeQRect).toRectF()
+ << true << true << true;
+
+ QTest::newRow("Invalid_vs_Null") << getQRectCase(InvalidQRect).toRectF()
+ << getQRectCase(NullQRect).toRectF()
+ << false << false << false;
+
+ QTest::newRow("NearlySimilar") << QRectF(QPointF(1.1, 9.9), QPointF(9.9, 1.1))
+ << QRectF(QPointF(1., 10.), QPointF(10., 1.))
+ << true << false << true;
+
+ QTest::newRow("WithQREAL_MIN") << QRectF(QPointF(0., -10.), QPointF(-1., 0.))
+ << QRectF(QPointF(-qreal_min, -10.), QPointF(-1., qreal_min))
+ << true << true << true;
+}
+
+void tst_QRect::comparison()
+{
+ QFETCH(const QRectF, lhsF);
+ QFETCH(const QRectF, rhsF);
+ QFETCH(const bool, result);
+ QFETCH(const bool, floatResult);
+ QFETCH(const bool, mixedResult);
+
+ const QRect lhs = lhsF.toRect();
+ const QRect rhs = rhsF.toRect();
+
+ QT_TEST_EQUALITY_OPS(lhs, rhs, result);
+ QT_TEST_EQUALITY_OPS(lhsF, rhsF, floatResult);
+ QT_TEST_EQUALITY_OPS(lhs, rhsF, mixedResult);
+}
+
void tst_QRect::isNull_data()
{
QTest::addColumn<QRect>("r");