diff options
Diffstat (limited to 'test/timer.cpp')
-rw-r--r-- | test/timer.cpp | 28 |
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); |