summaryrefslogtreecommitdiffstats
path: root/test/bioprinttest.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/bioprinttest.c')
-rw-r--r--test/bioprinttest.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/bioprinttest.c b/test/bioprinttest.c
index 14f0bfe52d..3dd5b3efa2 100644
--- a/test/bioprinttest.c
+++ b/test/bioprinttest.c
@@ -241,14 +241,48 @@ static int test_fp(int i)
return r;
}
+extern double zero_value;
+double zero_value = 0.0;
+
static int test_big(void)
{
char buf[80];
+ double d, z, inf, nan;
/* Test excessively big number. Should fail */
if (!TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
"%f\n", 2 * (double)ULONG_MAX), -1))
return 0;
+
+ d = 1.0;
+ z = zero_value;
+ inf = d / z;
+ nan = z / z;
+
+ /*
+ * Test +/-inf, nan. Should fail.
+ * Test +/-1.0, +/-0.0. Should work.
+ */
+ if (!TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
+ "%f", inf), -1)
+ || !TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
+ "%f", -inf), -1)
+ || !TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
+ "%f", nan), -1)
+ || !TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
+ "%f", d), 8)
+ || !TEST_str_eq(buf, "1.000000")
+ || !TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
+ "%f", z), 8)
+ || !TEST_str_eq(buf, "0.000000")
+ || !TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
+ "%f", -d), 9)
+ || !TEST_str_eq(buf, "-1.000000")
+ || !TEST_int_eq(BIO_snprintf(buf, sizeof(buf),
+ "%f", -z), 8)
+ || !TEST_str_eq(buf, "0.000000"))
+ return 0;
+
return 1;
}