#include <config.h>
#include <stdio.h>
#include <sys/time.h>
#include <ntp_fp.h>
#include <timevalops.h>
#define MICROSECONDS 1000000
static int verbose = 1; static int exit_on_err = 0;
static
int do_test( struct timeval timetv, struct timeval tvlast )
{
struct timeval tvdiff_old;
struct timeval tvdiff_new;
int cond_old;
int cond_new;
int failed;
cond_old = 0;
cond_new = 0;
tvdiff_old = abs_tval(sub_tval(timetv, tvlast));
if (tvdiff_old.tv_sec > 0) {
cond_old = 1;
}
tvdiff_new = sub_tval(timetv, tvlast);
if (tvdiff_new.tv_sec != 0) {
cond_new = 1;
}
failed = cond_new != cond_old;
if ( failed || verbose )
printf( "timetv %lli|%07li, tvlast %lli|%07li: tvdiff_old: %lli|%07li -> %i, tvdiff_new: %lli|%07li -> %i, same cond: %s\n",
(long long) timetv.tv_sec, timetv.tv_usec,
(long long) tvlast.tv_sec, tvlast.tv_usec,
(long long) tvdiff_old.tv_sec, tvdiff_old.tv_usec, cond_old,
(long long) tvdiff_new.tv_sec, tvdiff_new.tv_usec, cond_new,
failed ? "NO <<" : "yes" );
return failed ? -1 : 0;
}
static
int test_loop( long long start_sec, long start_usec,
long long stop_sec, long stop_usec,
long long step_sec, long step_usec )
{
struct timeval timetv;
struct timeval tvlast;
for ( timetv.tv_sec = start_sec; timetv.tv_sec <= stop_sec; timetv.tv_sec += step_sec )
for ( timetv.tv_usec = start_usec; timetv.tv_usec <= stop_usec; timetv.tv_usec += step_usec )
for ( tvlast.tv_sec = start_sec; tvlast.tv_sec <= stop_sec; tvlast.tv_sec += step_sec )
for ( tvlast.tv_usec = start_usec; tvlast.tv_usec <= stop_usec; tvlast.tv_usec += step_usec )
{
int rc = do_test( timetv, tvlast );
if (rc < 0 && exit_on_err )
return rc;
}
return 0;
}
int main2( void )
{
test_loop( 0, 0, 1, MICROSECONDS, 1, MICROSECONDS / 10 );
return 0;
}