Files
pvData/testApp/misc/testTimeStamp.cpp
2013-11-25 15:46:00 -05:00

137 lines
4.1 KiB
C++

/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* EPICS pvData is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
/*
* testTimeStamp.cpp
*
* Created on: 2010.11
* Author: Marty Kraimer
*/
#include <cstddef>
#include <cstdlib>
#include <cstddef>
#include <string>
#include <cstring>
#include <cstdio>
#include <ctime>
#include <list>
#include <epicsUnitTest.h>
#include <testMain.h>
#include <pv/timeStamp.h>
using namespace epics::pvData;
static bool debug = false;
void testTimeStamp()
{
testOk1(nanoSecPerSec==1000000000);
TimeStamp current;
current.getCurrent();
printf("current %lli %i milliSec %lli\n",
(long long)current.getSecondsPastEpoch(),
current.getNanoSeconds(),
(long long)current.getMilliseconds());
time_t tt;
current.toTime_t(tt);
struct tm ctm;
memcpy(&ctm,localtime(&tt),sizeof(struct tm));
printf(
"%4.4d.%2.2d.%2.2d %2.2d:%2.2d:%2.2d %d isDst %s\n",
ctm.tm_year+1900,ctm.tm_mon + 1,ctm.tm_mday,
ctm.tm_hour,ctm.tm_min,ctm.tm_sec,
current.getNanoSeconds(),
(ctm.tm_isdst==0) ? "false" : "true");
tt = time(&tt);
current.fromTime_t(tt);
printf("fromTime_t\ncurrent %lli %i milliSec %lli\n",
(long long)current.getSecondsPastEpoch(),
current.getNanoSeconds(),
(long long)current.getMilliseconds());
current.toTime_t(tt);
memcpy(&ctm,localtime(&tt),sizeof(struct tm));
printf(
"%4.4d.%2.2d.%2.2d %2.2d:%2.2d:%2.2d %d isDst %s\n",
ctm.tm_year+1900,ctm.tm_mon + 1,ctm.tm_mday,
ctm.tm_hour,ctm.tm_min,ctm.tm_sec,
current.getNanoSeconds(),
(ctm.tm_isdst==0) ? "false" : "true");
TimeStamp right;
TimeStamp left;
right.put(current.getSecondsPastEpoch(),current.getNanoSeconds());
left.put(current.getSecondsPastEpoch(),current.getNanoSeconds());
double diff;
diff = TimeStamp::diff(left,right);
if(debug) printf("diff %e\n",diff);
testOk1(diff==0.0);
testOk1((left==right));
testOk1(!(left!=right));
testOk1((left<=right));
testOk1(!(left<right));
testOk1((left>=right));
testOk1(!(left>right));
left.put(current.getSecondsPastEpoch()+1,current.getNanoSeconds());
diff = TimeStamp::diff(left,right);
if(debug) printf("diff %e\n",diff);
testOk1(diff==1.0);
testOk1(!(left==right));
testOk1((left!=right));
testOk1(!(left<=right));
testOk1(!(left<right));
testOk1((left>=right));
testOk1((left>right));
left.put(current.getSecondsPastEpoch()-1,current.getNanoSeconds());
diff = TimeStamp::diff(left,right);
if(debug) printf("diff %e\n",diff);
testOk1(diff==-1.0);
testOk1(!(left==right));
testOk1((left!=right));
testOk1((left<=right));
testOk1((left<right));
testOk1(!(left>=right));
testOk1(!(left>right));
left.put(current.getSecondsPastEpoch(),current.getNanoSeconds()-nanoSecPerSec);
diff = TimeStamp::diff(left,right);
if(debug) printf("diff %e\n",diff);
testOk1(diff==-1.0);
testOk1(!(left==right));
testOk1((left!=right));
testOk1((left<=right));
testOk1((left<right));
testOk1(!(left>=right));
testOk1(!(left>right));
left.put(current.getSecondsPastEpoch(),current.getNanoSeconds()-1);
diff = TimeStamp::diff(left,right);
if(debug) printf("diff %e\n",diff);
testOk1(diff<0.0);
testOk1(!(left==right));
testOk1((left!=right));
testOk1((left<=right));
testOk1((left<right));
testOk1(!(left>=right));
testOk1(!(left>right));
left.put(current.getSecondsPastEpoch(),current.getNanoSeconds());
left += .1;
diff = TimeStamp::diff(left,right);
if(debug) printf("diff %e\n",diff);
left.put(current.getSecondsPastEpoch(),current.getNanoSeconds());
int64 inc = -1;
left += inc;
diff = TimeStamp::diff(left,right);
testOk1(diff==-1.0);
printf("PASSED\n");
}
MAIN(testTimeStamp)
{
testPlan(37);
testDiag("Tests timeStamp");
testTimeStamp();
return testDone();
}