60 lines
1.1 KiB
C
60 lines
1.1 KiB
C
|
#include <limits.h>
|
||
|
#include <stdio.h>
|
||
|
#include <time.h>
|
||
|
|
||
|
|
||
|
static const struct
|
||
|
{
|
||
|
const char *fmt;
|
||
|
long int gmtoff;
|
||
|
} tests[] =
|
||
|
{
|
||
|
{ "1113472456 +1000", 36000 },
|
||
|
{ "1113472456 -1000", -36000 },
|
||
|
{ "1113472456 +10", 36000 },
|
||
|
{ "1113472456 -10", -36000 },
|
||
|
{ "1113472456 +1030", 37800 },
|
||
|
{ "1113472456 -1030", -37800 },
|
||
|
{ "1113472456 +0030", 1800 },
|
||
|
{ "1113472456 -0030", -1800 },
|
||
|
{ "1113472456 -1330", LONG_MAX },
|
||
|
{ "1113472456 +1330", LONG_MAX },
|
||
|
{ "1113472456 -1060", LONG_MAX },
|
||
|
{ "1113472456 +1060", LONG_MAX },
|
||
|
{ "1113472456 1030", LONG_MAX },
|
||
|
};
|
||
|
#define ntests (sizeof (tests) / sizeof (tests[0]))
|
||
|
|
||
|
|
||
|
int
|
||
|
main (void)
|
||
|
{
|
||
|
int result = 0;
|
||
|
|
||
|
for (int i = 0; i < ntests; ++i)
|
||
|
{
|
||
|
struct tm tm;
|
||
|
|
||
|
if (strptime (tests[i].fmt, "%s %z", &tm) == NULL)
|
||
|
{
|
||
|
if (tests[i].gmtoff != LONG_MAX)
|
||
|
{
|
||
|
printf ("round %d: strptime unexpectedly failed\n", i);
|
||
|
result = 1;
|
||
|
}
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (tm.tm_gmtoff != tests[i].gmtoff)
|
||
|
{
|
||
|
printf ("round %d: tm_gmtoff is %ld\n", i, (long int) tm.tm_gmtoff);
|
||
|
result = 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (result == 0)
|
||
|
puts ("all OK");
|
||
|
|
||
|
return 0;
|
||
|
}
|