diff options
| author | maya <maya@NetBSD.org> | 2016-08-31 14:05:09 +0000 |
|---|---|---|
| committer | maya <maya@NetBSD.org> | 2016-08-31 14:05:09 +0000 |
| commit | d8f7db2605ce07aef7dc049f65f00a399be699c6 (patch) | |
| tree | 5ce58f57856f76be583e572bbfc4f4adc9e7467f /tests/lib/libm | |
| parent | 0331755eddc1042b5028c901b4512a878c4b7550 (diff) | |
Add failing test for casinh
Diffstat (limited to 'tests/lib/libm')
| -rw-r--r-- | tests/lib/libm/Makefile | 3 | ||||
| -rw-r--r-- | tests/lib/libm/t_casinh.c | 78 |
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(); +} |
