Home | History | Annotate | Download | only in rtest
      1 /*
      2  * intern.h
      3  *
      4  * Copyright (c) 1999-2018, Arm Limited.
      5  * SPDX-License-Identifier: MIT
      6  */
      7 
      8 #ifndef mathtest_intern_h
      9 #define mathtest_intern_h
     10 
     11 #include <mpfr.h>
     12 #include <mpc.h>
     13 
     14 #include "types.h"
     15 #include "wrappers.h"
     16 
     17 /* Generic function pointer. */
     18 typedef void (*funcptr)(void);
     19 
     20 /* Pointers to test function types. */
     21 typedef int    (*testfunc1)(mpfr_t, mpfr_t, mpfr_rnd_t);
     22 typedef int    (*testfunc2)(mpfr_t, mpfr_t, mpfr_t, mpfr_rnd_t);
     23 typedef int    (*testrred)(mpfr_t, mpfr_t, int *);
     24 typedef char * (*testsemi1)(uint32 *, uint32 *);
     25 typedef char * (*testsemi2)(uint32 *, uint32 *, uint32 *);
     26 typedef char * (*testsemi2f)(uint32 *, uint32 *, uint32 *);
     27 typedef char * (*testldexp)(uint32 *, uint32 *, uint32 *);
     28 typedef char * (*testfrexp)(uint32 *, uint32 *, uint32 *);
     29 typedef char * (*testmodf)(uint32 *, uint32 *, uint32 *);
     30 typedef char * (*testclassify)(uint32 *, uint32 *);
     31 typedef char * (*testclassifyf)(uint32 *, uint32 *);
     32 
     33 typedef int    (*testfunc1c)(mpc_t, mpc_t, mpc_rnd_t);
     34 typedef int    (*testfunc2c)(mpc_t, mpc_t, mpc_t, mpc_rnd_t);
     35 
     36 typedef int    (*testfunc1cr)(mpfr_t, mpc_t, mpfr_rnd_t);
     37 
     38 /* Pointer to a function that generates random test cases. */
     39 typedef void (*casegen)(uint32 *, uint32, uint32);
     40 
     41 /*
     42  * List of testable functions, their types, and their testable range.
     43  */
     44 enum {
     45     args1,                             /* afloat-based, one argument */
     46     args1f,                            /* same as args1 but in single prec */
     47     args2,                             /* afloat-based, two arguments */
     48     args2f,                            /* same as args2 but in single prec */
     49     rred,                              /* afloat-based, one arg, aux return */
     50     rredf,                             /* same as rred but in single prec */
     51     semi1,                             /* seminumerical, one argument */
     52     semi1f,                            /* seminumerical, 1 arg, float */
     53     semi2,                             /* seminumerical, two arguments */
     54     semi2f,                            /* seminumerical, 2 args, floats */
     55     t_ldexp,                           /* dbl * int -> dbl */
     56     t_ldexpf,                          /* sgl * int -> sgl */
     57     t_frexp,                           /* dbl -> dbl * int */
     58     t_frexpf,                          /* sgl -> sgl * int */
     59     t_modf,                            /* dbl -> dbl * dbl */
     60     t_modff,                           /* sgl -> sgl * sgl */
     61     classify,                          /* classify double: dbl -> int */
     62     classifyf,                         /* classify float: flt -> int */
     63     compare,                           /* compare doubles, returns int */
     64     comparef,                          /* compare floats, returns int */
     65 
     66     args1c,                            /* acomplex-base, one argument */
     67     args2c,
     68     args1fc,
     69     args2fc,
     70     args1cr,                           /* dbl-complex -> complex */
     71     args1fcr                           /* sgl-complex -> complex */
     72 };
     73 
     74 typedef struct __testable Testable;
     75 struct __testable {
     76     char *name;
     77     funcptr func;
     78     int type;
     79     wrapperfunc wrappers[MAXWRAPPERS];
     80     casegen cases; /* complex functions use the same casegen for both real and complex args */
     81     uint32 caseparam1, caseparam2;
     82 };
     83 
     84 extern Testable functions[];
     85 extern const int nfunctions;
     86 
     87 extern void init_pi(void);
     88 
     89 int nargs_(Testable* f);
     90 
     91 #endif
     92