]>
Commit | Line | Data |
---|---|---|
0a9530a9 RS |
1 | /* Copyright (C) 2003 Free Software Foundation. |
2 | ||
3 | Check that constant folding of built-in math functions doesn't | |
4 | break anything and produces the expected results. | |
5 | ||
6 | Written by Roger Sayle, 28th June 2003. */ | |
7 | ||
8 | /* { dg-do link } */ | |
9 | /* { dg-options "-O2 -ffast-math" } */ | |
10 | ||
11 | extern void link_error(void); | |
12 | ||
13 | extern double trunc(double); | |
14 | extern double floor(double); | |
15 | extern double ceil(double); | |
16 | ||
17 | extern float truncf(float); | |
18 | extern float floorf(float); | |
19 | extern float ceilf(float); | |
20 | ||
21 | extern long double truncl(long double); | |
22 | extern long double floorl(long double); | |
23 | extern long double ceill(long double); | |
24 | ||
25 | void test(double x) | |
26 | { | |
27 | if (trunc (trunc (x)) != trunc (x)) | |
28 | link_error (); | |
29 | if (trunc (floor (x)) != floor (x)) | |
30 | link_error (); | |
31 | if (trunc (ceil (x)) != ceil (x)) | |
32 | link_error (); | |
33 | ||
34 | if (floor (trunc (x)) != trunc (x)) | |
35 | link_error (); | |
36 | if (floor (floor (x)) != floor (x)) | |
37 | link_error (); | |
38 | if (floor (ceil (x)) != ceil (x)) | |
39 | link_error (); | |
40 | ||
41 | if (ceil (trunc (x)) != trunc (x)) | |
42 | link_error (); | |
43 | if (ceil (floor (x)) != floor (x)) | |
44 | link_error (); | |
45 | if (ceil (ceil (x)) != ceil (x)) | |
46 | link_error (); | |
47 | } | |
48 | ||
49 | void testf(float x) | |
50 | { | |
51 | if (truncf (truncf (x)) != truncf (x)) | |
52 | link_error (); | |
53 | if (truncf (floorf (x)) != floorf (x)) | |
54 | link_error (); | |
55 | if (truncf (ceilf (x)) != ceilf (x)) | |
56 | link_error (); | |
57 | ||
58 | if (floorf (truncf (x)) != truncf (x)) | |
59 | link_error (); | |
60 | if (floorf (floorf (x)) != floorf (x)) | |
61 | link_error (); | |
62 | if (floorf (ceilf (x)) != ceilf (x)) | |
63 | link_error (); | |
64 | ||
65 | if (ceilf (truncf (x)) != truncf (x)) | |
66 | link_error (); | |
67 | if (ceilf (floorf (x)) != floorf (x)) | |
68 | link_error (); | |
69 | if (ceilf (ceilf (x)) != ceilf (x)) | |
70 | link_error (); | |
71 | } | |
72 | ||
73 | void testl(long double x) | |
74 | { | |
75 | if (truncl (truncl (x)) != truncl (x)) | |
76 | link_error (); | |
77 | if (truncl (floorl (x)) != floorl (x)) | |
78 | link_error (); | |
79 | if (truncl (ceill (x)) != ceill (x)) | |
80 | link_error (); | |
81 | ||
82 | if (floorl (truncl (x)) != truncl (x)) | |
83 | link_error (); | |
84 | if (floorl (floorl (x)) != floorl (x)) | |
85 | link_error (); | |
86 | if (floorl (ceill (x)) != ceill (x)) | |
87 | link_error (); | |
88 | ||
89 | if (ceill (truncl (x)) != truncl (x)) | |
90 | link_error (); | |
91 | if (ceill (floorl (x)) != floorl (x)) | |
92 | link_error (); | |
93 | if (ceill (ceill (x)) != ceill (x)) | |
94 | link_error (); | |
95 | } | |
96 | ||
97 | ||
98 | int main() | |
99 | { | |
100 | test (3.2); | |
101 | testf (3.2f); | |
102 | testl (3.2l); | |
103 | return 0; | |
104 | } | |
105 |