diff options
author | max99x <max99x@gmail.com> | 2011-07-03 07:36:10 +0300 |
---|---|---|
committer | max99x <max99x@gmail.com> | 2011-07-03 07:36:10 +0300 |
commit | 48a2a87ebac0836508b85bfe82be24f325487a54 (patch) | |
tree | 68cc988942cd39e946336b5864e46069852eef1e /tests/time | |
parent | 5356a8857b4db69b32fbae4c678c3d20235f5fb2 (diff) |
Implemented a large part of <time.h>.
Diffstat (limited to 'tests/time')
-rw-r--r-- | tests/time/output.txt | 38 | ||||
-rw-r--r-- | tests/time/src.c | 106 |
2 files changed, 144 insertions, 0 deletions
diff --git a/tests/time/output.txt b/tests/time/output.txt new file mode 100644 index 00000000..c8f31001 --- /dev/null +++ b/tests/time/output.txt @@ -0,0 +1,38 @@ +stime: -1 +tzname[0] set: 1 +tzname[1] set: 1 +sec: 43 +min: 22 +hour: 3 +day: 25 +mon: 11 +year: 102 +wday: 3 +yday: 358 +dst: 0 +off: 0 +zone: GMT +timegm <-> gmtime: 1 +old year: 102 +new year: 70 +old year again: 102 +localtime timezone: 1 +localtime daylight: 1 +localtime tzname: 1 +localtime <-> mktime: 1 +old year: 102 +new year: 70 +old year again: 102 +time: 1 +difftime+: 268848637.000000 +difftime-: -268848637.000000 +1854 days: 365 +2000 days: 366 +2001 days: 365 +2004 days: 366 +asctime: Wed Dec 25 05:22:43 2002 +old asctime: Wed Dec 25 05:22:43 2002 +new asctime_r: Sat Jul 2 22:33:20 2011 +old asctime again: Wed Dec 25 05:22:43 2002 +clock: 0 +ctime: 0 diff --git a/tests/time/src.c b/tests/time/src.c new file mode 100644 index 00000000..df9ad264 --- /dev/null +++ b/tests/time/src.c @@ -0,0 +1,106 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <string.h> + +int main() { + time_t xmas2002 = 1040786563ll; + struct tm* tm_ptr; + + // Make sure stime() always fails. + printf("stime: %d\n", stime(&xmas2002)); + + // Verify that tzname sets *something*. + tzset(); + printf("tzname[0] set: %d\n", strlen(tzname[0]) >= 3); + printf("tzname[1] set: %d\n", strlen(tzname[1]) >= 3); + + // Verify gmtime() creates correct struct. + tm_ptr = gmtime(&xmas2002); + printf("sec: %d\n", tm_ptr->tm_sec); + printf("min: %d\n", tm_ptr->tm_min); + printf("hour: %d\n", tm_ptr->tm_hour); + printf("day: %d\n", tm_ptr->tm_mday); + printf("mon: %d\n", tm_ptr->tm_mon); + printf("year: %d\n", tm_ptr->tm_year); + printf("wday: %d\n", tm_ptr->tm_wday); + printf("yday: %d\n", tm_ptr->tm_yday); + printf("dst: %d\n", tm_ptr->tm_isdst); + printf("off: %d\n", tm_ptr->tm_gmtoff); + printf("zone: %s\n", tm_ptr->tm_zone); + + // Verify timegm() reverses gmtime. + printf("timegm <-> gmtime: %d\n", timegm(tm_ptr) == xmas2002); + + // Verify gmtime_r() doesn't clobber static data. + time_t t1 = 0; + struct tm tm1; + gmtime_r(&t1, &tm1); + printf("old year: %d\n", tm_ptr->tm_year); + printf("new year: %d\n", tm1.tm_year); + gmtime(&xmas2002); + printf("old year again: %d\n", tm_ptr->tm_year); + + // Verify localtime() picks up timezone data. + time_t t2 = xmas2002 - 60 * 60 * 24 * 30 * 6; + tm_ptr = localtime(&t2); + printf("localtime timezone: %d\n", (timezone + tm_ptr->tm_isdst * 60 * 60 == + -tm_ptr->tm_gmtoff)); + printf("localtime daylight: %d\n", daylight == tm_ptr->tm_isdst); + printf("localtime tzname: %d\n", (!strcmp(tzname[0], tm_ptr->tm_zone) || + !strcmp(tzname[1], tm_ptr->tm_zone))); + + // Verify localtime() and mktime() reverse each other. + printf("localtime <-> mktime: %d\n", mktime(localtime(&xmas2002)) == xmas2002); + + // Verify localtime_r() doesn't clobber static data. + time_t t3 = 0; + struct tm tm2; + localtime_r(&t3, &tm2); + printf("old year: %d\n", tm_ptr->tm_year); + printf("new year: %d\n", tm2.tm_year); + localtime(&xmas2002); + printf("old year again: %d\n", tm_ptr->tm_year); + + // Verify time() returns reasonable value (between 2011 and 2030). + time_t t4 = 0; + time(&t4); + printf("time: %d\n", t4 > 1309635200ll && t4 < 1893362400ll); + + // Verify difftime() calculates accurate time difference. + time_t t5 = 1309635200ll; + printf("difftime+: %lf\n", difftime(t5, xmas2002)); + printf("difftime-: %lf\n", difftime(xmas2002, t5)); + + // Verify dysize() knows its leap years. + printf("1854 days: %d\n", dysize(1854)); + printf("2000 days: %d\n", dysize(2000)); + printf("2001 days: %d\n", dysize(2001)); + printf("2004 days: %d\n", dysize(2004)); + + // Verify asctime() formatting(). + printf("asctime: %s", asctime(localtime(&xmas2002))); + + // Verify asctime_r() doesn't clobber static data. + time_t t6 = 1309635200ll; + tm_ptr = localtime(&xmas2002); + char* formatted = asctime(tm_ptr); + char buffer[32]; + asctime_r(localtime(&t6), buffer); + printf("old asctime: %s", formatted); + printf("new asctime_r: %s", buffer); + asctime_r(tm_ptr, buffer); + printf("old asctime again: %s", formatted); + + // Verify that clock() is initially 0 and doesn't crash. + printf("clock: %d\n", clock()); + + // Verify that ctime_r(x, buf) is equivalent to asctime_r(localtime(x), buf2). + time_t t7 = time(0); + char buffer2[30]; + char buffer3[30]; + printf("ctime: %d\n", strcmp(ctime_r(&t7, buffer2), + asctime_r(localtime(&t7), buffer3))); + + return 0; +} |