blob: ccf832d95675ca3f15608991eb4cfb3a7fecc9f8 [file] [log] [blame]
extern void abort (void);
double fmax (double, double);
float fmaxf (float, float);
double fmin (double, double);
float fminf (float, float);
#define isnan __builtin_isnan
#define isinf __builtin_isinf
#define NAN __builtin_nan ("")
#define INFINITY __builtin_inf ()
#define DEF_MAXMIN(TYPE,FUN)\
void test_##FUN (TYPE *__restrict__ r, TYPE *__restrict__ a,\
TYPE *__restrict__ b)\
{\
int i;\
for (i = 0; i < 4; i++)\
r[i] = FUN (a[i], b[i]);\
}\
DEF_MAXMIN (float, fmaxf)
DEF_MAXMIN (double, fmax)
DEF_MAXMIN (float, fminf)
DEF_MAXMIN (double, fmin)
int main ()
{
float a_f[4] = { 4, NAN, -3, INFINITY };
float b_f[4] = { 1, 7,NAN, 0 };
float r_f[4];
double a_d[4] = { 4, NAN, -3, INFINITY };
double b_d[4] = { 1, 7, NAN, 0 };
double r_d[4];
test_fmaxf (r_f, a_f, b_f);
if (r_f[0] != 4 || isnan (r_f[1]) || isnan (r_f[2]) || !isinf (r_f[3]))
abort ();
test_fminf (r_f, a_f, b_f);
if (r_f[0] != 1 || isnan (r_f[1]) || isnan (r_f[2]) || isinf (r_f[3]))
abort ();
test_fmax (r_d, a_d, b_d);
if (r_d[0] != 4 || isnan (r_d[1]) || isnan (r_d[2]) || !isinf (r_d[3]))
abort ();
test_fmin (r_d, a_d, b_d);
if (r_d[0] != 1 || isnan (r_d[1]) || isnan (r_d[2]) || isinf (r_d[3]))
abort ();
return 0;
}