Test over the full range of int64_t possible dates.

This commit is contained in:
kristapsdz committed 2020-05-11 11:15:15 +00:00
1 parent 14f51be89c
commit 5a2e7ec57f
3 files changed
+80 -40

No files matched your search

+72 -32
View File
@@ -20,6 +20,7 @@
# include <err.h>
#endif
#include <inttypes.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdlib.h>
@@ -35,20 +36,72 @@
int
main(int argc, char *argv[])
{
size_t i;
int64_t v, vv, tm_sec, tm_min, tm_hour, tm_mday,
tm_mon, tm_year, tm_wday, tm_yday;
size_t i;
int64_t v, vv, tm_sec, tm_min, tm_hour, tm_mday,
tm_mon, tm_year, tm_wday, tm_yday;
/*
* FIXME: test truly across all int64_t.
* Right now the implementation is too slow for that.
*/
/* Test maximum possible input. */
v = INT64_MAX;
khttp_epoch2datetime(v,
&tm_sec,
&tm_min,
&tm_hour,
&tm_mday,
&tm_mon,
&tm_year,
&tm_wday,
&tm_yday);
if (!khttp_datetime2epoch(&vv, tm_mday,
tm_mon, tm_year, tm_hour, tm_min, tm_sec))
errx(1, "khttp_datetime2epoch: have {"
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 "}",
tm_mday, tm_mon,
tm_year, tm_hour,
tm_min, tm_sec);
if (v != vv)
errx(1, "khttp_datetime2epoch: mismatch (max)");
v = INT64_MIN;
khttp_epoch2datetime(v,
&tm_sec,
&tm_min,
&tm_hour,
&tm_mday,
&tm_mon,
&tm_year,
&tm_wday,
&tm_yday);
if (!khttp_datetime2epoch(&vv, tm_mday,
tm_mon, tm_year, tm_hour, tm_min, tm_sec))
errx(1, "khttp_datetime2epoch: have {"
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 "}",
tm_mday, tm_mon,
tm_year, tm_hour,
tm_min, tm_sec);
if (v != vv)
errx(1, "khttp_datetime2epoch: mismatch (min)");
/* Test across random values. */
for (i = 0; i < 100000; i++) {
#if HAVE_ARC4RANDOM
v = arc4random();
arc4random_buf(&v, sizeof(int64_t));
#else
v = random();
vv = (int64_t)random() * (int64_t)random();
memcpy(&v, &vv, sizeof(uint32_t));
vv = (int64_t)random() * (int64_t)random();
memcpy(&v + sizeof(uint32_t), &vv, sizeof(uint32_t));
#endif
khttp_epoch2datetime(v,
&tm_sec,
@@ -61,29 +114,16 @@ main(int argc, char *argv[])
&tm_yday);
if (!khttp_datetime2epoch(&vv, tm_mday,
tm_mon, tm_year, tm_hour, tm_min, tm_sec))
errx(1, "khttp_datetime2epoch");
if (v != vv)
errx(1, "khttp_datetime2epoch: mismatch");
}
for (i = 0; i < 100000; i++) {
#if HAVE_ARC4RANDOM
v = (int64_t)arc4random() * -1.0;
#else
v = (int64_t)random() * -1.0;
#endif
khttp_epoch2datetime(v,
&tm_sec,
&tm_min,
&tm_hour,
&tm_mday,
&tm_mon,
&tm_year,
&tm_wday,
&tm_yday);
if (!khttp_datetime2epoch(&vv, tm_mday,
tm_mon, tm_year, tm_hour, tm_min, tm_sec))
errx(1, "khttp_datetime2epoch");
errx(1, "khttp_datetime2epoch: have {"
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 ", "
"%" PRId64 "}",
tm_mday, tm_mon,
tm_year, tm_hour,
tm_min, tm_sec);
if (v != vv)
errx(1, "khttp_datetime2epoch: mismatch");
}
+4 -4
View File
@@ -83,8 +83,8 @@ main(int argc, char *argv[])
/* Similarly, but for >4 digit years. */
vv = 1000000000000;
strlcpy(buf, "Fri, 27 Sep 33658 01:46:40 GMT", sizeof(buf));
vv = INT64_MAX;
strlcpy(buf, "Sun, 04 Dec 292277026596 15:30:07 GMT", sizeof(buf));
khttp_epoch2str(vv, testbuf, sizeof(testbuf));
if (strcmp(buf, testbuf))
errx(1, "khttp_epoch2str: "
@@ -92,8 +92,8 @@ main(int argc, char *argv[])
/* And time_t < int32_t (also tests for negative year). */
vv = -100000000000;
strlcpy(buf, "Thu, 15 Feb -1199 14:13:20 GMT", sizeof(buf));
vv = INT64_MIN;
strlcpy(buf, "Sun, 27 Jan -292277022657 08:29:52 GMT", sizeof(buf));
khttp_epoch2str(vv, testbuf, sizeof(testbuf));
if (strcmp(buf, testbuf))
errx(1, "khttp_epoch2str: "
+4 -4
View File
@@ -83,8 +83,8 @@ main(int argc, char *argv[])
/* Similarly, but for >4 digit years. */
vv = 1000000000000;
strlcpy(buf, "33658-09-27T01:46:40Z", sizeof(buf));
vv = INT64_MAX;
strlcpy(buf, "292277026596-12-04T15:30:07Z", sizeof(buf));
khttp_epoch2ustr(vv, testbuf, sizeof(testbuf));
if (strcmp(buf, testbuf))
errx(1, "khttp_epoch2ustr: "
@@ -92,8 +92,8 @@ main(int argc, char *argv[])
/* And time_t < int32_t (also tests for negative year). */
vv = -100000000000;
strlcpy(buf, "-1199-02-15T14:13:20Z", sizeof(buf));
vv = INT64_MIN;
strlcpy(buf, "-292277022657-01-27T08:29:52Z", sizeof(buf));
khttp_epoch2ustr(vv, testbuf, sizeof(testbuf));
if (strcmp(buf, testbuf))
errx(1, "khttp_epoch2ustr: "