Commit 4491159f authored by Pavel Vainerman's avatar Pavel Vainerman

Добавил тесты для dealytimer.

parent 6d3188fc
...@@ -115,7 +115,10 @@ class DelayTimer ...@@ -115,7 +115,10 @@ class DelayTimer
return state; return state;
} }
inline bool get(){ return state; } inline bool get(){ return check(prevState); }
inline timeout_t getOnDelay(){ return onDelay; }
inline timeout_t getOffDelay(){ return offDelay; }
protected: protected:
PassiveTimer pt; PassiveTimer pt;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
noinst_PROGRAMS = tests noinst_PROGRAMS = tests
#hourglass delaytimer unixml ui umutex conftest iterator_test sscanf_hex calibration threadtst dlog #hourglass delaytimer unixml ui umutex conftest iterator_test sscanf_hex calibration threadtst dlog
tests_SOURCES = tests.cc passivetimer.cc hourglass.cc tests_SOURCES = tests.cc passivetimer.cc hourglass.cc delaytimer.cc
tests_LDADD = $(top_builddir)/lib/libUniSet2.la tests_LDADD = $(top_builddir)/lib/libUniSet2.la
tests_CPPFLAGS = -I$(top_builddir)/include -I$(includeir)/Catch tests_CPPFLAGS = -I$(top_builddir)/include -I$(includeir)/Catch
......
#include <Catch/catch.hpp>
#include "DelayTimer.h"
#include "UniSetTypes.h"
using namespace std;
TEST_CASE("DelayTimer", "[DelayTimer]" )
{
SECTION( "Default constructor" )
{
// Работа без задержки..(нулевые задержки)
DelayTimer dt;
CHECK_FALSE( dt.get() );
CHECK_FALSE( dt.check(false) );
CHECK( dt.check(true) );
msleep(15);
CHECK( dt.get() );
CHECK_FALSE( dt.check(false) );
CHECK_FALSE( dt.get() );
CHECK( dt.check(true) );
CHECK( dt.get() );
}
SECTION( "Init constructor" )
{
DelayTimer dt(100,50);
CHECK_FALSE( dt.get() );
CHECK_FALSE( dt.check(false) );
CHECK_FALSE( dt.check(true) );
}
SECTION( "Working" )
{
DelayTimer dt(100,60);
CHECK_FALSE( dt.get() );
CHECK_FALSE( dt.check(false) );
// проверяем срабатывание..
CHECK_FALSE( dt.check(true) );
msleep(50);
CHECK_FALSE( dt.check(true) );
msleep(60);
CHECK( dt.check(true) );
CHECK( dt.get() );
// проверяем отпускание
// несмотря на вызов check(false).. должно ещё 60 мсек возвращать true
CHECK( dt.check(false) );
CHECK( dt.get() );
msleep(20);
CHECK( dt.check(false) );
CHECK( dt.get() );
msleep(50); // в сумме уже 20+50=70 > 60, значит должно "отпустить"
CHECK_FALSE( dt.check(false) );
CHECK_FALSE( dt.get() );
}
SECTION( "Debounce" )
{
DelayTimer dt(150,100);
CHECK_FALSE( dt.get() );
CHECK_FALSE( dt.check(false) );
// проверяем срабатывание.. (при скакании сигнала)
CHECK_FALSE( dt.check(true) );
msleep(50);
CHECK_FALSE( dt.check(false) );
msleep(60);
CHECK_FALSE( dt.check(true) );
CHECK_FALSE( dt.get() );
msleep(100);
CHECK_FALSE( dt.check(true) );
CHECK_FALSE( dt.get() );
msleep(60);
CHECK( dt.check(true) );
CHECK( dt.get() );
// проверяем отпускание при скакании сигнала
CHECK( dt.check(false) );
CHECK( dt.get() );
msleep(60);
CHECK( dt.check(true) );
CHECK( dt.get() );
dt.check(false);
msleep(80);
CHECK( dt.check(false) );
CHECK( dt.get() );
msleep(40);
CHECK_FALSE( dt.check(false) );
CHECK_FALSE( dt.get() );
}
SECTION( "Copy" )
{
DelayTimer dt1(100,50);
DelayTimer dt2(200,100);
dt1 = dt2;
REQUIRE( dt1.getOnDelay() == 200 );
REQUIRE( dt1.getOffDelay() == 100 );
dt1.check(true);
msleep(220);
CHECK( dt1.get() );
CHECK_FALSE( dt2.get() );
}
}
#if 0
#include <iostream> #include <iostream>
using namespace std; using namespace std;
...@@ -137,3 +249,4 @@ int main() ...@@ -137,3 +249,4 @@ int main()
cerr << "DelayTimer: TEST14 OK! " << endl; cerr << "DelayTimer: TEST14 OK! " << endl;
return 0; return 0;
} }
#endif
\ No newline at end of file
...@@ -56,4 +56,21 @@ TEST_CASE("PassiveTimer", "[PassiveTimer]" ) ...@@ -56,4 +56,21 @@ TEST_CASE("PassiveTimer", "[PassiveTimer]" )
msleep(55); // т.к. точность +-10 мсек.. делаем паузу 55.. msleep(55); // т.к. точность +-10 мсек.. делаем паузу 55..
CHECK( pt.checkTime() ); CHECK( pt.checkTime() );
} }
SECTION( "Copy" )
{
PassiveTimer pt1(100);
PassiveTimer pt2(200);
REQUIRE( pt1.getInterval() == 100 );
REQUIRE( pt2.getInterval() == 200 );
pt2 = pt1;
REQUIRE( pt1.getInterval() == 100 );
REQUIRE( pt2.getInterval() == 100 );
msleep(110);
CHECK( pt1.checkTime() );
CHECK( pt2.checkTime() );
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment