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 }