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 @@
* \author Pavel Vainerman
*/
//----------------------------------------------------------------------------
# ifndef Call
B
ackTimer_H_
# define Call
B
ackTimer_H_
# ifndef Call
b
ackTimer_H_
# define Call
b
ackTimer_H_
//----------------------------------------------------------------------------
#include <list>
#include "Exceptions.h"
...
...
@@ -45,7 +45,7 @@ namespace UniSetTypes
/*! Конструктор позволяющий вывести в сообщении об ошибке дополнительную информацию err */
LimitTimers
(
const
std
::
string
&
err
)
:
Exception
(
err
){
printException
();
}
};
}
;
}
//@}
// end of UniSetException group
//----------------------------------------------------------------------------------------
...
...
@@ -54,9 +54,9 @@ namespace UniSetTypes
* \brief Таймер
* \author Pavel Vainerman
* \par
* Создает поток, в котором происходит отсчет тактов (10ms). Позволяет заказывать до Call
BackTimer::MAXCallB
ackTimer таймеров.
* Создает поток, в котором происходит отсчет тактов (10ms). Позволяет заказывать до Call
backTimer::MAXCallb
ackTimer таймеров.
* При срабатывании будет вызвана указанная функция с указанием \b Id таймера, который сработал.
* Функция обратного вызова должна удовлетворять шаблону Call
B
ackTimer::Action.
* Функция обратного вызова должна удовлетворять шаблону Call
b
ackTimer::Action.
* Пример создания таймера:
*
\code
...
...
@@ -68,29 +68,29 @@ namespace UniSetTypes
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(5, &MyClass::Time, 1200);
timer1->run();
\endcode
*
* \note Каждый экземпляр класса Call
B
ackTimer создает поток, поэтому \b желательно не создавать больше одного экземпляра,
* \note Каждый экземпляр класса Call
b
ackTimer создает поток, поэтому \b желательно не создавать больше одного экземпляра,
* для одного процесса (чтобы не порождать много потоков).
*/
template
<
class
Caller
>
class
Call
B
ackTimer
class
Call
b
ackTimer
// public PassiveTimer
{
public
:
/*! Максимальное количество таймеров */
static
const
int
MAXCall
B
ackTimer
=
20
;
static
const
int
MAXCall
b
ackTimer
=
20
;
/*! прототип функции вызова */
typedef
void
(
Caller
::*
Action
)(
int
id
);
Call
B
ackTimer
(
Caller
*
r
,
Action
a
);
~
Call
B
ackTimer
();
Call
b
ackTimer
(
Caller
*
r
,
Action
a
);
~
Call
b
ackTimer
();
// Управление таймером
void
run
();
/*!< запуск таймера */
...
...
@@ -108,7 +108,7 @@ class CallBackTimer
protected
:
Call
B
ackTimer
();
Call
b
ackTimer
();
void
work
();
void
startTimers
();
...
...
@@ -116,7 +116,7 @@ class CallBackTimer
private
:
typedef
Call
B
ackTimer
<
Caller
>
CBT
;
typedef
Call
b
ackTimer
<
Caller
>
CBT
;
friend
class
ThreadCreator
<
CBT
>
;
Caller
*
cal
;
Action
act
;
...
...
@@ -137,7 +137,7 @@ class CallBackTimer
TimersList
lst
;
// функция-объект для поиска по 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
){}
inline
bool
operator
()(
const
TimerInfo
&
ti
)
const
{
return
ti
.
id
==
id
;}
...
...
@@ -145,5 +145,5 @@ class CallBackTimer
};
};
#include "Call
B
ackTimer.tcc"
# endif //Call
B
ackTimer_H_
#include "Call
b
ackTimer.tcc"
# endif //Call
b
ackTimer_H_
include/Call
B
ackTimer.tcc
→
include/Call
b
ackTimer.tcc
View file @
a510d139
...
...
@@ -21,41 +21,41 @@
* \author Pavel Vainerman
*/
// --------------------------------------------------------------------------
# ifndef Call
B
ackTimer_TCC_H_
# define Call
B
ackTimer_TCC_H_
# ifndef Call
b
ackTimer_TCC_H_
# define Call
b
ackTimer_TCC_H_
// --------------------------------------------------------------------------
#include <unistd.h>
#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 - указатель на заказчика
*/
template <class Caller>
Call
BackTimer<Caller>::CallB
ackTimer( Caller* r, Action a ):
Call
backTimer<Caller>::Callb
ackTimer( Caller* r, Action a ):
cal(r),
act(a),
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>
Call
BackTimer<Caller>::CallB
ackTimer():
cal(null),
Call
backTimer<Caller>::Callb
ackTimer():
cal(null
ptr
),
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>
Call
BackTimer<Caller>::~CallB
ackTimer()
Call
backTimer<Caller>::~Callb
ackTimer()
{
terminate();
clearTimers();
...
...
@@ -64,12 +64,12 @@ CallBackTimer<Caller>::~CallBackTimer()
// ------------------------------------------------------------------------------------------
template <class Caller>
void Call
B
ackTimer<Caller>::work()
void Call
b
ackTimer<Caller>::work()
{
terminated = false;
while( !terminated )
{
usleep(UniSetTimer::M
IN_QUANTITY_TIME_MKS);
usleep(UniSetTimer::M
inQuantityTime);
for( typename TimersList::iterator li=lst.begin(); li!=lst.end(); ++li )
{
...
...
@@ -84,7 +84,7 @@ void CallBackTimer<Caller>::work()
}
// ------------------------------------------------------------------------------------------
template <class Caller>
void Call
B
ackTimer<Caller>::run()
void Call
b
ackTimer<Caller>::run()
{
if( !terminated )
terminate();
...
...
@@ -95,7 +95,7 @@ void CallBackTimer<Caller>::run()
}
// ------------------------------------------------------------------------------------------
template <class Caller>
void Call
B
ackTimer<Caller>::terminate()
void Call
b
ackTimer<Caller>::terminate()
{
// timeAct = 0;
terminated = true;
...
...
@@ -104,12 +104,12 @@ void CallBackTimer<Caller>::terminate()
// ------------------------------------------------------------------------------------------
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;
err << "Call
BackTimers: превышено максимальное количество таймеров" << MAXCallBackTimer
;
std::
ostringstream err;
err << "Call
backTimers: exceeded the maximum number of timers (" << MAXCallbackTimer << ")"
;
throw UniSetTypes::LimitTimers(err.str());
}
...
...
@@ -121,7 +121,7 @@ void CallBackTimer<Caller>::add( int id, int timeMS )throw(UniSetTypes::LimitTim
// ------------------------------------------------------------------------------------------
template <class Caller>
void Call
B
ackTimer<Caller>::remove( int id )
void Call
b
ackTimer<Caller>::remove( int id )
{
// STL - способ поиска
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
...
...
@@ -130,7 +130,7 @@ void CallBackTimer<Caller>::remove( int id )
}
// ------------------------------------------------------------------------------------------
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)
{
...
...
@@ -139,13 +139,13 @@ void CallBackTimer<Caller>::startTimers()
}
// ------------------------------------------------------------------------------------------
template <class Caller>
void Call
B
ackTimer<Caller>::clearTimers()
void Call
b
ackTimer<Caller>::clearTimers()
{
lst.clear();
}
// ------------------------------------------------------------------------------------------
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));
if( li!=lst.end() )
...
...
@@ -153,7 +153,7 @@ void CallBackTimer<Caller>::reset( int id )
}
// ------------------------------------------------------------------------------------------
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));
if( li!=lst.end() )
...
...
@@ -161,7 +161,7 @@ void CallBackTimer<Caller>::setTiming( int id, int timeMS )
}
// ------------------------------------------------------------------------------------------
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));
if( li!=lst.end() )
...
...
@@ -170,7 +170,7 @@ int CallBackTimer<Caller>::getInterval( int id )
}
// ------------------------------------------------------------------------------------------
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));
if( li!=lst.end() )
...
...
@@ -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 @@
check_PROGRAMS
=
tests tests_with_conf
#umutex threadtst dlog
tests_SOURCES
=
tests.cc passivetimer.cc hourglass.cc delaytimer.cc unixml.cc sscanf_hex.cc
tests_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
tests_CPPFLAGS
=
-I
$(top_builddir)
/include
-I
$(includedir)
/Catch
tests_SOURCES
=
tests.cc passivetimer.cc hourglass.cc delaytimer.cc unixml.cc sscanf_hex.cc
\
callbacktimer.cc
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_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