Commit e25f5e82 authored by Pavel Vainerman's avatar Pavel Vainerman

Добавил тесты по функциям UniSetTypes.

parent 4ebd3842
......@@ -15,13 +15,10 @@ Version 2.3
только от одного, при пропаже связи переключается на другой и т.д. по кругу)
// --- Оптимизация.. --- //
- сделать ли ObjectId short?
- "продумать" функцию key()... может наложить ограничение на диапазон id..
- uniset-codegen: сделать в src.xml <description> и генерировать на его основе описание класса
- уйти по возможности на стандартные исключения.. вместо Exceptions..
- использовать везде где нужно(и можно) вместо прямых указателей.. shared_ptr и т.п. (например для conf и других глобальных переменных)
- встроить различные сигналы (sigc).. в ModbusExchange и другие классы..
- uniset-codegen: дописать функцию help со всеми параметрами для _SK, тесты
......@@ -96,10 +93,6 @@ DB: Сделать регулируемый буфер на INSERT-ы БД, чт
Уйти от использования libxml2,DebugLog ==> и применять одну библиотеку libpoco (http://pocoproject.org/documentation/index.html)
или всё-таки на boost?
MB: выводить количество регистров опроса в getInfo()
ИДЕИ
-----
- ведение статистики по типам сообщений в каждом объекте (и в SM). Чтобы увидеть где происходит потеря пакетов (если происходит).
......
......@@ -210,7 +210,10 @@ namespace uniset
Если @node не указано, возвращается node=DefaultObjectId */
std::list<uniset::ConsumerInfo> getObjectsList( const std::string& s, std::shared_ptr<uniset::Configuration> conf = nullptr );
/*! проверка является текст в строке - числом..*/
/*! проверка является текст в строке - числом..
* \warning Числом будет считаться только строка ПОЛНОСТЬЮ состоящая из чисел.
* Т.е. например "-10" или "100.0" или "10 000" - числом считаться не будут!
*/
bool is_digit( const std::string& s ) noexcept;
/*! замена всех вхождений подстроки
......@@ -225,6 +228,7 @@ namespace uniset
/*! Получение параметра командной строки
\param name - название параметра
\param defval - значение, которое будет возвращено, если параметр не найден
\warning Поиск ведётся с первого аргумента, а не с нулевого!
*/
inline std::string getArgParam( const std::string& name,
int _argc, const char* const* _argv,
......@@ -252,6 +256,8 @@ namespace uniset
\param _argv - argv
\return Возвращает -1, если параметр не найден.
Или позицию параметра, если найден.
\warning Поиск ведётся с первого аргумента, а не с нулевого!
*/
inline int findArgParam( const std::string& name, int _argc, const char* const* _argv )
{
......
......@@ -261,6 +261,9 @@ std::vector<std::string> uniset::explode_str( const std::string& str, char sep )
// ------------------------------------------------------------------------------------------
bool uniset::is_digit( const std::string& s ) noexcept
{
if( s.empty() )
return false;
for( const auto& c : s )
{
if( !isdigit(c) )
......
......@@ -2,6 +2,7 @@
// -----------------------------------------------------------------------------
#include <sstream>
#include <limits>
#include <cstdint>
#include "Configuration.h"
#include "UniSetTypes.h"
// -----------------------------------------------------------------------------
......@@ -48,11 +49,9 @@ TEST_CASE("UniSetTypes: uni_atoi", "[utypes][uni_atoi]" )
REQUIRE( uni_atoi("0xff") == 0xff );
REQUIRE( uni_atoi("0xffff") == 0xffff );
REQUIRE( uni_atoi("0x0") == 0 );
REQUIRE( (unsigned int)uni_atoi("0xffffffff") == 0xffffffff );
REQUIRE( (uint32_t)uni_atoi("0xffffffff") == 0xffffffff );
REQUIRE( uni_atoi("0xfffffff8") == 0xfffffff8 );
}
WARN("Tests for 'UniSetTypes' incomplete...");
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: uni_strdup", "[utypes][uni_strdup]" )
......@@ -190,3 +189,152 @@ TEST_CASE("UniSetTypes: timespec comapre", "[utypes][timespec]" )
REQUIRE( t3 == t4 );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: fcalibrate", "[utypes][fcalibrate]" )
{
// float fcalibrate(float raw, float rawMin, float rawMax, float calMin, float calMax, bool limit = true );
REQUIRE( fcalibrate(0.5,0.1,1.0,100.0,1000.0,true) == 500.0 );
REQUIRE( fcalibrate(10.0,0.1,1.0,100.0,1000.0,true) == 1000.0 );
REQUIRE( fcalibrate(10.0,0.1,1.0,100.0,1000.0,false) == 10000.0 );
REQUIRE( fcalibrate(0.0,0.1,1.0,100.0,1000.0,true) == 100.0 );
REQUIRE( fcalibrate(0.0,0.1,1.0,100.0,1000.0,false) == 0.0 );
REQUIRE( fcalibrate(-10.0,0.1,1.0,100.0,1000.0,true) == 100.0 );
REQUIRE( fcalibrate(-10.0,0.1,1.0,100.0,1000.0,false) == -10000.0 );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: lcalibrate", "[utypes][lcalibrate]" )
{
// long lcalibrate(long raw, long rawMin, long rawMax, long calMin, long calMax, bool limit = true );
REQUIRE( lcalibrate(5,1,10,100,1000,true) == 500 );
REQUIRE( lcalibrate(5,1,10,100,1000,false) == 500 );
REQUIRE( lcalibrate(0,1,10,100,1000,true) == 100 );
REQUIRE( lcalibrate(0,1,10,100,1000,false) == 0 );
REQUIRE( lcalibrate(100,1,10,100,1000,true) == 1000 );
REQUIRE( lcalibrate(100,1,10,100,1000,false) == 10000 );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: setinregion", "[utypes][setinregion]" )
{
// long setinregion(long raw, long rawMin, long rawMax);
REQUIRE( setinregion(5,1,10) == 5 );
REQUIRE( setinregion(1,1,10) == 1 );
REQUIRE( setinregion(10,1,10) == 10 );
REQUIRE( setinregion(0,1,10) == 1 );
REQUIRE( setinregion(100,1,10) == 10 );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: setoutregion", "[utypes][setoutregion]" )
{
// long setoutregion(long raw, long calMin, long calMax);
REQUIRE( setoutregion(5,1,10) == 1 );
REQUIRE( setoutregion(1,1,10) == 1 );
REQUIRE( setoutregion(10,1,10) == 10 );
REQUIRE( setoutregion(100,1,10) == 100 );
REQUIRE( setoutregion(0,1,10) == 0 );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: file_exist", "[utypes][file_exist]" )
{
CHECK_FALSE( file_exist("uknown_file") );
auto conf = uniset_conf();
REQUIRE( conf );
CHECK( file_exist(conf->getConfFileName()) );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: check_filter", "[utypes][check_filter]" )
{
// bool check_filter( UniXML::iterator& it, const std::string& f_prop, const std::string& f_val = "" ) noexcept;
auto xml = uniset_conf()->getConfXML();
xmlNode* xnode = xml->findNode(xml->getFirstNode(),"test_check_filter");
REQUIRE(xnode);
UniXML::iterator it(xnode);
CHECK( check_filter(it, "one_prop", "") );
CHECK_FALSE( check_filter(it, "empty_prop", "") );
CHECK( check_filter(it, "fprop", "fvalue") );
CHECK_FALSE( check_filter(it, "fprop", "badvalue") );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: findArgParam", "[utypes][findArgParam]" )
{
// int findArgParam( const std::string& name, int _argc, const char* const* _argv )
int argc = 5;
char* argv[] = {"progname", "--param1", "val", "--param2", "val2"};
REQUIRE( findArgParam("--param1", argc, argv) == 1 );
REQUIRE( findArgParam("--param2", argc, argv) == 3 );
REQUIRE( findArgParam("--unknownparam", argc, argv) == -1 );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: getArgParam", "[utypes][getArgParam]" )
{
// getArgParam( const std::string& name,
// int _argc, const char* const* _argv,
// const std::string& defval = "" ) noexcept
int argc = 5;
char* argv[] = {"progname", "--param1", "val", "--param2", "val2"};
REQUIRE( getArgParam("--param1", argc, argv) == "val" );
REQUIRE( getArgParam("--param2", argc, argv) == "val2" );
REQUIRE( getArgParam("--unknownparam", argc, argv, "val3") == "val3" );
REQUIRE( getArgParam("--unknownparam2", argc, argv) == "" );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: getArgInt", "[utypes][getArgInt]" )
{
// inline int getArgInt( const std::string& name,
// int _argc, const char* const* _argv,
// const std::string& defval = "" ) noexcept
int argc = 5;
char* argv[] = {"progname", "--param1", "1", "--param2", "text"};
REQUIRE( getArgInt("--param1", argc, argv) == 1 );
REQUIRE( getArgInt("--param2", argc, argv) == 0 );
REQUIRE( getArgInt("--unknownparam", argc, argv, "3") == 3 );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: is_digit", "[utypes][is_digit]" )
{
// bool is_digit( const std::string& s ) noexcept;
CHECK( is_digit("1") );
CHECK( is_digit("100") );
CHECK( is_digit("0") );
CHECK_FALSE( is_digit("-1") );
CHECK_FALSE( is_digit("10 000") );
CHECK_FALSE( is_digit("100.0") );
CHECK_FALSE( is_digit("a") );
CHECK_FALSE( is_digit("'") );
CHECK_FALSE( is_digit(";") );
CHECK_FALSE( is_digit("") );
CHECK_FALSE( is_digit("abs10as") );
CHECK_FALSE( is_digit("10a") );
CHECK_FALSE( is_digit("a10") );
}
// -----------------------------------------------------------------------------
TEST_CASE("UniSetTypes: getIOType", "[utypes][getIOType]" )
{
// UniversalIO::IOType getIOType( const std::string& s ) noexcept;
REQUIRE( getIOType("DI") == UniversalIO::DI );
REQUIRE( getIOType("di") == UniversalIO::DI );
REQUIRE( getIOType("DO") == UniversalIO::DO );
REQUIRE( getIOType("do") == UniversalIO::DO );
REQUIRE( getIOType("AI") == UniversalIO::AI );
REQUIRE( getIOType("ai") == UniversalIO::AI );
REQUIRE( getIOType("AO") == UniversalIO::AO );
REQUIRE( getIOType("ao") == UniversalIO::AO );
REQUIRE( getIOType("a") == UniversalIO::UnknownIOType );
REQUIRE( getIOType("d") == UniversalIO::UnknownIOType );
REQUIRE( getIOType("") == UniversalIO::UnknownIOType );
}
// -----------------------------------------------------------------------------
......@@ -30,6 +30,7 @@
<LockDir name=""/>
<testnode name="testnode" id2="-100"/>
<test_check_filter name="test_check_filter" one_prop="1" empty_prop="" fprop="fvalue"/>
<Services>
<LocalTimeService name="TimeService" MaxCountTimers="100" AskLifeTimeSEC="10"/>
<LocalInfoServer name="InfoServer" dbrepeat="1">
......
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