From 28ba7ac1780b41924de267861826b01233618570 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Tue, 8 Sep 2020 16:50:13 +0200 Subject: Change QLineF::setLength() to work whenever length() is non-zero Previously it only worked when isNull() was false, which is true for very short lines, even though length() may be non-zero. [ChangeLog][QtCore][QLineF] QLineF::setLength() will now set the length if the line's length() is non-zero. Previously, it was documented to only set the length if isNull() was false; this is a fuzzy check, so isNull() could be true for a line with non-zero length(). Fixes: QTBUG-89569 Change-Id: I803e622ad09c85815dde25df8dd3ba6dfcba0714 Reviewed-by: Lars Knoll (cherry picked from commit 6974737695eae5a41bc8a3f344a4f1f199006f21) Reviewed-by: Qt Cherry-pick Bot --- tests/auto/corelib/tools/qline/tst_qline.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'tests/auto/corelib') diff --git a/tests/auto/corelib/tools/qline/tst_qline.cpp b/tests/auto/corelib/tools/qline/tst_qline.cpp index f4ac51fc24..9d5df728a1 100644 --- a/tests/auto/corelib/tools/qline/tst_qline.cpp +++ b/tests/auto/corelib/tools/qline/tst_qline.cpp @@ -247,8 +247,8 @@ void tst_QLine::testLength_data() << -(tiny * .5) << -(tiny * .5) << (tiny * .5) << (tiny * .5) << (tiny * M_SQRT2) << (2 * M_SQRT2) << 2.0 << 2.0; QTest::newRow("[1+3e-13,1+4e-13]|1895| (1, 1)") - << 1.0 << 1.0 << (1 + 3e-13) << (1 + 4e-13) // isNull(), so ignores setLength() - << 5e-13 << 1895.0 << 3e-13 << 4e-13; + << 1.0 << 1.0 << (1 + 3e-13) << (1 + 4e-13) + << 5e-13 << 1895.0 << 1137.0 << 1516.0; QTest::newRow("[4e-323,5e-324]|1892|") // Unavoidable underflow: denormals << 0.0 << 0.0 << 4e-323 << 5e-324 << 4e-323 << 1892.0 << 4e-323 << 5e-324; // vx, vy values ignored @@ -266,14 +266,14 @@ void tst_QLine::testLength() QFETCH(double, vy); QLineF l(x1, y1, x2, y2); - const bool wasNull = l.isNull(); - if (!wasNull) - QCOMPARE(l.length(), qreal(length)); + QCOMPARE(l.length(), qreal(length)); l.setLength(lengthToSet); - QCOMPARE(l.length(), wasNull ? qreal(length) : qreal(lengthToSet)); // Scaling tiny values up to big can be imprecise: don't try to test vx, vy - if (wasNull || !qFuzzyIsNull(length)) { + if (length > 0 && qFuzzyIsNull(length)) { + QVERIFY(l.length() > lengthToSet / 2 && l.length() < lengthToSet * 2); + } else { + QCOMPARE(l.length(), length > 0 ? qreal(lengthToSet) : qreal(length)); QCOMPARE(l.dx(), qreal(vx)); QCOMPARE(l.dy(), qreal(vy)); } -- cgit v1.2.3