libs/c-timestamp/t/parse_wellformed.c (96 lines of code) (raw):

#include <string.h> #include "timestamp.h" #include "tap.h" const struct test_t { timestamp_t exp; const char *str; } tests[] = { { { INT64_C(-62135596800), 0, 0 }, "0001-01-01T00:00:00Z" }, { { INT64_C(-62135683140), 0, 1439 }, "0001-01-01T00:00:00+23:59" }, { { INT64_C(-62135510460), 0, -1439 }, "0001-01-01T00:00:00-23:59" }, { { INT64_C(253402300799), 0, 0 }, "9999-12-31T23:59:59Z" }, { { INT64_C(253402214459), 0, 1439 }, "9999-12-31T23:59:59+23:59" }, { { INT64_C(253402387139), 0, -1439 }, "9999-12-31T23:59:59-23:59" }, { { 0, 0, 0 }, "1970-01-01T00:00:00Z" }, { { 1, 0, 0 }, "1970-01-01T00:00:01Z" }, { { 10, 0, 0 }, "1970-01-01T00:00:10Z" }, { { 60, 0, 0 }, "1970-01-01T00:01:00Z" }, { { 600, 0, 0 }, "1970-01-01T00:10:00Z" }, { { 3600, 0, 0 }, "1970-01-01T01:00:00Z" }, { { 36000, 0, 0 }, "1970-01-01T10:00:00Z" }, { { 68169600, 0, 0 }, "1972-02-29T00:00:00Z" }, { { 0, 123456789, 0 }, "1970-01-01T00:00:00.123456789Z" }, { { 0, 123456780, 0 }, "1970-01-01T00:00:00.12345678Z" }, { { 0, 123456700, 0 }, "1970-01-01T00:00:00.1234567Z" }, { { 0, 123456000, 0 }, "1970-01-01T00:00:00.123456Z" }, { { 0, 123450000, 0 }, "1970-01-01T00:00:00.12345Z" }, { { 0, 123400000, 0 }, "1970-01-01T00:00:00.1234Z" }, { { 0, 123000000, 0 }, "1970-01-01T00:00:00.123Z" }, { { 0, 120000000, 0 }, "1970-01-01T00:00:00.12Z" }, { { 0, 100000000, 0 }, "1970-01-01T00:00:00.1Z" }, { { 0, 10000000, 0 }, "1970-01-01T00:00:00.01Z" }, { { 0, 1000000, 0 }, "1970-01-01T00:00:00.001Z" }, { { 0, 100000, 0 }, "1970-01-01T00:00:00.0001Z" }, { { 0, 10000, 0 }, "1970-01-01T00:00:00.00001Z" }, { { 0, 1000, 0 }, "1970-01-01T00:00:00.000001Z" }, { { 0, 100, 0 }, "1970-01-01T00:00:00.0000001Z" }, { { 0, 10, 0 }, "1970-01-01T00:00:00.00000001Z" }, { { 0, 1, 0 }, "1970-01-01T00:00:00.000000001Z" }, { { 0, 9, 0 }, "1970-01-01T00:00:00.000000009Z" }, { { 0, 90, 0 }, "1970-01-01T00:00:00.00000009Z" }, { { 0, 900, 0 }, "1970-01-01T00:00:00.0000009Z" }, { { 0, 9000, 0 }, "1970-01-01T00:00:00.000009Z" }, { { 0, 90000, 0 }, "1970-01-01T00:00:00.00009Z" }, { { 0, 900000, 0 }, "1970-01-01T00:00:00.0009Z" }, { { 0, 9000000, 0 }, "1970-01-01T00:00:00.009Z" }, { { 0, 90000000, 0 }, "1970-01-01T00:00:00.09Z" }, { { 0, 900000000, 0 }, "1970-01-01T00:00:00.9Z" }, { { 0, 990000000, 0 }, "1970-01-01T00:00:00.99Z" }, { { 0, 999000000, 0 }, "1970-01-01T00:00:00.999Z" }, { { 0, 999900000, 0 }, "1970-01-01T00:00:00.9999Z" }, { { 0, 999990000, 0 }, "1970-01-01T00:00:00.99999Z" }, { { 0, 999999000, 0 }, "1970-01-01T00:00:00.999999Z" }, { { 0, 999999900, 0 }, "1970-01-01T00:00:00.9999999Z" }, { { 0, 999999990, 0 }, "1970-01-01T00:00:00.99999999Z" }, { { 0, 999999999, 0 }, "1970-01-01T00:00:00.999999999Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.0Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.00Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.000Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.0000Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.00000Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.000000Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.0000000Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.00000000Z" }, { { 0, 0, 0 }, "1970-01-01T00:00:00.000000000Z" }, { { 0, 0, 1439 }, "1970-01-01T23:59:00+23:59" }, { { 0, 0, 120 }, "1970-01-01T02:00:00+02:00" }, { { 0, 0, 90 }, "1970-01-01T01:30:00+01:30" }, { { 0, 0, 60 }, "1970-01-01T01:00:00+01:00" }, { { 0, 0, 1 }, "1970-01-01T00:01:00+00:01" }, { { 0, 0, 0 }, "1970-01-01T00:00:00+00:00" }, { { 0, 0, -1 }, "1969-12-31T23:59:00-00:01" }, { { 0, 0, -60 }, "1969-12-31T23:00:00-01:00" }, { { 0, 0, -90 }, "1969-12-31T22:30:00-01:30" }, { { 0, 0, -120 }, "1969-12-31T22:00:00-02:00" }, { { 0, 0, -1439 }, "1969-12-31T00:01:00-23:59" }, { { 0, 0, 0 }, "1970-01-01T00:00:00z" }, { { 0, 0, 0 }, "1970-01-01 00:00:00Z" }, { { 0, 0, 0 }, "1970-01-01t00:00:00Z" }, { { 0, 0, 0 }, "1970-01-01 00:00:00+00:00" }, }; int main() { int i, ntests; ntests = sizeof(tests) / sizeof(*tests); for (i = 0; i < ntests; i++) { const struct test_t t = tests[i]; timestamp_t ts; int ret; ret = timestamp_parse(t.str, strlen(t.str), &ts); cmp_ok(ret, "==", 0, "timestamp_parse(\"%s\")", t.str); ret = timestamp_compare(&ts, &t.exp); cmp_ok(ret, "==", 0, "timestamp_compare(\"%s\")", t.str); cmp_ok(ts.offset, "==", t.exp.offset, "offset (%s)", t.str); } done_testing(); }