Home | History | Annotate | Line # | Download | only in libm
      1  1.2  christos /* $NetBSD: t_casinh.c,v 1.2 2016/09/20 17:19:28 christos Exp $ */
      2  1.1      maya 
      3  1.1      maya /*
      4  1.1      maya  * Written by Maya Rashish
      5  1.1      maya  * Public domain.
      6  1.1      maya  *
      7  1.1      maya  * Testing special values of casinh
      8  1.1      maya  * Values from ISO/IEC 9899:201x G.6.2.2
      9  1.1      maya  */
     10  1.1      maya 
     11  1.1      maya #include <atf-c.h>
     12  1.1      maya #include <complex.h>
     13  1.1      maya #include <math.h>
     14  1.1      maya 
     15  1.1      maya #define RE(z) (((double *)(&z))[0])
     16  1.1      maya #define IM(z) (((double *)(&z))[1])
     17  1.1      maya 
     18  1.1      maya static const struct {
     19  1.1      maya 	double input_re;
     20  1.1      maya 	double input_im;
     21  1.1      maya 	double result_re;
     22  1.1      maya 	double result_im;
     23  1.1      maya } values[] = {
     24  1.1      maya 	{ +0,		+0,		+0,		+0},
     25  1.1      maya 	{ +5.032E3,	+INFINITY,	+INFINITY,	+M_PI/2},
     26  1.1      maya 	{ +INFINITY,	+5.023E3,	+INFINITY,	+0},
     27  1.1      maya 	{ +INFINITY,	+INFINITY,	+INFINITY,	+M_PI/4},
     28  1.1      maya #ifdef __HAVE_NANF
     29  1.1      maya 	{ +INFINITY,	+NAN,		+INFINITY,	+NAN},
     30  1.1      maya 	{ +5.032E3,	+NAN,		+NAN,		+NAN}, /* + FE_INVALID optionally raised */
     31  1.1      maya 	{ +NAN,		+0,		+NAN,		+0},
     32  1.1      maya 	{ +NAN,		-5.023E3,	+NAN,		+NAN}, /* + FE_INVALID optionally raised */
     33  1.1      maya 	{ +NAN,		+INFINITY,	+INFINITY,	+NAN}, /* sign of real part of result unspecified */
     34  1.1      maya 	{ +NAN,		+NAN,		+NAN,		+NAN},
     35  1.1      maya #endif
     36  1.1      maya };
     37  1.1      maya 
     38  1.1      maya #ifdef __HAVE_NANF
     39  1.1      maya #define both_nan(a,b) (isnan(a) && isnan(b))
     40  1.1      maya #else
     41  1.1      maya #define both_nan(a,b) 0
     42  1.1      maya #endif
     43  1.1      maya 
     44  1.1      maya #define crude_equality(a,b) ((a == b) || both_nan(a,b))
     45  1.1      maya 
     46  1.1      maya #define ATF_COMPLEX_EQUAL(a,b) do { \
     47  1.2  christos 	complex double ci = casinh(a); \
     48  1.2  christos 	ATF_CHECK_MSG(crude_equality(creal(ci),creal(b)) && \
     49  1.2  christos 	    crude_equality(cimag(ci), cimag(b)), \
     50  1.2  christos 	    "for casinh([%g,%g]) = [%g,%g] != [%g,%g]", \
     51  1.2  christos 	    creal(a), cimag(a), creal(ci), cimag(ci), creal(b), cimag(b)); \
     52  1.1      maya } while (0/*CONSTCOND*/)
     53  1.1      maya 
     54  1.1      maya 
     55  1.1      maya ATF_TC(casinh);
     56  1.1      maya ATF_TC_HEAD(casinh, tc)
     57  1.1      maya {
     58  1.1      maya 	atf_tc_set_md_var(tc, "descr","Check casinh family - special values");
     59  1.1      maya }
     60  1.1      maya 
     61  1.1      maya ATF_TC_BODY(casinh, tc)
     62  1.1      maya {
     63  1.1      maya 	complex double input;
     64  1.1      maya 	complex double result;
     65  1.1      maya 	unsigned int i;
     66  1.1      maya 	for (i = 0; i < __arraycount(values); i++) {
     67  1.1      maya 		RE(input) = values[i].input_re;
     68  1.1      maya 		IM(input) = values[i].input_im;
     69  1.1      maya 		RE(result) = values[i].result_re;
     70  1.1      maya 		IM(result) = values[i].result_im;
     71  1.2  christos 		ATF_COMPLEX_EQUAL(input, result);
     72  1.1      maya 	}
     73  1.1      maya }
     74  1.1      maya 
     75  1.1      maya ATF_TP_ADD_TCS(tp)
     76  1.1      maya {
     77  1.1      maya 
     78  1.1      maya 	ATF_TP_ADD_TC(tp, casinh);
     79  1.1      maya 
     80  1.1      maya 	return atf_no_error();
     81  1.1      maya }
     82