reSIProcate/stack  9694
Functions
testTimer.cxx File Reference
#include <iostream>
#include "resip/stack/TransactionMessage.hxx"
#include "resip/stack/TimerQueue.hxx"
#include "resip/stack/TuSelector.hxx"
#include "rutil/Fifo.hxx"
#include "rutil/TimeLimitFifo.hxx"
#include <unistd.h>
Include dependency graph for testTimer.cxx:

Go to the source code of this file.

Functions

bool isNear (int value, int reference, int epsilon=250)
int main ()

Function Documentation

bool isNear ( int  value,
int  reference,
int  epsilon = 250 
)

Definition at line 22 of file testTimer.cxx.

{
   int diff = ::abs(value-reference);
   return (diff < epsilon);
}
int main ( void  )

Definition at line 30 of file testTimer.cxx.

References resip::TransactionTimerQueue::add(), isNear(), resip::TimerQueue< T >::msTillNextTimer(), resip::TimerQueue< T >::process(), resip::AbstractFifo< T >::size(), and resip::Timer::TimerA.

{

   TimeLimitFifo<Message> f(0, 0);
   Fifo<TimerMessage> r;
   
   TransactionTimerQueue timer(r);
   TimeLimitTimerQueue timer2(f);

   cerr << "Before Fifo size: " << f.size() << endl;
   assert(f.size() == 0);
   cerr << "next timer = " << timer.msTillNextTimer() << endl;
   assert(timer.msTillNextTimer() == INT_MAX);

   // throw a few events in the queue
   timer.add(Timer::TimerA, "first", 1000);
   cerr << "next timer will fire in " << timer.msTillNextTimer() << "ms" << endl;
   assert(isNear(timer.msTillNextTimer(), 1000));
   timer.add(Timer::TimerA, "second", 2000);
   assert(isNear(timer.msTillNextTimer(), 1000));
   timer.add(Timer::TimerA, "third", 4000);
   assert(isNear(timer.msTillNextTimer(), 1000));
   timer.add(Timer::TimerA, "fourth", 8000);
   assert(isNear(timer.msTillNextTimer(), 1000));
   timer.add(Timer::TimerA, "fifth", 16000);
   assert(isNear(timer.msTillNextTimer(), 1000));

   cerr << timer;
   assert(r.size() == 0);
   assert(timer.size() == 5);
   
   timer.process();

   assert(r.size() == 0);
   assert(timer.size() == 5);

   cerr << timer;
   sleep(1);
   cerr << timer;
   timer.process();
   
   cerr << timer;
   assert(r.size() == 1);
   assert(timer.size() == 4);


   cerr << "next timer will fire in " << timer.msTillNextTimer() << "ms" << endl;
   timer.process();
   cerr << "next timer will fire in " << timer.msTillNextTimer() << "ms" << endl;
   cerr << "timer queue size=" << timer.size() << endl;
   cerr << "fired event queue size=" << r.size() << endl;
   assert(r.size() == 1);
   timer.process();   
   assert(r.size() == 1);

   sleep(1);
   timer.process();
   assert(r.size() == 2);
   timer.process();   
   assert(r.size() == 2);

   sleep(2);
   timer.process();
   assert(r.size() == 3);
   timer.process();   
   assert(r.size() == 3);

   sleep(4);
   timer.process();
   assert(r.size() == 4);
   timer.process();   
   assert(r.size() == 4);


   cerr << "next timer will fire in " << timer.msTillNextTimer() << "ms" << endl;
   assert(isNear(timer.msTillNextTimer(), 8000));

   sleep(8);
   timer.process();
   cerr << timer;
   
   assert(r.size() == 5);
   timer.process();   
   assert(r.size() == 5);

   sleep(1);
   timer.process();
   assert(r.size() == 5);
   timer.process();   
   assert(r.size() == 5);

   cerr << "All OK" << endl;
   return 0;
}

Here is the call graph for this function: