diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2023-04-28 16:52:55 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2023-05-11 00:28:49 -0700 |
commit | ec0e0d1e815b2df8b3fddc3914e021b47fe7e1f9 (patch) | |
tree | c0e72b9ebb9782a20600a44bf6f843ab6fe50a5f /tests/auto/corelib/kernel/qdeadlinetimer | |
parent | d848e6d87d0bdcd4290f9b2362981bb43ae1a871 (diff) |
QDeadlineTimer: make it so any negative millisecond count is "forever"
We have quite a few Qt API that assumes this, so making this change
helps transitioning them to QDeadlineTimer.
[ChangeLog][Important Behavior Changes] QDeadlineTimer will now
interpret negative millisecond remaining times as "forever", instead of
only the value -1. This brings the API closer in line with other API
like QMutex. This change does not apply to the nanosecond counts in the
API, nor to the API based on std::chrono.
Change-Id: I6f518d59e63249ddbf43fffd175a3e5bead564ae
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'tests/auto/corelib/kernel/qdeadlinetimer')
-rw-r--r-- | tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp index 2529c64750..4e340cad4f 100644 --- a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp +++ b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp @@ -458,17 +458,39 @@ void tst_QDeadlineTimer::overflow() // Make sure setRemainingTime underflows gracefully deadline.setPreciseRemainingTime(std::numeric_limits<qint64>::min() / 10, 0, timerType); - QVERIFY(!deadline.isForever()); // The above underflows, so make sure we don't saturate to Forever - QCOMPARE(deadline.remainingTimeNSecs(), 0); - QVERIFY(deadline.remainingTime() == 0); + QVERIFY(deadline.isForever()); // The above could underflow, so make sure we did set to Forever + QCOMPARE(deadline.remainingTimeNSecs(), -1); + QCOMPARE(deadline.remainingTime(), -1); // If the timer is saturated we don't want to get a valid number of milliseconds - QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::min()); + QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::max()); // Check that the conversion to milliseconds and nanoseconds underflows gracefully deadline.setPreciseDeadline(std::numeric_limits<qint64>::min() / 10, 0, timerType); QVERIFY(!deadline.isForever()); // The above underflows, make sure we don't saturate to Forever QVERIFY(deadline.deadline() == std::numeric_limits<qint64>::min()); QVERIFY(deadline.deadlineNSecs() == std::numeric_limits<qint64>::min()); + + // Check that subtracting max() twice doesn't make it become positive + deadline.setPreciseDeadline(0); + deadline -= std::numeric_limits<qint64>::max(); + deadline -= std::numeric_limits<qint64>::max(); + QVERIFY(!deadline.isForever()); + QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::min()); + QCOMPARE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::min()); + + // Ditto for adding max() + deadline.setPreciseDeadline(0); + deadline += std::numeric_limits<qint64>::max(); + deadline += std::numeric_limits<qint64>::max(); + QVERIFY(deadline.isForever()); // it's so far in the future it's effectively forever + QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::max()); + QCOMPARE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max()); + + // But we don't un-become forever after saturation + deadline -= std::numeric_limits<qint64>::max(); + QVERIFY(deadline.isForever()); + QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::max()); + QCOMPARE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max()); } void tst_QDeadlineTimer::expire() |