Kawe Mazidjatari b3a68ed095 Add EABase, EAThread and DirtySDK to R5sdk
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
2024-04-05 18:29:03 +02:00

173 lines
5.9 KiB
C

/*H********************************************************************************/
/*!
\File time.c
\Description
Test the plat-time functionality.
\Copyright
Copyright (c) 2012 Electronic Arts
\Version 07/12/2012 (jbrookes) First Version
*/
/********************************************************************************H*/
/*** Include files ****************************************************************/
#include <stdlib.h>
#include <string.h>
#include "DirtySDK/platform.h"
#include "libsample/zlib.h"
#include "testermodules.h"
/*** Defines **********************************************************************/
/*** Type Definitions *************************************************************/
typedef struct TimeStrToTimeT
{
char strTime[32];
uint64_t uTime;
TimeToStringConversionTypeE eConvType;
} TimeStrToTimeT;
/*** Variables ********************************************************************/
// Variables
/*** Private Functions ************************************************************/
/*F********************************************************************************/
/*!
\Function _TimeStrToTime
\Description
Execute ds_strtotime/ds_strtotime2 and compare to expected result
\Output
int32_t - 0=success, 1=failed
\Version 02/27/2014 (jbrookes)
*/
/********************************************************************************F*/
static int32_t _TimeStrToTime(const TimeStrToTimeT *pTime, int32_t iTest)
{
uint64_t uEpoch = ds_strtotime2(pTime->strTime, pTime->eConvType);
if (uEpoch != pTime->uTime)
{
ZPrintf("time: ds_strtotime2() test %d failed; got=%qd, expected=%qd\n", uEpoch, pTime->uTime);
}
return(uEpoch != pTime->uTime);
}
/*F********************************************************************************/
/*!
\Function _TimeTestStrToTime
\Description
Test ds_strtotime/ds_strtotime2
\Output
int32_t - number of test result failures
\Version 02/27/2014 (jbrookes)
*/
/********************************************************************************F*/
static int32_t _TimeTestStrToTime(void)
{
static const TimeStrToTimeT _Times[] =
{
{ "Sun, 06 Nov 1994 08:49:37 GMT", 784111777, TIMETOSTRING_CONVERSION_UNKNOWN }, // RFC 822/1123
{ "Sun Nov 6 08:49:37 1994", 784111777, TIMETOSTRING_CONVERSION_UNKNOWN }, // asctime
{ "1994-11-06T08:49:37Z", 784111777, TIMETOSTRING_CONVERSION_ISO_8601 },
{ "941106084937", 784111777, TIMETOSTRING_CONVERSION_ASN1_UTCTIME },
{ "641106084937", 2993186977, TIMETOSTRING_CONVERSION_ASN1_UTCTIME },
{ "701106084937", 26729377, TIMETOSTRING_CONVERSION_ASN1_UTCTIME },
{ "9411060849", 784111740, TIMETOSTRING_CONVERSION_ASN1_UTCTIME },
{ "19941106084937", 784111777, TIMETOSTRING_CONVERSION_ASN1_GENTIME },
{ "19941106084937.123", 784111777, TIMETOSTRING_CONVERSION_ASN1_GENTIME },
{ "20390101000000", 2177452800, TIMETOSTRING_CONVERSION_ASN1_GENTIME },
{ "20501106084937", 2551337377, TIMETOSTRING_CONVERSION_ASN1_GENTIME },
{ "21500621143040", 5695108240, TIMETOSTRING_CONVERSION_ASN1_GENTIME }
};
int32_t iTime, iResult = 0;
for (iResult = 0, iTime = 0; iTime < (int32_t)(sizeof(_Times)/sizeof(_Times[0])); iTime += 1)
{
iResult += _TimeStrToTime(&_Times[iTime], iTime);
}
return(iResult);
}
/*** Public functions *************************************************************/
/*F********************************************************************************/
/*!
\Function CmdTime
\Description
Test the time functions
\Input *argz - environment
\Input argc - standard number of arguments
\Input *argv[] - standard arg list
\Output standard return value
\Version 07/12/2012 (jbrookes)
*/
/********************************************************************************F*/
int32_t CmdTime(ZContext *argz, int32_t argc, char *argv[])
{
char strBuf[20];
struct tm curtime;
uint64_t uTime;
int32_t iZone;
void *pPlatTime = NULL;
int32_t iResult = 0;
// get current time... this is equivalent to time(0)
uTime = ds_timeinsecs();
ZPrintf("time: ds_timeinsecs()=%qd\n", uTime);
// convert to tm time
ds_secstotime(&curtime, uTime);
ZPrintf("time: ds_secstotime()=%d/%d/%d %02d:%02d:%02d\n",
curtime.tm_mon+1, curtime.tm_mday, curtime.tm_year+1900,
curtime.tm_hour, curtime.tm_min, curtime.tm_sec);
// test ISO_8601 conversion
ZPrintf("time: ds_timetostr(ISO_8601)=%s\n", ds_timetostr(&curtime, TIMETOSTRING_CONVERSION_ISO_8601, 1, strBuf, sizeof(strBuf)));
// test RFC_0822 conversion
ZPrintf("time: ds_timetostr(RFC_0822)=%s\n", ds_timetostr(&curtime, TIMETOSTRING_CONVERSION_RFC_0822, 1, strBuf, sizeof(strBuf)));
// get localtime
ds_memclr(&curtime, sizeof(curtime));
ds_localtime(&curtime, uTime);
ZPrintf("time: ds_localtime()=%d/%d/%d %d:%d:%d\n",
curtime.tm_mon+1, curtime.tm_mday, curtime.tm_year+1900,
curtime.tm_hour, curtime.tm_min, curtime.tm_sec);
// timezone (delta between local and GMT time in seconds)
iZone = ds_timezone();
ZPrintf("time: ds_timezone=%ds, %dh\n", iZone, iZone/(60*60));
// test ds_strtotime()
iResult += _TimeTestStrToTime();
ZPrintf("time: %d failed strtotime tests\n", iResult);
if (pPlatTime != NULL)
{
ds_memclr(&curtime, sizeof(curtime));
ds_plattimetotime(&curtime, pPlatTime);
ZPrintf("time: ds_plattimetotime()=%d/%d/%d %d:%d:%d\n",
curtime.tm_mon+1, curtime.tm_mday, curtime.tm_year+1900,
curtime.tm_hour, curtime.tm_min, curtime.tm_sec);
}
return(0);
}