1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
/* Basic tests for _FloatN / _FloatNx types: compile and execution
tests for valid code. Before including this file, define WIDTH as
the value N; define EXT to 1 for _FloatNx and 0 for _FloatN. */
#include <stdarg.h>
#define CONCATX(X, Y) X ## Y
#define CONCAT(X, Y) CONCATX (X, Y)
#define CONCAT3(X, Y, Z) CONCAT (CONCAT (X, Y), Z)
#define CONCAT4(W, X, Y, Z) CONCAT (CONCAT (CONCAT (W, X), Y), Z)
#if EXT
# define TYPE CONCAT3 (_Float, WIDTH, x)
# define CST(C) CONCAT4 (C, f, WIDTH, x)
# define CSTU(C) CONCAT4 (C, F, WIDTH, x)
#else
# define TYPE CONCAT (_Float, WIDTH)
# define CST(C) CONCAT3 (C, f, WIDTH)
# define CSTU(C) CONCAT3 (C, F, WIDTH)
#endif
extern void exit (int);
extern void abort (void);
volatile TYPE a = CST (1.0), b = CSTU (2.5), c = -CST (2.5);
volatile TYPE a2 = CST (1.0), z = CST (0.0), nz = -CST (0.0);
/* These types are not subject to default argument promotions. */
TYPE
vafn (TYPE arg1, ...)
{
va_list ap;
TYPE ret;
va_start (ap, arg1);
ret = arg1 + va_arg (ap, TYPE);
va_end (ap);
return ret;
}
TYPE
krfn (arg)
TYPE arg;
{
return arg + 1;
}
TYPE krprofn (TYPE);
TYPE
krprofn (arg)
TYPE arg;
{
return arg * 3;
}
TYPE
profn (TYPE arg)
{
return arg / 4;
}
int
main (void)
{
volatile TYPE r;
r = -b;
if (r != c)
abort ();
r = a + b;
if (r != CST (3.5))
abort ();
r = a - b;
if (r != -CST (1.5))
abort ();
r = 2 * c;
if (r != -5)
abort ();
r = b * c;
if (r != -CST (6.25))
abort ();
r = b / (a + a);
if (r != CST (1.25))
abort ();
r = c * 3;
if (r != -CST (7.5))
abort ();
volatile int i = r;
if (i != -7)
abort ();
r = vafn (a, c);
if (r != -CST (1.5))
abort ();
r = krfn (b);
if (r != CST (3.5))
abort ();
r = krprofn (a);
if (r != CST (3.0))
abort ();
r = profn (a);
if (r != CST (0.25))
abort ();
if ((a < b) != 1)
abort ();
if ((b < a) != 0)
abort ();
if ((a < a2) != 0)
abort ();
if ((nz < z) != 0)
abort ();
if ((a <= b) != 1)
abort ();
if ((b <= a) != 0)
abort ();
if ((a <= a2) != 1)
abort ();
if ((nz <= z) != 1)
abort ();
if ((a > b) != 0)
abort ();
if ((b > a) != 1)
abort ();
if ((a > a2) != 0)
abort ();
if ((nz > z) != 0)
abort ();
if ((a >= b) != 0)
abort ();
if ((b >= a) != 1)
abort ();
if ((a >= a2) != 1)
abort ();
if ((nz >= z) != 1)
abort ();
i = (nz == z);
if (i != 1)
abort ();
i = (a == b);
if (i != 0)
abort ();
exit (0);
}
|