summaryrefslogtreecommitdiff
path: root/tests/lib/libm
diff options
context:
space:
mode:
authormaya <maya@NetBSD.org>2016-08-31 14:05:09 +0000
committermaya <maya@NetBSD.org>2016-08-31 14:05:09 +0000
commitd8f7db2605ce07aef7dc049f65f00a399be699c6 (patch)
tree5ce58f57856f76be583e572bbfc4f4adc9e7467f /tests/lib/libm
parent0331755eddc1042b5028c901b4512a878c4b7550 (diff)
Add failing test for casinh
Diffstat (limited to 'tests/lib/libm')
-rw-r--r--tests/lib/libm/Makefile3
-rw-r--r--tests/lib/libm/t_casinh.c78
2 files changed, 80 insertions, 1 deletions
diff --git a/tests/lib/libm/Makefile b/tests/lib/libm/Makefile
index 24e933a647b..e5b4028cc42 100644
--- a/tests/lib/libm/Makefile
+++ b/tests/lib/libm/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.39 2016/08/23 10:03:44 christos Exp $
+# $NetBSD: Makefile,v 1.40 2016/08/31 14:05:10 maya Exp $
.include <bsd.own.mk>
@@ -15,6 +15,7 @@ CPPFLAGS.t_fmod.c+= -I${.CURDIR}/../libc/gen
TESTS_C+= t_acos
TESTS_C+= t_asin
TESTS_C+= t_atan
+TESTS_C+= t_casinh
TESTS_C+= t_cbrt
TESTS_C+= t_ceil
TESTS_C+= t_cos
diff --git a/tests/lib/libm/t_casinh.c b/tests/lib/libm/t_casinh.c
new file mode 100644
index 00000000000..d77e8790032
--- /dev/null
+++ b/tests/lib/libm/t_casinh.c
@@ -0,0 +1,78 @@
+/* $NetBSD: t_casinh.c,v 1.1 2016/08/31 14:05:10 maya Exp $ */
+
+/*
+ * Written by Maya Rashish
+ * Public domain.
+ *
+ * Testing special values of casinh
+ * Values from ISO/IEC 9899:201x G.6.2.2
+ */
+
+#include <atf-c.h>
+#include <complex.h>
+#include <math.h>
+
+#define RE(z) (((double *)(&z))[0])
+#define IM(z) (((double *)(&z))[1])
+
+static const struct {
+ double input_re;
+ double input_im;
+ double result_re;
+ double result_im;
+} values[] = {
+ { +0, +0, +0, +0},
+ { +5.032E3, +INFINITY, +INFINITY, +M_PI/2},
+ { +INFINITY, +5.023E3, +INFINITY, +0},
+ { +INFINITY, +INFINITY, +INFINITY, +M_PI/4},
+#ifdef __HAVE_NANF
+ { +INFINITY, +NAN, +INFINITY, +NAN},
+ { +5.032E3, +NAN, +NAN, +NAN}, /* + FE_INVALID optionally raised */
+ { +NAN, +0, +NAN, +0},
+ { +NAN, -5.023E3, +NAN, +NAN}, /* + FE_INVALID optionally raised */
+ { +NAN, +INFINITY, +INFINITY, +NAN}, /* sign of real part of result unspecified */
+ { +NAN, +NAN, +NAN, +NAN},
+#endif
+};
+
+#ifdef __HAVE_NANF
+#define both_nan(a,b) (isnan(a) && isnan(b))
+#else
+#define both_nan(a,b) 0
+#endif
+
+#define crude_equality(a,b) ((a == b) || both_nan(a,b))
+
+#define ATF_COMPLEX_EQUAL(a,b) do { \
+ ATF_CHECK(crude_equality(creal(a),creal(b)) && \
+ crude_equality(cimag(a), cimag(b))); \
+} while (0/*CONSTCOND*/)
+
+
+ATF_TC(casinh);
+ATF_TC_HEAD(casinh, tc)
+{
+ atf_tc_set_md_var(tc, "descr","Check casinh family - special values");
+}
+
+ATF_TC_BODY(casinh, tc)
+{
+ complex double input;
+ complex double result;
+ unsigned int i;
+ for (i = 0; i < __arraycount(values); i++) {
+ RE(input) = values[i].input_re;
+ IM(input) = values[i].input_im;
+ RE(result) = values[i].result_re;
+ IM(result) = values[i].result_im;
+ ATF_COMPLEX_EQUAL(casinh(input), result);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, casinh);
+
+ return atf_no_error();
+}