Files
RedBear-OS/tests/time/timegm.c
T
Red Bear OS 1b3e94a20d Red Bear OS relibc baseline
From release 0.1.0 pre-patched archive.
This includes all Red Bear modifications previously maintained
as patches in local/patches/relibc/.
2026-06-27 09:19:26 +03:00

50 lines
1.6 KiB
C

#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main(void) {
setenv("TZ", "UTC", 1);
tzset();
struct {
time_t timestamp;
const char *expected_asctime;
} test_cases[] = {
{0, "Thu Jan 1 00:00:00 1970\n"},
{5097600, "Sun Mar 1 00:00:00 1970\n"},
{31535999, "Thu Dec 31 23:59:59 1970\n"},
{68255999, "Tue Feb 29 23:59:59 1972\n"}, // 1972 is a leap year
{94694399, "Sun Dec 31 23:59:59 1972\n"},
{951868799, "Tue Feb 29 23:59:59 2000\n"}, // 2000 is a leap year
{978307199, "Sun Dec 31 23:59:59 2000\n"},
{4107542400, "Mon Mar 1 00:00:00 2100\n"}, // 2100 is not a leap year
{4133980799, "Fri Dec 31 23:59:59 2100\n"},
{2147483647, "Tue Jan 19 03:14:07 2038\n"}, // 32-bit overflow point
{2147483648, "Tue Jan 19 03:14:08 2038\n"},
{4294967295, "Sun Feb 7 06:28:15 2106\n"}, // Unsigned 32-bit overflow
{4294967296, "Sun Feb 7 06:28:16 2106\n"}
};
int num_tests = sizeof(test_cases) / sizeof(test_cases[0]);
for (int i = 0; i < num_tests; i++) {
time_t orig = test_cases[i].timestamp;
const char *expected_asctime = test_cases[i].expected_asctime;
struct tm *tm_ptr = gmtime(&orig);
assert(tm_ptr != NULL);
struct tm local_tm;
memcpy(&local_tm, tm_ptr, sizeof(struct tm));
char *asc_time = asctime(&local_tm);
assert(asc_time != NULL);
assert(strcmp(asc_time, expected_asctime) == 0);
time_t computed = timegm(&local_tm);
assert(computed == orig);
}
return 0;
}