aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/runner.py14
-rw-r--r--tests/time/output.txt38
-rw-r--r--tests/time/src.c106
3 files changed, 154 insertions, 4 deletions
diff --git a/tests/runner.py b/tests/runner.py
index 85a27a32..88a79c73 100644
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -1640,6 +1640,12 @@ if 'benchmark' not in sys.argv:
'''
self.do_test(src, '*1,2,3,5,5,6*\n*stdin==0:0*\n*%*\n*5*\n*66.0*\n*cleaned*')
+ def test_time(self):
+ src = open(path_from_root('tests', 'time', 'src.c'), 'r').read()
+ expected = open(path_from_root('tests', 'time', 'output.txt'), 'r').read()
+ self.do_test(src, expected)
+
+
def test_statics(self):
# static initializers save i16 but load i8 for some reason
global COMPILER_TEST_OPTS; COMPILER_TEST_OPTS = ['-g']
@@ -1825,7 +1831,7 @@ if 'benchmark' not in sys.argv:
filename = os.path.join(dirname, 'liblib.cpp')
BUILD_AS_SHARED_LIB = 1
self.build(lib_src, dirname, filename)
- shutil.move(filename + '.o.js', os.path.join(dirname, 'liblib.so.js'))
+ shutil.move(filename + '.o.js', os.path.join(dirname, 'liblib.so'))
src = '''
#include <cstdio>
@@ -1870,7 +1876,7 @@ if 'benchmark' not in sys.argv:
BUILD_AS_SHARED_LIB = 1
EXPORTED_FUNCTIONS = ['__Z7get_cmpv']
self.build(lib_src, dirname, filename)
- shutil.move(filename + '.o.js', os.path.join(dirname, 'liblib.so.js'))
+ shutil.move(filename + '.o.js', os.path.join(dirname, 'liblib.so'))
src = '''
#include <stdio.h>
@@ -1960,7 +1966,7 @@ if 'benchmark' not in sys.argv:
EXPORTED_FUNCTIONS = ['__Z4funciPFvvE']
EXPORTED_GLOBALS = ['_global']
self.build(lib_src, dirname, filename)
- shutil.move(filename + '.o.js', os.path.join(dirname, 'liblib.so.js'))
+ shutil.move(filename + '.o.js', os.path.join(dirname, 'liblib.so'))
src = '''
#include <stdio.h>
@@ -2477,7 +2483,7 @@ if 'benchmark' not in sys.argv:
global EXPORTED_FUNCTIONS; EXPORTED_FUNCTIONS = ['_main', '_PyRun_SimpleStringFlags'] # for the demo
self.do_ll_test(path_from_root('tests', 'python', 'python.ll'),
- 'hello python world!\n[0, 2, 4, 6]\n5\n22\n5.470',
+ 'hello python world!\n[0, 2, 4, 6]\n5\n22\n5.470000',
args=['-S', '-c' '''print "hello python world!"; print [x*2 for x in range(4)]; t=2; print 10-3-t; print (lambda x: x*2)(11); print '%f' % 5.47'''])
### Test cases in separate files
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;
+}