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