Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
e25f5e82
Commit
e25f5e82
authored
Apr 23, 2017
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Добавил тесты по функциям UniSetTypes.
parent
4ebd3842
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
162 additions
and
11 deletions
+162
-11
TODO
TODO
+0
-7
UniSetTypes.h
include/UniSetTypes.h
+7
-1
UniSetTypes.cc
src/ObjectRepository/UniSetTypes.cc
+3
-0
test_utypes.cc
tests/test_utypes.cc
+151
-3
tests_with_conf.xml
tests/tests_with_conf.xml
+1
-0
No files found.
TODO
View file @
e25f5e82
...
...
@@ -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). Чтобы увидеть где происходит потеря пакетов (если происходит).
...
...
include/UniSetTypes.h
View file @
e25f5e82
...
...
@@ -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
)
{
...
...
src/ObjectRepository/UniSetTypes.cc
View file @
e25f5e82
...
...
@@ -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
)
)
...
...
tests/test_utypes.cc
View file @
e25f5e82
...
...
@@ -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
(
(
u
nsigned
in
t
)
uni_atoi
(
"0xffffffff"
)
==
0xffffffff
);
REQUIRE
(
(
u
int32_
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
);
}
// -----------------------------------------------------------------------------
tests/tests_with_conf.xml
View file @
e25f5e82
...
...
@@ -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"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment