aboutsummaryrefslogtreecommitdiff
path: root/tests/time
diff options
context:
space:
mode:
authormax99x <max99x@gmail.com>2011-07-03 07:36:10 +0300
committermax99x <max99x@gmail.com>2011-07-03 07:36:10 +0300
commit48a2a87ebac0836508b85bfe82be24f325487a54 (patch)
tree68cc988942cd39e946336b5864e46069852eef1e /tests/time
parent5356a8857b4db69b32fbae4c678c3d20235f5fb2 (diff)
Implemented a large part of <time.h>.
Diffstat (limited to 'tests/time')
-rw-r--r--tests/time/output.txt38
-rw-r--r--tests/time/src.c106
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;
+}