2018-06-11 20:50:52 +00:00
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* @author Marek Bel
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include "catch.hpp"
|
|
|
|
#include "../Firmware/Timer.h"
|
2018-06-11 21:41:36 +00:00
|
|
|
#include "../Firmware/TimerRemaining.h"
|
2018-06-11 20:50:52 +00:00
|
|
|
|
2018-06-12 00:24:52 +00:00
|
|
|
static unsigned long now = 0;
|
|
|
|
|
2018-06-11 20:50:52 +00:00
|
|
|
unsigned long millis()
|
|
|
|
{
|
2018-06-12 00:24:52 +00:00
|
|
|
return now;
|
2018-06-11 20:50:52 +00:00
|
|
|
}
|
|
|
|
|
2019-01-28 18:29:31 +00:00
|
|
|
unsigned long millis2()
|
|
|
|
{
|
|
|
|
return now;
|
|
|
|
}
|
|
|
|
|
2018-06-12 00:24:52 +00:00
|
|
|
static void basicTimer()
|
2018-06-11 20:50:52 +00:00
|
|
|
{
|
|
|
|
LongTimer timer;
|
2018-06-12 00:24:52 +00:00
|
|
|
CHECK( timer.running() == false);
|
2018-06-11 20:50:52 +00:00
|
|
|
|
|
|
|
timer.start();
|
2018-06-12 00:24:52 +00:00
|
|
|
CHECK( timer.running() == true);
|
2018-06-11 20:50:52 +00:00
|
|
|
|
|
|
|
timer.stop();
|
2018-06-12 00:24:52 +00:00
|
|
|
CHECK( timer.running() == false);
|
|
|
|
|
|
|
|
timer.start();
|
|
|
|
CHECK( timer.expired(0) == true);
|
|
|
|
CHECK( timer.expired(0) == false);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
|
|
|
|
timer.start();
|
|
|
|
CHECK( timer.expired(1) == false);
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
++now;
|
|
|
|
CHECK( timer.expired(1) == true);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
--now;
|
|
|
|
|
|
|
|
timer.start();
|
|
|
|
CHECK( timer.expired(ULONG_MAX - 1) == false);
|
|
|
|
now+= ULONG_MAX - 2;
|
|
|
|
CHECK( timer.expired(ULONG_MAX - 1) == false);
|
|
|
|
now++;
|
|
|
|
CHECK( timer.expired(ULONG_MAX - 1) == true);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
now-= ULONG_MAX - 1;
|
2018-06-11 20:50:52 +00:00
|
|
|
|
|
|
|
timer.start();
|
2018-06-12 00:24:52 +00:00
|
|
|
CHECK( timer.expired(ULONG_MAX) == false);
|
|
|
|
now+= ULONG_MAX - 1;
|
|
|
|
CHECK( timer.expired(ULONG_MAX) == false);
|
|
|
|
now++;
|
|
|
|
CHECK( timer.expired(ULONG_MAX) == true);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
now-= ULONG_MAX;
|
2018-06-11 20:50:52 +00:00
|
|
|
|
|
|
|
timer.start();
|
2018-06-12 00:24:52 +00:00
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.expired(12*3600000ul + 38*60000ul + 15000) == false);
|
|
|
|
now+= 12*3600000ul + 38*60000ul + 14999;
|
|
|
|
CHECK( timer.expired(12*3600000ul + 38*60000ul + 15000) == false);
|
|
|
|
++now;
|
|
|
|
CHECK( timer.expired(12*3600000ul + 38*60000ul + 15000) == true);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
now-= 12*3600000ul + 38*60000ul + 15000;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE( "LongTimer test.", "[timer]" )
|
|
|
|
{
|
|
|
|
now = 0;
|
|
|
|
basicTimer();
|
|
|
|
now = 1;
|
|
|
|
basicTimer();
|
|
|
|
now = ULONG_MAX;
|
|
|
|
basicTimer();
|
|
|
|
now = ULONG_MAX - 1;
|
|
|
|
basicTimer();
|
|
|
|
now = 12*3600000ul + 38*60000ul + 15000;
|
|
|
|
basicTimer();
|
|
|
|
}
|
|
|
|
|
|
|
|
static void basicRemaining()
|
|
|
|
{
|
|
|
|
TimerRemaining timer;
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
CHECK( timer.remaining() == 0);
|
|
|
|
|
|
|
|
timer.start(100);
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.remaining() == 100);
|
|
|
|
now += 99;
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.remaining() == 1);
|
|
|
|
|
|
|
|
++now;
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.remaining() == 0);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
now -=100;
|
|
|
|
|
|
|
|
timer.start(1);
|
|
|
|
timer.stop();
|
|
|
|
CHECK( timer.remaining() == 0);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
|
|
|
|
timer.start(0);
|
|
|
|
CHECK( timer.remaining() == 0);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
|
|
|
|
timer.start(1);
|
|
|
|
CHECK( timer.remaining() == 1);
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
|
|
|
|
++now;
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.remaining() == 0);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
--now;
|
|
|
|
|
|
|
|
timer.start(ULONG_MAX - 1);
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.remaining() == ULONG_MAX - 1);
|
|
|
|
now+= ULONG_MAX - 2;
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.remaining() == 1);
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
++now;
|
|
|
|
CHECK( timer.remaining() == 0);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
now-= ULONG_MAX - 1;
|
|
|
|
|
|
|
|
timer.start(ULONG_MAX);
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.remaining() == ULONG_MAX);
|
|
|
|
now+= ULONG_MAX - 1;
|
|
|
|
CHECK( timer.remaining() == 1);
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
++now;
|
|
|
|
CHECK( timer.remaining() == 0);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
|
|
|
|
timer.start(12*3600000ul + 38*60000ul + 15000);
|
|
|
|
CHECK( timer.running() == true);
|
|
|
|
CHECK( timer.remaining() == 12*3600000ul + 38*60000ul + 15000);
|
|
|
|
now+= 12*3600000ul + 38*60000ul + 14999;
|
|
|
|
CHECK( timer.remaining() == 1);
|
|
|
|
++now;
|
|
|
|
CHECK( timer.remaining() == 0);
|
|
|
|
CHECK( timer.running() == false);
|
|
|
|
now-= 12*3600000ul + 38*60000ul + 15000;
|
|
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE( "TimerRemaining test.", "[timer]" )
|
|
|
|
{
|
|
|
|
now = 0;
|
|
|
|
basicRemaining();
|
|
|
|
now = 1;
|
|
|
|
basicRemaining();
|
|
|
|
now = ULONG_MAX;
|
|
|
|
basicRemaining();
|
|
|
|
now = ULONG_MAX - 1;
|
|
|
|
basicRemaining();
|
|
|
|
|
|
|
|
now = 12*3600000ul + 38*60000ul + 15000;
|
|
|
|
basicRemaining();
|
2018-06-11 21:41:36 +00:00
|
|
|
|
2018-06-11 20:50:52 +00:00
|
|
|
}
|