File indexing completed on 2024-04-21 05:54:06

0001 /*
0002     SPDX-License-Identifier: GPL-2.0-or-later
0003 */
0004 
0005 #include "rsitimercounter_test.h"
0006 
0007 #include "rsitimercounter.h"
0008 
0009 static constexpr int TEST_DELAY = 15 * 60;
0010 static constexpr int TEST_THRESHOLD = 40;
0011 static constexpr int TEST_BREAK = 30;
0012 
0013 void RSITimerCounterTest::normalCountdown()
0014 {
0015     RSITimerCounter counter = RSITimerCounter(TEST_DELAY, TEST_BREAK, TEST_THRESHOLD);
0016 
0017     static constexpr int TEST_RUNS = 5;
0018     for (int k = 0; k < TEST_RUNS; k++) {
0019         for (int i = 0; i < TEST_DELAY - 1; i++) {
0020             int breakInterval = counter.tick(0);
0021             QCOMPARE(breakInterval, 0);
0022             QCOMPARE(counter.isReset(), false);
0023         }
0024         int breakInterval = counter.tick(0);
0025         QCOMPARE(breakInterval, TEST_BREAK);
0026     }
0027 }
0028 
0029 void RSITimerCounterTest::thresholdReached()
0030 {
0031     RSITimerCounter counter = RSITimerCounter(TEST_DELAY, TEST_BREAK, TEST_THRESHOLD);
0032 
0033     for (int i = 0; i < TEST_THRESHOLD - 1; i++) {
0034         int breakInterval = counter.tick(i + 1);
0035         QCOMPARE(breakInterval, 0);
0036     }
0037 
0038     // Idle break detection should trigger.
0039     int breakInterval = counter.tick(TEST_THRESHOLD);
0040     QCOMPARE(breakInterval, 0);
0041     QCOMPARE(counter.isReset(), true);
0042 }
0043 
0044 void RSITimerCounterTest::mixedCountdown()
0045 {
0046     RSITimerCounter counter = RSITimerCounter(TEST_DELAY, TEST_BREAK, TEST_THRESHOLD);
0047 
0048     int part1 = TEST_DELAY / 2;
0049 
0050     QVERIFY2(TEST_THRESHOLD < TEST_DELAY, "Test parameters make no sense");
0051 
0052     // First non-idle for part1 seconds.
0053     for (int i = 0; i < part1; i++) {
0054         int breakInterval = counter.tick(0);
0055         QVERIFY2(breakInterval == 0, "Break triggered too fast");
0056         QCOMPARE(counter.isReset(), false);
0057     }
0058     // Then idle for the rest of the period.
0059     for (int i = 0; i < TEST_THRESHOLD - 1; i++) {
0060         int breakInterval = counter.tick(i + 1);
0061         QVERIFY2(breakInterval == 0, "Break triggered too fast");
0062         QCOMPARE(counter.isReset(), false);
0063     }
0064 
0065     // Idle break detection should trigger.
0066     int breakInterval = counter.tick(TEST_THRESHOLD);
0067     QCOMPARE(breakInterval, 0);
0068     QVERIFY2(counter.isReset(), QString("Counter is not reset after %1 ticks").arg(TEST_DELAY).toLatin1());
0069 }