4 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 * See https://llvm.org/LICENSE.txt for license information.
6 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
9 #ifndef mathtest_intern_h
10 #define mathtest_intern_h
18 /* Generic function pointer. */
19 typedef void (*funcptr
)(void);
21 /* Pointers to test function types. */
22 typedef int (*testfunc1
)(mpfr_t
, mpfr_t
, mpfr_rnd_t
);
23 typedef int (*testfunc2
)(mpfr_t
, mpfr_t
, mpfr_t
, mpfr_rnd_t
);
24 typedef int (*testrred
)(mpfr_t
, mpfr_t
, int *);
25 typedef char * (*testsemi1
)(uint32
*, uint32
*);
26 typedef char * (*testsemi2
)(uint32
*, uint32
*, uint32
*);
27 typedef char * (*testsemi2f
)(uint32
*, uint32
*, uint32
*);
28 typedef char * (*testldexp
)(uint32
*, uint32
*, uint32
*);
29 typedef char * (*testfrexp
)(uint32
*, uint32
*, uint32
*);
30 typedef char * (*testmodf
)(uint32
*, uint32
*, uint32
*);
31 typedef char * (*testclassify
)(uint32
*, uint32
*);
32 typedef char * (*testclassifyf
)(uint32
*, uint32
*);
34 typedef int (*testfunc1c
)(mpc_t
, mpc_t
, mpc_rnd_t
);
35 typedef int (*testfunc2c
)(mpc_t
, mpc_t
, mpc_t
, mpc_rnd_t
);
37 typedef int (*testfunc1cr
)(mpfr_t
, mpc_t
, mpfr_rnd_t
);
39 /* Pointer to a function that generates random test cases. */
40 typedef void (*casegen
)(uint32
*, uint32
, uint32
);
43 * List of testable functions, their types, and their testable range.
46 args1
, /* afloat-based, one argument */
47 args1f
, /* same as args1 but in single prec */
48 args2
, /* afloat-based, two arguments */
49 args2f
, /* same as args2 but in single prec */
50 rred
, /* afloat-based, one arg, aux return */
51 rredf
, /* same as rred but in single prec */
52 semi1
, /* seminumerical, one argument */
53 semi1f
, /* seminumerical, 1 arg, float */
54 semi2
, /* seminumerical, two arguments */
55 semi2f
, /* seminumerical, 2 args, floats */
56 t_ldexp
, /* dbl * int -> dbl */
57 t_ldexpf
, /* sgl * int -> sgl */
58 t_frexp
, /* dbl -> dbl * int */
59 t_frexpf
, /* sgl -> sgl * int */
60 t_modf
, /* dbl -> dbl * dbl */
61 t_modff
, /* sgl -> sgl * sgl */
62 classify
, /* classify double: dbl -> int */
63 classifyf
, /* classify float: flt -> int */
64 compare
, /* compare doubles, returns int */
65 comparef
, /* compare floats, returns int */
67 args1c
, /* acomplex-base, one argument */
71 args1cr
, /* dbl-complex -> complex */
72 args1fcr
/* sgl-complex -> complex */
75 typedef struct __testable Testable
;
80 wrapperfunc wrappers
[MAXWRAPPERS
];
81 casegen cases
; /* complex functions use the same casegen for both real and complex args */
82 uint32 caseparam1
, caseparam2
;
85 extern Testable functions
[];
86 extern const int nfunctions
;
88 extern void init_pi(void);
90 int nargs_(Testable
* f
);