Commit 17792ffe authored by Pavel Vainerman's avatar Pavel Vainerman

(Pulse): небольшой рефакторинг интерфейса

next_step() --> setTiming()
parent 7b3d01f0
......@@ -35,24 +35,21 @@ namespace uniset
class Pulse
{
public:
Pulse() noexcept {}
~Pulse() noexcept {}
// t1_msec - интервал "вкл"
// t0_msec - интерфал "откл"
inline void run( timeout_t _t1_msec, timeout_t _t0_msec ) noexcept
{
t1_msec = _t1_msec;
t0_msec = _t0_msec;
t1.setTiming(t1_msec);
t0.setTiming(t0_msec);
set(true);
setTiming(_t1_msec, _t0_msec, true);
}
inline void set_next( timeout_t _t1_msec, timeout_t _t0_msec ) noexcept
inline void setTiming( timeout_t _t1_msec, timeout_t _t0_msec, bool run = false ) noexcept
{
t1_msec = _t1_msec;
t0_msec = _t0_msec;
t1.setTiming(t1_msec);
t0.setTiming(t0_msec);
set(run);
}
inline void reset() noexcept
......@@ -62,7 +59,7 @@ namespace uniset
inline bool step() noexcept
{
if( !isOn )
if( !enabled )
{
ostate = false;
return false;
......@@ -90,9 +87,9 @@ namespace uniset
inline void set( bool state ) noexcept
{
isOn = state;
enabled = state;
if( !isOn )
if( !enabled )
ostate = false;
else
{
......@@ -104,7 +101,7 @@ namespace uniset
friend std::ostream& operator<<(std::ostream& os, Pulse& p )
{
return os << " idOn=" << p.isOn
return os << " idOn=" << p.enabled
<< " t1=" << p.t1.getInterval()
<< " t0=" << p.t0.getInterval()
<< " out=" << p.out();
......@@ -124,11 +121,16 @@ namespace uniset
return t0_msec;
}
bool isOn() const noexcept
{
return enabled;
}
protected:
PassiveTimer t1; // таймер "1"
PassiveTimer t0; // таймер "0"
bool ostate = { false };
bool isOn = { false };
bool enabled = { false };
timeout_t t1_msec = { 0 };
timeout_t t0_msec = { 0 };
......
......@@ -4,70 +4,91 @@
#include "UniSetTypes.h"
using namespace std;
using namespace uniset;
TEST_CASE("Pulse", "[Test for class 'Pulse' - impulse generator]" )
// -----------------------------------------------------------------------------
TEST_CASE("Pulse: default", "[pulse][default]" )
{
SECTION( "Default constructor" )
{
// Работа без задержки..(нулевые задержки)
Pulse p;
// Работа без задержки..(нулевые задержки)
Pulse p;
REQUIRE( p.getT1() == 0 );
REQUIRE( p.getT0() == 0 );
REQUIRE( p.getT1() == 0 );
REQUIRE( p.getT0() == 0 );
CHECK_FALSE( p.out() );
CHECK_FALSE( p.out() );
p.step();
p.step();
CHECK_FALSE( p.out() );
}
// -----------------------------------------------------------------------------
TEST_CASE("Pulse: basic tests", "[pulse][basic]" )
{
Pulse p;
p.run(100, 60); // 100 msec ON..60 msec OFF
CHECK( p.step() );
p.step();
p.step();
CHECK_FALSE( p.out() );
}
msleep(80);
CHECK( p.step() );
SECTION( "Working" )
{
Pulse p;
p.run(100, 60); // 100 msec ON..60 msec OFF
CHECK( p.step() );
msleep(30);
CHECK_FALSE( p.step() ); // 10 - OFF
msleep(80);
CHECK( p.step() );
msleep(70);
CHECK( p.step() ); // 20 - ON
msleep(30);
CHECK_FALSE( p.step() ); // 10 - OFF
msleep(100);
CHECK_FALSE( p.step() ); // 20 OFF
msleep(70);
CHECK( p.step() ); // 20 - ON
p.set(false);
msleep(100);
CHECK_FALSE( p.step() );
msleep(60);
CHECK_FALSE( p.step() );
msleep(100);
CHECK_FALSE( p.step() ); // 20 OFF
p.set(true);
msleep(70);
CHECK( p.step() );
msleep(40);
CHECK_FALSE( p.step() );
p.set(false);
msleep(100);
CHECK_FALSE( p.step() );
msleep(60);
CHECK_FALSE( p.step() );
p.reset();
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
// проверка того, что при познем вызове step
// тоже всё будет хорошо..
p.reset();
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(2050);
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(70);
CHECK( p.step() );
}
// -----------------------------------------------------------------------------
TEST_CASE("Pulse: ext tests", "[pulse][ext]" )
{
Pulse p;
p.setTiming(50,100,false);
REQUIRE_FALSE( p.isOn() );
p.set(true);
msleep(70);
CHECK( p.step() );
msleep(40);
CHECK_FALSE( p.step() );
p.set(true);
REQUIRE( p.isOn() );
REQUIRE( p.step() );
msleep(60);
REQUIRE_FALSE( p.step() );
msleep(110);
REQUIRE( p.step() );
p.reset();
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
p.set(false);
REQUIRE_FALSE( p.isOn() );
REQUIRE_FALSE( p.step() );
// проверка того, что при познем вызове step
// тоже всё будет хорошо..
p.reset();
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(2050);
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(70);
CHECK( p.step() );
}
p.setTiming(50,100,true);
REQUIRE( p.isOn() );
REQUIRE( p.step() );
}
// -----------------------------------------------------------------------------
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