mirror of
https://github.com/bdnugget/kcgi.git
synced 2026-11-07 05:47:27 +00:00
Test over the full range of int64_t possible dates.
This commit is contained in:
1 parent
14f51be89c
commit
5a2e7ec57f
3 files changed
+80
-40
No files matched your search
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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: "
|
||||
|
||||
@@ -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: "
|
||||
|
||||
Reference in new issue
Block a user