93 lines
3.4 KiB
C
93 lines
3.4 KiB
C
|
/*
|
||
|
* intern.h
|
||
|
*
|
||
|
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||
|
* See https://llvm.org/LICENSE.txt for license information.
|
||
|
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||
|
*/
|
||
|
|
||
|
#ifndef mathtest_intern_h
|
||
|
#define mathtest_intern_h
|
||
|
|
||
|
#include <mpfr.h>
|
||
|
#include <mpc.h>
|
||
|
|
||
|
#include "types.h"
|
||
|
#include "wrappers.h"
|
||
|
|
||
|
/* Generic function pointer. */
|
||
|
typedef void (*funcptr)(void);
|
||
|
|
||
|
/* Pointers to test function types. */
|
||
|
typedef int (*testfunc1)(mpfr_t, mpfr_t, mpfr_rnd_t);
|
||
|
typedef int (*testfunc2)(mpfr_t, mpfr_t, mpfr_t, mpfr_rnd_t);
|
||
|
typedef int (*testrred)(mpfr_t, mpfr_t, int *);
|
||
|
typedef char * (*testsemi1)(uint32 *, uint32 *);
|
||
|
typedef char * (*testsemi2)(uint32 *, uint32 *, uint32 *);
|
||
|
typedef char * (*testsemi2f)(uint32 *, uint32 *, uint32 *);
|
||
|
typedef char * (*testldexp)(uint32 *, uint32 *, uint32 *);
|
||
|
typedef char * (*testfrexp)(uint32 *, uint32 *, uint32 *);
|
||
|
typedef char * (*testmodf)(uint32 *, uint32 *, uint32 *);
|
||
|
typedef char * (*testclassify)(uint32 *, uint32 *);
|
||
|
typedef char * (*testclassifyf)(uint32 *, uint32 *);
|
||
|
|
||
|
typedef int (*testfunc1c)(mpc_t, mpc_t, mpc_rnd_t);
|
||
|
typedef int (*testfunc2c)(mpc_t, mpc_t, mpc_t, mpc_rnd_t);
|
||
|
|
||
|
typedef int (*testfunc1cr)(mpfr_t, mpc_t, mpfr_rnd_t);
|
||
|
|
||
|
/* Pointer to a function that generates random test cases. */
|
||
|
typedef void (*casegen)(uint32 *, uint32, uint32);
|
||
|
|
||
|
/*
|
||
|
* List of testable functions, their types, and their testable range.
|
||
|
*/
|
||
|
enum {
|
||
|
args1, /* afloat-based, one argument */
|
||
|
args1f, /* same as args1 but in single prec */
|
||
|
args2, /* afloat-based, two arguments */
|
||
|
args2f, /* same as args2 but in single prec */
|
||
|
rred, /* afloat-based, one arg, aux return */
|
||
|
rredf, /* same as rred but in single prec */
|
||
|
semi1, /* seminumerical, one argument */
|
||
|
semi1f, /* seminumerical, 1 arg, float */
|
||
|
semi2, /* seminumerical, two arguments */
|
||
|
semi2f, /* seminumerical, 2 args, floats */
|
||
|
t_ldexp, /* dbl * int -> dbl */
|
||
|
t_ldexpf, /* sgl * int -> sgl */
|
||
|
t_frexp, /* dbl -> dbl * int */
|
||
|
t_frexpf, /* sgl -> sgl * int */
|
||
|
t_modf, /* dbl -> dbl * dbl */
|
||
|
t_modff, /* sgl -> sgl * sgl */
|
||
|
classify, /* classify double: dbl -> int */
|
||
|
classifyf, /* classify float: flt -> int */
|
||
|
compare, /* compare doubles, returns int */
|
||
|
comparef, /* compare floats, returns int */
|
||
|
|
||
|
args1c, /* acomplex-base, one argument */
|
||
|
args2c,
|
||
|
args1fc,
|
||
|
args2fc,
|
||
|
args1cr, /* dbl-complex -> complex */
|
||
|
args1fcr /* sgl-complex -> complex */
|
||
|
};
|
||
|
|
||
|
typedef struct __testable Testable;
|
||
|
struct __testable {
|
||
|
char *name;
|
||
|
funcptr func;
|
||
|
int type;
|
||
|
wrapperfunc wrappers[MAXWRAPPERS];
|
||
|
casegen cases; /* complex functions use the same casegen for both real and complex args */
|
||
|
uint32 caseparam1, caseparam2;
|
||
|
};
|
||
|
|
||
|
extern Testable functions[];
|
||
|
extern const int nfunctions;
|
||
|
|
||
|
extern void init_pi(void);
|
||
|
|
||
|
int nargs_(Testable* f);
|
||
|
|
||
|
#endif
|