diff --git a/Tests/Conformance/DOIT3 b/Tests/Conformance/DOIT3 index 7bd9246..92debe7 100644 --- a/Tests/Conformance/DOIT3 +++ b/Tests/Conformance/DOIT3 @@ -1,4 +1,5 @@ {1} c89oldfeat.c +{1} c89time.c {1} c95digraph.c {1} c95iso646.c {1} c99fam.c diff --git a/Tests/Conformance/c89time.c b/Tests/Conformance/c89time.c new file mode 100644 index 0000000..e8d42c9 --- /dev/null +++ b/Tests/Conformance/c89time.c @@ -0,0 +1,167 @@ +/* + * Test functions (C89). + */ + +#include +#include +#include +#include +#include + +int main(void) { + clock_t clock_start; + time_t time_start; + struct tm tm1, tm2; + time_t time1, time2; + char buf[20]; + + clock_start = clock(); + time(&time_start); + + tm1.tm_year = 2023 - 1900; + tm1.tm_mon = 1 - 1; + tm1.tm_mday = 5; + tm1.tm_hour = 18; + tm1.tm_min = 25; + tm1.tm_sec = 54; + tm1.tm_isdst = -1; + tm1.tm_wday = 4; + + if (strcmp(asctime(&tm1), "Thu Jan 5 18:25:54 2023\n") != 0) + goto Fail; + + tm1.tm_wday = -12345; + tm1.tm_yday = 12345; + time1 = mktime(&tm1); + if (tm1.tm_wday != 4) + goto Fail; + if (tm1.tm_yday != 4) + goto Fail; + + if (strcmp(ctime(&time1), "Thu Jan 5 18:25:54 2023\n") != 0) + goto Fail; + + if (strcmp(asctime(&tm1), "Thu Jan 5 18:25:54 2023\n") != 0) + goto Fail; + + tm1.tm_year = 1978 - 1900; + tm1.tm_mon = 12 - 1; + tm1.tm_mday = 29; + tm1.tm_hour = 4; + tm1.tm_min = 2; + tm1.tm_sec = 5; + tm1.tm_isdst = -1; + tm1.tm_wday = 5; + + if (strcmp(asctime(&tm1), "Fri Dec 29 04:02:05 1978\n") != 0) + goto Fail; + + tm1.tm_wday = -12345; + tm1.tm_yday = 12345; + time1 = mktime(&tm1); + if (tm1.tm_wday != 5) + goto Fail; + if (tm1.tm_yday != 362) + goto Fail; + + if (strcmp(asctime(&tm1), "Fri Dec 29 04:02:05 1978\n") != 0) + goto Fail; + + if (strcmp(ctime(&time1), "Fri Dec 29 04:02:05 1978\n") != 0) + goto Fail; + + tm1.tm_year = 2001 - 1900 - 2730 - 3; + tm1.tm_mon = 32760; + tm1.tm_mday = 31; + tm1.tm_hour = 26280; + tm1.tm_min = -20; + tm1.tm_sec = 32400; + tm1.tm_isdst = -1; + tm1.tm_wday = -12345; + time1 = mktime(&tm1); + + if (tm1.tm_yday != 29) + goto Fail; + + if (strcmp(ctime(&time1), "Tue Jan 30 08:40:00 2001\n") != 0) + goto Fail; + + if (strcmp(asctime(localtime(&time1)), "Tue Jan 30 08:40:00 2001\n") != 0) + goto Fail; + + tm1.tm_year = 2001 - 1900 + 2730 + 3; + tm1.tm_mon = -32760; + tm1.tm_mday = 31 - 366; + tm1.tm_hour = -26280; + tm1.tm_min = +200; + tm1.tm_sec = 32400; + tm1.tm_isdst = -1; + tm1.tm_wday = -12345; + time1 = mktime(&tm1); + + if (tm1.tm_yday != 30) + goto Fail; + + if (strcmp(asctime(localtime(&time1)), "Mon Jan 31 12:20:00 2000\n") != 0) + goto Fail; + + if (strcmp(ctime(&time1), "Mon Jan 31 12:20:00 2000\n") != 0) + goto Fail; + + if (strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm1) != 19) + goto Fail; + if (strcmp(buf, "2000-01-31 12:20:00") != 0) + goto Fail; + + tm1.tm_sec += 100; + time2 = mktime(&tm1); + if (difftime(time2, time1) != 100) + goto Fail; + + tm2 = *gmtime(&time1); + if (tm2.tm_year != tm1.tm_year) + goto Fail; + if (tm2.tm_mon != tm1.tm_mon) + goto Fail; + if (abs(tm2.tm_mday - tm1.tm_mday) > 1) + goto Fail; + + /* Test limits of time_t in ORCA/C */ + + tm1.tm_year = 1969 - 1900; + tm1.tm_mon = 11 - 1; + tm1.tm_mday = 13; + tm1.tm_hour = 0; + tm1.tm_min = 0; + tm1.tm_sec = 0; + tm1.tm_isdst = -1; + tm1.tm_wday = -12345; + time1 = mktime(&tm1); + + if (strcmp(ctime(&time1), "Thu Nov 13 00:00:00 1969\n") != 0) + goto Fail; + + tm1.tm_year = 2105 - 1900; + tm1.tm_mon = 12 - 1; + tm1.tm_mday = 20; + tm1.tm_hour = 6; + tm1.tm_min = 28; + tm1.tm_sec = 15; + tm1.tm_isdst = -1; + tm1.tm_wday = -12345; + time1 = mktime(&tm1); + + if (strcmp(ctime(&time1), "Sun Dec 20 06:28:15 2105\n") != 0) + goto Fail; + + if (clock() - clock_start < 0) + goto Fail; + if (difftime(time(NULL), time_start) < 0) + goto Fail; + + printf ("Passed Conformance Test c89time\n"); + return 0; + +Fail: + printf ("Failed Conformance Test c89time\n"); +}