1/* Copyright (C) 2002, 2003, 2004  Free Software Foundation.
2
3   Verify that built-in math function constant folding of constant
4   arguments is correctly performed by the compiler.
5
6   Written by Roger Sayle, 16th August 2002.  */
7
8/* { dg-do link } */
9
10extern double atan (double);
11extern float atanf (float);
12extern long double atanl (long double);
13extern double cbrt (double);
14extern float cbrtf (float);
15extern long double cbrtl (long double);
16extern double cos (double);
17extern float cosf (float);
18extern long double cosl (long double);
19extern double exp (double);
20extern float expf (float);
21extern long double expl (long double);
22extern double log (double);
23extern float logf (float);
24extern long double logl (long double);
25extern double pow (double, double);
26extern float powf (float, float);
27extern long double powl (long double, long double);
28extern double sin (double);
29extern float sinf (float);
30extern long double sinl (long double);
31extern double sqrt (double);
32extern float sqrtf (float);
33extern long double sqrtl (long double);
34extern double tan (double);
35extern float tanf (float);
36extern long double tanl (long double);
37
38/* All references to link_error should go away at compile-time.  */
39extern void link_error(void);
40
41void test (float f, double d, long double ld)
42{
43  if (sqrt (0.0) != 0.0)
44    link_error ();
45
46  if (sqrt (1.0) != 1.0)
47    link_error ();
48
49  if (cbrt (0.0) != 0.0)
50    link_error ();
51
52  if (cbrt (1.0) != 1.0)
53    link_error ();
54
55  if (cbrt (-1.0) != -1.0)
56    link_error ();
57
58  if (exp (0.0) != 1.0)
59    link_error ();
60
61  if (exp (1.0) <= 2.71 || exp (1.0) >= 2.72)
62    link_error ();
63
64  if (log (1.0) != 0.0)
65    link_error ();
66
67  if (sin (0.0) != 0.0)
68    link_error ();
69
70  if (cos (0.0) != 1.0)
71    link_error ();
72
73  if (tan (0.0) != 0.0)
74    link_error ();
75
76  if (atan (0.0) != 0.0)
77    link_error ();
78
79  if (4.0*atan (1.0) <= 3.14 || 4.0*atan (1.0) >= 3.15)
80    link_error ();
81
82  if (pow (d, 0.0) != 1.0)
83    link_error ();
84
85  if (pow (1.0, d) != 1.0)
86    link_error ();
87
88
89  if (sqrtf (0.0F) != 0.0F)
90    link_error ();
91
92  if (sqrtf (1.0F) != 1.0F)
93    link_error ();
94
95  if (cbrtf (0.0F) != 0.0F)
96    link_error ();
97
98  if (cbrtf (1.0F) != 1.0F)
99    link_error ();
100
101  if (cbrtf (-1.0F) != -1.0F)
102    link_error ();
103
104  if (expf (0.0F) != 1.0F)
105    link_error ();
106
107  if (expf (1.0F) <= 2.71F || expf (1.0F) >= 2.72F)
108    link_error ();
109
110  if (logf (1.0F) != 0.0F)
111    link_error ();
112
113  if (sinf (0.0F) != 0.0F)
114    link_error ();
115
116  if (cosf (0.0F) != 1.0F)
117    link_error ();
118
119  if (tanf (0.0F) != 0.0F)
120    link_error ();
121
122  if (atanf (0.0F) != 0.0F)
123    link_error ();
124
125  if (4.0F*atanf (1.0F) <= 3.14F || 4.0F*atanf (1.0F) >= 3.15F)
126    link_error ();
127
128  if (powf (f, 0.0F) != 1.0F)
129    link_error ();
130
131  if (powf (1.0F, f) != 1.0F)
132    link_error ();
133
134
135  if (sqrtl (0.0L) != 0.0L)
136    link_error ();
137
138  if (sqrtl (1.0L) != 1.0L)
139    link_error ();
140
141  if (cbrtl (0.0L) != 0.0L)
142    link_error ();
143
144  if (cbrtl (1.0L) != 1.0L)
145    link_error ();
146
147  if (cbrtl (-1.0L) != -1.0L)
148    link_error ();
149
150  if (expl (0.0L) != 1.0L)
151    link_error ();
152
153  if (expl (1.0L) <= 2.71L || expl (1.0L) >= 2.72L)
154    link_error ();
155
156  if (logl (1.0L) != 0.0L)
157    link_error ();
158
159  if (sinl (0.0L) != 0.0L)
160    link_error ();
161
162  if (cosl (0.0L) != 1.0L)
163    link_error ();
164
165  if (tanl (0.0L) != 0.0L)
166    link_error ();
167
168  if (atanl (0.0) != 0.0L)
169    link_error ();
170
171  if (4.0L*atanl (1.0L) <= 3.14L || 4.0L*atanl (1.0L) >= 3.15L)
172    link_error ();
173
174  if (powl (ld, 0.0L) != 1.0L)
175    link_error ();
176
177  if (powl (1.0L, ld) != 1.0L)
178    link_error ();
179}
180
181int main()
182{
183  test (3.0, 3.0F, 3.0L);
184
185  return 0;
186}
187