summaryrefslogtreecommitdiff
path: root/regress/lib/libutil/fmt_scaled/fmt_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'regress/lib/libutil/fmt_scaled/fmt_test.c')
-rw-r--r--regress/lib/libutil/fmt_scaled/fmt_test.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/regress/lib/libutil/fmt_scaled/fmt_test.c b/regress/lib/libutil/fmt_scaled/fmt_test.c
index 077c848d971..947d403440c 100644
--- a/regress/lib/libutil/fmt_scaled/fmt_test.c
+++ b/regress/lib/libutil/fmt_scaled/fmt_test.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fmt_test.c,v 1.14 2017/03/15 05:00:58 dtucker Exp $ */
+/* $OpenBSD: fmt_test.c,v 1.15 2017/03/16 02:42:31 dtucker Exp $ */
/*
* Combined tests for fmt_scaled and scan_scaled.
@@ -190,18 +190,25 @@ struct { /* the test cases */
{ "++42", -1, EINVAL },
{ "SCALE_OVERFLOW", 0, ERANGE },
{ "SCALE_UNDERFLOW", 0, ERANGE },
-#if 0
{ "LLONG_MAX_K", (LLONG_MAX / 1024) * 1024, 0 },
{ "LLONG_MIN_K", (LLONG_MIN / 1024) * 1024, 0 },
{ "LLONG_MAX", LLONG_MAX, 0 }, /* upper limit */
- { "LLONG_MIN", LLONG_MIN, 0 }, /* lower limit */
- /* { "9223372036854775808", -9223372036854775808LL, 0 }, */ /* XXX */
-#endif
+
+ /*
+ * Lower limit is a bit special: because scan_scaled accumulates into a
+ * signed long long it can only handle up to the negative value of
+ * LLONG_MAX not LLONG_MIN.
+ */
+ { "NEGATIVE_LLONG_MAX", LLONG_MAX*-1, 0 }, /* lower limit */
+ { "LLONG_MIN", 0, ERANGE }, /* can't handle */
#if LLONG_MAX == 0x7fffffffffffffffLL
+ { "-9223372036854775807", -9223372036854775807, 0 },
+ { "9223372036854775807", 9223372036854775807, 0 },
{ "9223372036854775808", 0, ERANGE },
{ "9223372036854775809", 0, ERANGE },
#endif
#if LLONG_MIN == (-0x7fffffffffffffffLL-1)
+ { "-9223372036854775808", 0, ERANGE },
{ "-9223372036854775809", 0, ERANGE },
{ "-9223372036854775810", 0, ERANGE },
#endif
@@ -262,10 +269,16 @@ scan_test(void)
} else if (strcmp(input, "SCALE_UNDERFLOW") == 0) {
snprintf(buf, sizeof buf," %lldK", (LLONG_MIN/1024)-1);
input = buf;
+ } else if (strcmp(input, "NEGATIVE_LLONG_MAX") == 0) {
+ snprintf(buf, sizeof buf," %lld", LLONG_MAX*-1);
+ input = buf;
}
+ if (verbose && input != sdata[i].input)
+ printf("expand '%s' -> '%s'\n", sdata[i].input,
+ input);
- errno = 0;
/* printf("Calling scan_scaled(%s, ...)\n", sdata[i].input); */
+ errno = 0;
ret = scan_scaled(input, &result);
e = errno; /* protect across printfs &c. */
if (verbose)