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
a510d139
Commit
a510d139
authored
Oct 08, 2014
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(tests): написал тесты для класса CallbackTimer. Переименовал его
из "CallBackTimer" --> "CallbackTimer"
parent
32d6f59b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
125 additions
and
45 deletions
+125
-45
CallbackTimer.h
include/CallbackTimer.h
+16
-16
CallbackTimer.tcc
include/CallbackTimer.tcc
+26
-26
Makefile.am
tests/Makefile.am
+4
-3
callbacktimer.cc
tests/callbacktimer.cc
+79
-0
No files found.
include/Call
B
ackTimer.h
→
include/Call
b
ackTimer.h
View file @
a510d139
...
@@ -21,8 +21,8 @@
...
@@ -21,8 +21,8 @@
* \author Pavel Vainerman
* \author Pavel Vainerman
*/
*/
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
# ifndef Call
B
ackTimer_H_
# ifndef Call
b
ackTimer_H_
# define Call
B
ackTimer_H_
# define Call
b
ackTimer_H_
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
#include <list>
#include <list>
#include "Exceptions.h"
#include "Exceptions.h"
...
@@ -45,7 +45,7 @@ namespace UniSetTypes
...
@@ -45,7 +45,7 @@ namespace UniSetTypes
/*! Конструктор позволяющий вывести в сообщении об ошибке дополнительную информацию err */
/*! Конструктор позволяющий вывести в сообщении об ошибке дополнительную информацию err */
LimitTimers
(
const
std
::
string
&
err
)
:
Exception
(
err
){
printException
();
}
LimitTimers
(
const
std
::
string
&
err
)
:
Exception
(
err
){
printException
();
}
};
};
}
;
}
//@}
//@}
// end of UniSetException group
// end of UniSetException group
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
...
@@ -54,9 +54,9 @@ namespace UniSetTypes
...
@@ -54,9 +54,9 @@ namespace UniSetTypes
* \brief Таймер
* \brief Таймер
* \author Pavel Vainerman
* \author Pavel Vainerman
* \par
* \par
* Создает поток, в котором происходит отсчет тактов (10ms). Позволяет заказывать до Call
BackTimer::MAXCallB
ackTimer таймеров.
* Создает поток, в котором происходит отсчет тактов (10ms). Позволяет заказывать до Call
backTimer::MAXCallb
ackTimer таймеров.
* При срабатывании будет вызвана указанная функция с указанием \b Id таймера, который сработал.
* При срабатывании будет вызвана указанная функция с указанием \b Id таймера, который сработал.
* Функция обратного вызова должна удовлетворять шаблону Call
B
ackTimer::Action.
* Функция обратного вызова должна удовлетворять шаблону Call
b
ackTimer::Action.
* Пример создания таймера:
* Пример создания таймера:
*
*
\code
\code
...
@@ -68,29 +68,29 @@ namespace UniSetTypes
...
@@ -68,29 +68,29 @@ namespace UniSetTypes
MyClass* rec = new MyClass();
MyClass* rec = new MyClass();
...
...
Call
BackTimer<MyClass> *timer1 = new CallB
ackTimer<MyClass>(rec);
Call
backTimer<MyClass> *timer1 = new Callb
ackTimer<MyClass>(rec);
timer1->add(1, &MyClass::Time, 1000);
timer1->add(1, &MyClass::Time, 1000);
timer1->add(5, &MyClass::Time, 1200);
timer1->add(5, &MyClass::Time, 1200);
timer1->run();
timer1->run();
\endcode
\endcode
*
*
* \note Каждый экземпляр класса Call
B
ackTimer создает поток, поэтому \b желательно не создавать больше одного экземпляра,
* \note Каждый экземпляр класса Call
b
ackTimer создает поток, поэтому \b желательно не создавать больше одного экземпляра,
* для одного процесса (чтобы не порождать много потоков).
* для одного процесса (чтобы не порождать много потоков).
*/
*/
template
<
class
Caller
>
template
<
class
Caller
>
class
Call
B
ackTimer
class
Call
b
ackTimer
// public PassiveTimer
// public PassiveTimer
{
{
public
:
public
:
/*! Максимальное количество таймеров */
/*! Максимальное количество таймеров */
static
const
int
MAXCall
B
ackTimer
=
20
;
static
const
int
MAXCall
b
ackTimer
=
20
;
/*! прототип функции вызова */
/*! прототип функции вызова */
typedef
void
(
Caller
::*
Action
)(
int
id
);
typedef
void
(
Caller
::*
Action
)(
int
id
);
Call
B
ackTimer
(
Caller
*
r
,
Action
a
);
Call
b
ackTimer
(
Caller
*
r
,
Action
a
);
~
Call
B
ackTimer
();
~
Call
b
ackTimer
();
// Управление таймером
// Управление таймером
void
run
();
/*!< запуск таймера */
void
run
();
/*!< запуск таймера */
...
@@ -108,7 +108,7 @@ class CallBackTimer
...
@@ -108,7 +108,7 @@ class CallBackTimer
protected
:
protected
:
Call
B
ackTimer
();
Call
b
ackTimer
();
void
work
();
void
work
();
void
startTimers
();
void
startTimers
();
...
@@ -116,7 +116,7 @@ class CallBackTimer
...
@@ -116,7 +116,7 @@ class CallBackTimer
private
:
private
:
typedef
Call
B
ackTimer
<
Caller
>
CBT
;
typedef
Call
b
ackTimer
<
Caller
>
CBT
;
friend
class
ThreadCreator
<
CBT
>
;
friend
class
ThreadCreator
<
CBT
>
;
Caller
*
cal
;
Caller
*
cal
;
Action
act
;
Action
act
;
...
@@ -137,7 +137,7 @@ class CallBackTimer
...
@@ -137,7 +137,7 @@ class CallBackTimer
TimersList
lst
;
TimersList
lst
;
// функция-объект для поиска по id
// функция-объект для поиска по id
struct
FindId_eq
:
public
unary_function
<
TimerInfo
,
bool
>
struct
FindId_eq
:
public
std
::
unary_function
<
TimerInfo
,
bool
>
{
{
FindId_eq
(
const
int
id
)
:
id
(
id
){}
FindId_eq
(
const
int
id
)
:
id
(
id
){}
inline
bool
operator
()(
const
TimerInfo
&
ti
)
const
{
return
ti
.
id
==
id
;}
inline
bool
operator
()(
const
TimerInfo
&
ti
)
const
{
return
ti
.
id
==
id
;}
...
@@ -145,5 +145,5 @@ class CallBackTimer
...
@@ -145,5 +145,5 @@ class CallBackTimer
};
};
};
};
#include "Call
B
ackTimer.tcc"
#include "Call
b
ackTimer.tcc"
# endif //Call
B
ackTimer_H_
# endif //Call
b
ackTimer_H_
include/Call
B
ackTimer.tcc
→
include/Call
b
ackTimer.tcc
View file @
a510d139
...
@@ -21,41 +21,41 @@
...
@@ -21,41 +21,41 @@
* \author Pavel Vainerman
* \author Pavel Vainerman
*/
*/
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
# ifndef Call
B
ackTimer_TCC_H_
# ifndef Call
b
ackTimer_TCC_H_
# define Call
B
ackTimer_TCC_H_
# define Call
b
ackTimer_TCC_H_
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
#include <unistd.h>
#include <unistd.h>
#include <sstream>
#include <sstream>
#include "Call
B
ackTimer.h"
#include "Call
b
ackTimer.h"
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller> class Call
B
ackTimer;
template <class Caller> class Call
b
ackTimer;
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
/*! Создание таймера
/*! Создание таймера
\param r - указатель на заказчика
\param r - указатель на заказчика
*/
*/
template <class Caller>
template <class Caller>
Call
BackTimer<Caller>::CallB
ackTimer( Caller* r, Action a ):
Call
backTimer<Caller>::Callb
ackTimer( Caller* r, Action a ):
cal(r),
cal(r),
act(a),
act(a),
terminated(false)
terminated(false)
{
{
thr = new ThreadCreator<Call
BackTimer>(this, &CallB
ackTimer<Caller>::work);
thr = new ThreadCreator<Call
backTimer>(this, &Callb
ackTimer<Caller>::work);
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
Call
BackTimer<Caller>::CallB
ackTimer():
Call
backTimer<Caller>::Callb
ackTimer():
cal(null),
cal(null
ptr
),
terminated(false)
terminated(false)
{
{
thr = new ThreadCreator<Call
BackTimer>(this, &CallB
ackTimer<Caller>::work);
thr = new ThreadCreator<Call
backTimer>(this, &Callb
ackTimer<Caller>::work);
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
Call
BackTimer<Caller>::~CallB
ackTimer()
Call
backTimer<Caller>::~Callb
ackTimer()
{
{
terminate();
terminate();
clearTimers();
clearTimers();
...
@@ -64,12 +64,12 @@ CallBackTimer<Caller>::~CallBackTimer()
...
@@ -64,12 +64,12 @@ CallBackTimer<Caller>::~CallBackTimer()
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::work()
void Call
b
ackTimer<Caller>::work()
{
{
terminated = false;
terminated = false;
while( !terminated )
while( !terminated )
{
{
usleep(UniSetTimer::M
IN_QUANTITY_TIME_MKS);
usleep(UniSetTimer::M
inQuantityTime);
for( typename TimersList::iterator li=lst.begin(); li!=lst.end(); ++li )
for( typename TimersList::iterator li=lst.begin(); li!=lst.end(); ++li )
{
{
...
@@ -84,7 +84,7 @@ void CallBackTimer<Caller>::work()
...
@@ -84,7 +84,7 @@ void CallBackTimer<Caller>::work()
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::run()
void Call
b
ackTimer<Caller>::run()
{
{
if( !terminated )
if( !terminated )
terminate();
terminate();
...
@@ -95,7 +95,7 @@ void CallBackTimer<Caller>::run()
...
@@ -95,7 +95,7 @@ void CallBackTimer<Caller>::run()
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::terminate()
void Call
b
ackTimer<Caller>::terminate()
{
{
// timeAct = 0;
// timeAct = 0;
terminated = true;
terminated = true;
...
@@ -104,12 +104,12 @@ void CallBackTimer<Caller>::terminate()
...
@@ -104,12 +104,12 @@ void CallBackTimer<Caller>::terminate()
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::add( int id, int timeMS )throw(UniSetTypes::LimitTimers)
void Call
b
ackTimer<Caller>::add( int id, int timeMS )throw(UniSetTypes::LimitTimers)
{
{
if( lst.size() >= MAXCall
B
ackTimer )
if( lst.size() >= MAXCall
b
ackTimer )
{
{
ostringstream err;
std::
ostringstream err;
err << "Call
BackTimers: превышено максимальное количество таймеров" << MAXCallBackTimer
;
err << "Call
backTimers: exceeded the maximum number of timers (" << MAXCallbackTimer << ")"
;
throw UniSetTypes::LimitTimers(err.str());
throw UniSetTypes::LimitTimers(err.str());
}
}
...
@@ -121,7 +121,7 @@ void CallBackTimer<Caller>::add( int id, int timeMS )throw(UniSetTypes::LimitTim
...
@@ -121,7 +121,7 @@ void CallBackTimer<Caller>::add( int id, int timeMS )throw(UniSetTypes::LimitTim
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::remove( int id )
void Call
b
ackTimer<Caller>::remove( int id )
{
{
// STL - способ поиска
// STL - способ поиска
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
...
@@ -130,7 +130,7 @@ void CallBackTimer<Caller>::remove( int id )
...
@@ -130,7 +130,7 @@ void CallBackTimer<Caller>::remove( int id )
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::startTimers()
void Call
b
ackTimer<Caller>::startTimers()
{
{
for( typename TimersList::iterator li=lst.begin(); li!=lst.end(); ++li)
for( typename TimersList::iterator li=lst.begin(); li!=lst.end(); ++li)
{
{
...
@@ -139,13 +139,13 @@ void CallBackTimer<Caller>::startTimers()
...
@@ -139,13 +139,13 @@ void CallBackTimer<Caller>::startTimers()
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::clearTimers()
void Call
b
ackTimer<Caller>::clearTimers()
{
{
lst.clear();
lst.clear();
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::reset( int id )
void Call
b
ackTimer<Caller>::reset( int id )
{
{
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() )
if( li!=lst.end() )
...
@@ -153,7 +153,7 @@ void CallBackTimer<Caller>::reset( int id )
...
@@ -153,7 +153,7 @@ void CallBackTimer<Caller>::reset( int id )
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
void Call
B
ackTimer<Caller>::setTiming( int id, int timeMS )
void Call
b
ackTimer<Caller>::setTiming( int id, int timeMS )
{
{
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() )
if( li!=lst.end() )
...
@@ -161,7 +161,7 @@ void CallBackTimer<Caller>::setTiming( int id, int timeMS )
...
@@ -161,7 +161,7 @@ void CallBackTimer<Caller>::setTiming( int id, int timeMS )
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
int Call
B
ackTimer<Caller>::getInterval( int id )
int Call
b
ackTimer<Caller>::getInterval( int id )
{
{
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() )
if( li!=lst.end() )
...
@@ -170,7 +170,7 @@ int CallBackTimer<Caller>::getInterval( int id )
...
@@ -170,7 +170,7 @@ int CallBackTimer<Caller>::getInterval( int id )
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
template <class Caller>
template <class Caller>
int Call
B
ackTimer<Caller>::getCurrent( int id )
int Call
b
ackTimer<Caller>::getCurrent( int id )
{
{
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() )
if( li!=lst.end() )
...
@@ -180,4 +180,4 @@ int CallBackTimer<Caller>::getCurrent( int id )
...
@@ -180,4 +180,4 @@ int CallBackTimer<Caller>::getCurrent( int id )
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
# endif //Call
B
ackTimer_TCC_H_
# endif //Call
b
ackTimer_TCC_H_
tests/Makefile.am
View file @
a510d139
...
@@ -5,9 +5,10 @@
...
@@ -5,9 +5,10 @@
check_PROGRAMS
=
tests tests_with_conf
check_PROGRAMS
=
tests tests_with_conf
#umutex threadtst dlog
#umutex threadtst dlog
tests_SOURCES
=
tests.cc passivetimer.cc hourglass.cc delaytimer.cc unixml.cc sscanf_hex.cc
tests_SOURCES
=
tests.cc passivetimer.cc hourglass.cc delaytimer.cc unixml.cc sscanf_hex.cc
\
tests_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
callbacktimer.cc
tests_CPPFLAGS
=
-I
$(top_builddir)
/include
-I
$(includedir)
/Catch
tests_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
$(SIGC_LIBS)
$(COMCPP_LIBS)
tests_CPPFLAGS
=
-I
$(top_builddir)
/include
-I
$(includedir)
/Catch
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
tests_with_conf_SOURCES
=
tests_with_conf.cc conftest.cc ui.cc
tests_with_conf_SOURCES
=
tests_with_conf.cc conftest.cc ui.cc
tests_with_conf_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
tests_with_conf_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
...
...
tests/callbacktimer.cc
0 → 100644
View file @
a510d139
#include <catch.hpp>
#include "CallbackTimer.h"
#include "UniSetTypes.h"
using
namespace
std
;
class
MyTestClass
{
public
:
MyTestClass
()
:
num1
(
0
),
num2
(
0
),
num3
(
0
){}
~
MyTestClass
(){}
void
Time
(
int
id
)
{
if
(
id
==
1
)
num1
++
;
else
if
(
id
==
2
)
num2
++
;
else
if
(
id
==
3
)
num3
++
;
}
inline
int
getNum1
(){
return
num1
;
}
inline
int
getNum2
(){
return
num2
;
}
inline
int
getNum3
(){
return
num3
;
}
private
:
int
num1
;
int
num2
;
int
num3
;
};
TEST_CASE
(
"CallbackTimer"
,
"[CallbackTimer]"
)
{
SECTION
(
"Basic tests"
)
{
MyTestClass
tc
;
CallbackTimer
<
MyTestClass
>
tmr
(
&
tc
,
&
MyTestClass
::
Time
);
tmr
.
add
(
1
,
50
);
tmr
.
add
(
2
,
150
);
tmr
.
add
(
3
,
300
);
tmr
.
run
();
msleep
(
60
);
REQUIRE
(
tc
.
getNum1
()
==
1
);
REQUIRE
(
tc
.
getNum2
()
==
0
);
REQUIRE
(
tc
.
getNum3
()
==
0
);
msleep
(
110
);
REQUIRE
(
tc
.
getNum1
()
==
3
);
REQUIRE
(
tc
.
getNum2
()
==
1
);
REQUIRE
(
tc
.
getNum3
()
==
0
);
msleep
(
210
);
REQUIRE
(
tc
.
getNum1
()
==
7
);
REQUIRE
(
tc
.
getNum2
()
==
2
);
REQUIRE
(
tc
.
getNum3
()
==
1
);
tmr
.
remove
(
1
);
msleep
(
60
);
REQUIRE
(
tc
.
getNum1
()
==
7
);
tmr
.
terminate
();
REQUIRE
(
tc
.
getNum2
()
==
2
);
REQUIRE
(
tc
.
getNum3
()
==
1
);
}
SECTION
(
"other tests"
)
{
MyTestClass
tc
;
CallbackTimer
<
MyTestClass
>
tmr
(
&
tc
,
&
MyTestClass
::
Time
);
int
i
=
0
;
for
(
;
i
<
tmr
.
MAXCallbackTimer
;
i
++
)
tmr
.
add
(
i
,
100
);
REQUIRE_THROWS_AS
(
tmr
.
add
(
++
i
,
100
),
UniSetTypes
::
LimitTimers
);
}
}
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