libs/c-timestamp/t/tm.c (54 lines of code) (raw):

#include <string.h> #include "timestamp.h" #include "tap.h" int main() { timestamp_t ts; struct tm tm; { /* 0001-01-01T12:30:45Z */ ts.sec = INT64_C(-62135551755); ts.nsec = 0; ts.offset = 0; memset(&tm, 0, sizeof(tm)); ok(timestamp_to_tm_utc(&ts, &tm) != NULL); cmp_ok(tm.tm_year, "==", -1899, "tm_year"); cmp_ok(tm.tm_mon, "==", 0, "tm_mon"); cmp_ok(tm.tm_mday, "==", 1, "tm_mday"); cmp_ok(tm.tm_yday, "==", 0, "tm_yday"); cmp_ok(tm.tm_wday, "==", 1, "tm_wday"); cmp_ok(tm.tm_hour, "==", 12, "tm_hour"); cmp_ok(tm.tm_min, "==", 30, "tm_min"); cmp_ok(tm.tm_sec, "==", 45, "tm_sec"); } { /* 0001-01-01T12:30:45+02:00 */ ts.sec = INT64_C(-62135558955); ts.nsec = 0; ts.offset = 120; memset(&tm, 0, sizeof(tm)); ok(timestamp_to_tm_local(&ts, &tm) != NULL); cmp_ok(tm.tm_year, "==", -1899, "tm_year"); cmp_ok(tm.tm_mon, "==", 0, "tm_mon"); cmp_ok(tm.tm_mday, "==", 1, "tm_mday"); cmp_ok(tm.tm_yday, "==", 0, "tm_yday"); cmp_ok(tm.tm_wday, "==", 1, "tm_wday"); cmp_ok(tm.tm_hour, "==", 12, "tm_hour"); cmp_ok(tm.tm_min, "==", 30, "tm_min"); cmp_ok(tm.tm_sec, "==", 45, "tm_sec"); } { /* 1970-12-31T23:59:59Z */ ts.sec = INT64_C(31535999); ts.nsec = 0; ts.offset = 0; memset(&tm, 0, sizeof(tm)); ok(timestamp_to_tm_utc(&ts, &tm) != NULL); cmp_ok(tm.tm_year, "==", 70, "tm_year"); cmp_ok(tm.tm_mon, "==", 11, "tm_mon"); cmp_ok(tm.tm_mday, "==", 31, "tm_mday"); cmp_ok(tm.tm_yday, "==", 364, "tm_yday"); cmp_ok(tm.tm_wday, "==", 4, "tm_wday"); cmp_ok(tm.tm_hour, "==", 23, "tm_hour"); cmp_ok(tm.tm_min, "==", 59, "tm_min"); cmp_ok(tm.tm_sec, "==", 59, "tm_sec"); } done_testing(); }