summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-10-06 07:23:58 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-10-07 06:02:23 +0300
commitdfe1d8944141c36f3d6958b81668768d8bb7a023 (patch)
treeb3ec8ab4dee9efa152fa29e56363efde5a57a8c2
parent9c6794164de4f30e33e00a5d3d5d6f41706e523e (diff)
test: timer: Test that a timer can be restarted before it expires
The Timer API allows restarting a timer before it expires. Add a corresponding test. The test fails as the Timer class doesn't comply with its API documentation. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
-rw-r--r--test/timer.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/test/timer.cpp b/test/timer.cpp
index d4f16a9b..5ff94dbb 100644
--- a/test/timer.cpp
+++ b/test/timer.cpp
@@ -21,13 +21,14 @@ class ManagedTimer : public Timer
{
public:
ManagedTimer()
- : Timer()
+ : Timer(), count_(0)
{
timeout.connect(this, &ManagedTimer::timeoutHandler);
}
void start(int msec)
{
+ count_ = 0;
start_ = std::chrono::steady_clock::now();
expiration_ = std::chrono::steady_clock::time_point();
@@ -40,12 +41,19 @@ public:
return abs(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count());
}
+ bool hasFailed()
+ {
+ return isRunning() || count_ != 1 || jitter() > 50;
+ }
+
private:
void timeoutHandler(Timer *timer)
{
expiration_ = std::chrono::steady_clock::now();
+ count_++;
}
+ unsigned int count_;
std::chrono::steady_clock::time_point start_;
std::chrono::steady_clock::time_point expiration_;
};
@@ -74,7 +82,7 @@ protected:
dispatcher->processEvents();
- if (timer.isRunning() || timer.jitter() > 50) {
+ if (timer.hasFailed()) {
cout << "Timer expiration test failed" << endl;
return TestFail;
}
@@ -87,7 +95,7 @@ protected:
timer.start(4295);
dispatcher->processEvents();
- if (timer.isRunning() || timer.jitter() > 50) {
+ if (timer.hasFailed()) {
cout << "Timer expiration test failed" << endl;
return TestFail;
}
@@ -102,11 +110,23 @@ protected:
dispatcher->processEvents();
- if (timer.isRunning() || timer.jitter() > 50) {
+ if (timer.hasFailed()) {
cout << "Timer restart test failed" << endl;
return TestFail;
}
+ /* Timer restart before expiration. */
+ timer.start(50);
+ timer.start(100);
+ timer.start(150);
+
+ dispatcher->processEvents();
+
+ if (timer.hasFailed()) {
+ cout << "Timer restart before expiration test failed" << endl;
+ return TestFail;
+ }
+
/* Two timers. */
timer.start(1000);
timer2.start(300);