Commit 2a9b5be2 authored by Pavel Vainerman's avatar Pavel Vainerman

(tests): небольщой рефакторинг тестов, для лучшего понимая "отчётов"

parent 85906e18
#include <catch.hpp>
// -----------------------------------------------------------------------------
#include "Exceptions.h"
#include "Extensions.h"
#include "DigitalFilter.h"
// -----------------------------------------------------------------------------
using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
TEST_CASE("DigitalFilter","[DigitalFilter]")
// -----------------------------------------------------------------------------
TEST_CASE("[DigitalFilter]: default","[DigitalFilter]")
{
SECTION("..")
{
......@@ -37,59 +37,59 @@ TEST_CASE("DigitalFilter","[DigitalFilter]")
REQUIRE( df10.currentRC() == 50 );
REQUIRE( df10.currentMedian() == 50 );
}
SECTION("Median filter")
{
DigitalFilter df;
for( int i=0; i<20; i++ )
df.median(50);
REQUIRE( df.currentMedian() == 50 );
DigitalFilter df1;
DigitalFilter df10;
vector<long> dat={0,234,356,344,234,320,250,250,250,250,250,250,250,251,252,251,252,252,250};
for( auto v: dat )
{
df1.median(v);
df10.median(v);
}
REQUIRE( df1.currentMedian() == 252 );
REQUIRE( df10.currentMedian() == 252 );
}
SECTION("filter1")
{
DigitalFilter df1;
DigitalFilter df10;
// "выброс" за СКО отсекается..
vector<long> dat={10,12,10,-8,10,10,-230,10,10};
for( auto v: dat )
{
df1.add(v);
df10.add(v);
}
REQUIRE( df1.current1() == 10 );
REQUIRE( df10.current1() == 10 );
}
SECTION("filterRC")
{
double Ti = 0.09; // постоянная времени фильтра
DigitalFilter df1(5,Ti);
DigitalFilter df10(10,Ti);
vector<long> dat={10,12,10,-8,10,10,-230,10,10,12,12,10,-8,-8,10,11,9,11,11,11,9,12,12,10,10,11,-4560,12,10,10,11,10,10,10,10};
for( auto v: dat )
{
df1.add(v);
df10.add(v);
msleep(30);
}
REQUIRE( df1.currentRC() == 10 );
REQUIRE( df10.currentRC() == 10 );
}
}
// -----------------------------------------------------------------------------
TEST_CASE("[DigitalFilter]: median","[DigitalFilter][median]")
{
DigitalFilter df;
for( int i=0; i<20; i++ )
df.median(50);
REQUIRE( df.currentMedian() == 50 );
DigitalFilter df1;
DigitalFilter df10;
vector<long> dat={0,234,356,344,234,320,250,250,250,250,250,250,250,251,252,251,252,252,250};
for( auto v: dat )
{
df1.median(v);
df10.median(v);
}
REQUIRE( df1.currentMedian() == 252 );
REQUIRE( df10.currentMedian() == 252 );
}
// -----------------------------------------------------------------------------
TEST_CASE("[DigitalFilter]: filter1","[DigitalFilter][filter1]")
{
DigitalFilter df1;
DigitalFilter df10;
// "выброс" за СКО отсекается..
vector<long> dat={10,12,10,-8,10,10,-230,10,10};
for( auto v: dat )
{
df1.add(v);
df10.add(v);
}
REQUIRE( df1.current1() == 10 );
REQUIRE( df10.current1() == 10 );
}
// -----------------------------------------------------------------------------
TEST_CASE("[DigitalFilter]: filterRC","[DigitalFilter][filterRC]")
{
double Ti = 0.09; // постоянная времени фильтра
DigitalFilter df1(5,Ti);
DigitalFilter df10(10,Ti);
vector<long> dat={10,12,10,-8,10,10,-230,10,10,12,12,10,-8,-8,10,11,9,11,11,11,9,12,12,10,10,11,-4560,12,10,10,11,10,10,10,10};
for( auto v: dat )
{
df1.add(v);
df10.add(v);
msleep(30);
}
REQUIRE( df1.currentRC() == 10 );
REQUIRE( df10.currentRC() == 10 );
}
#include <catch.hpp>
// -----------------------------------------------------------------------------
#include "DelayTimer.h"
#include "UniSetTypes.h"
using namespace std;
TEST_CASE("DelayTimer", "[DelayTimer]" )
// -----------------------------------------------------------------------------
TEST_CASE("[DelayTimer]: default", "[DelayTimer]" )
{
SECTION( "Default constructor" )
{
......@@ -28,81 +28,6 @@ TEST_CASE("DelayTimer", "[DelayTimer]" )
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() );
dt.reset();
CHECK_FALSE( dt.check(true) );
msleep(50);
CHECK_FALSE( dt.check(true) );
dt.reset();
CHECK_FALSE( dt.check(true) );
msleep(60);
CHECK_FALSE( dt.check(true) );
msleep(60);
CHECK( dt.check(true) );
CHECK( 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);
......@@ -130,3 +55,78 @@ TEST_CASE("DelayTimer", "[DelayTimer]" )
REQUIRE( dt.getOffDelay() == 200 );
}
}
// -----------------------------------------------------------------------------
TEST_CASE("[DelayTimer]: working", "[DelayTimer]" )
{
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() );
dt.reset();
CHECK_FALSE( dt.check(true) );
msleep(50);
CHECK_FALSE( dt.check(true) );
dt.reset();
CHECK_FALSE( dt.check(true) );
msleep(60);
CHECK_FALSE( dt.check(true) );
msleep(60);
CHECK( dt.check(true) );
CHECK( dt.get() );
}
// -----------------------------------------------------------------------------
TEST_CASE("[DelayTimer]: debounce", "[DelayTimer]" )
{
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() );
}
// -----------------------------------------------------------------------------
#include <catch.hpp>
// -----------------------------------------------------------------------------
#include <iostream>
using namespace std;
// -----------------------------------------------------------------------------
#include "Exceptions.h"
#include "UniXML.h"
#include "UniSetTypes.h"
// -----------------------------------------------------------------------------
using namespace std;
// -----------------------------------------------------------------------------
TEST_CASE("UniXML", "[unixml][basic]" )
{
SECTION( "Default constructor" )
......@@ -44,73 +44,79 @@ TEST_CASE("UniXML", "[unixml][basic]" )
// remove
// copy
// nextNode
}
// -----------------------------------------------------------------------------
TEST_CASE("UniXML::iterator", "[unixml][iterator][basic]" )
{
UniXML uxml("tests_unixml.xml");
CHECK( uxml.isOpen() );
SECTION( "Iterator" );
{
UniXML::iterator it(cnode);
CHECK( it.getCurrent() != 0 );
it = uxml.begin();
CHECK( it.find("UniSet") != 0 );
// поиск в глубину..
it = uxml.begin();
CHECK( it.find("TestProc") != 0 );
it = uxml.begin();
CHECK( it.getName() == "UNISETPLC" );
it.goChildren();
CHECK( it.getName() == "UserData" );
it += 4;
CHECK( it.getName() == "settings" );
it -= 4;
CHECK( it.getName() == "UserData" );
it = it + 4;
CHECK( it.getName() == "settings" );
it = it - 4;
CHECK( it.getName() == "UserData" );
it++;
CHECK( it.getName() == "UniSet" );
it--;
CHECK( it.getName() == "UserData" );
++it;
CHECK( it.getName() == "UniSet" );
--it;
CHECK( it.getName() == "UserData" );
it = uxml.begin();
CHECK( it.findName("TestNode","TestNode1") != 0 );
it = uxml.begin();
CHECK( it.findName("TestNode","TestNode2") != 0 );
it = uxml.begin();
it.goChildren();
CHECK( it.getName() == "UserData" );
it.goParent();
CHECK( it.getName() == "UNISETPLC" );
it = uxml.begin();
it.goChildren();
it.goEnd();
CHECK( it.getName() == "EndSection" );
it.goBegin();
CHECK( it.getName() == "UserData" );
it = uxml.begin();
CHECK( it.find("TestData") != 0 );
CHECK( it.getProp("text") == "text" );
CHECK( it.getIntProp("x") == 10 );
CHECK( it.getPIntProp("y",-20) == 100 );
CHECK( it.getPIntProp("zero",20) == 0 );
CHECK( it.getPIntProp("negative",20) == -10 );
CHECK( it.getPIntProp("unknown",20) == 20 );
}
xmlNode* cnode = uxml.findNode(uxml.getFirstNode(),"UniSet");
CHECK( cnode != NULL );
UniXML::iterator it(cnode);
CHECK( it.getCurrent() != 0 );
it = uxml.begin();
CHECK( it.find("UniSet") != 0 );
// поиск в глубину..
it = uxml.begin();
CHECK( it.find("TestProc") != 0 );
it = uxml.begin();
CHECK( it.getName() == "UNISETPLC" );
it.goChildren();
CHECK( it.getName() == "UserData" );
it += 4;
CHECK( it.getName() == "settings" );
it -= 4;
CHECK( it.getName() == "UserData" );
it = it + 4;
CHECK( it.getName() == "settings" );
it = it - 4;
CHECK( it.getName() == "UserData" );
it++;
CHECK( it.getName() == "UniSet" );
it--;
CHECK( it.getName() == "UserData" );
++it;
CHECK( it.getName() == "UniSet" );
--it;
CHECK( it.getName() == "UserData" );
it = uxml.begin();
CHECK( it.findName("TestNode","TestNode1") != 0 );
it = uxml.begin();
CHECK( it.findName("TestNode","TestNode2") != 0 );
it = uxml.begin();
it.goChildren();
CHECK( it.getName() == "UserData" );
it.goParent();
CHECK( it.getName() == "UNISETPLC" );
it = uxml.begin();
it.goChildren();
it.goEnd();
CHECK( it.getName() == "EndSection" );
it.goBegin();
CHECK( it.getName() == "UserData" );
it = uxml.begin();
CHECK( it.find("TestData") != 0 );
CHECK( it.getProp("text") == "text" );
CHECK( it.getIntProp("x") == 10 );
CHECK( it.getPIntProp("y",-20) == 100 );
CHECK( it.getPIntProp("zero",20) == 0 );
CHECK( it.getPIntProp("negative",20) == -10 );
CHECK( it.getPIntProp("unknown",20) == 20 );
}
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