1 /* Copyright (C) 2004 Free Software Foundation.
2
3 Check that constant folding of the rounding math functions doesn't
4 break anything and produces the expected results.
5
6 Written by Kaveh Ghazi, 2004-04-29. */
7
8 /* { dg-do link } */
9
10 extern int link_error (int);
11
12 #define TEST(FN, VALUE, RESULT) \
13 if (__builtin_##FN (VALUE) != RESULT) link_error (__LINE__); \
14 if (__builtin_##FN##f (VALUE) != RESULT) link_error (__LINE__); \
15 if (__builtin_##FN##l (VALUE) != RESULT) link_error (__LINE__); \
16
17 int
main(void)18 main (void)
19 {
20 TEST(trunc, 0, 0);
21 TEST(floor, 0, 0);
22 TEST(ceil, 0, 0);
23 TEST(round, 0, 0);
24 TEST(lround, 0, 0);
25 TEST(llround, 0, 0);
26 TEST(lfloor, 0, 0);
27 TEST(llfloor, 0, 0);
28 TEST(lceil, 0, 0);
29 TEST(llceil, 0, 0);
30
31 TEST(trunc, 6, 6);
32 TEST(floor, 6, 6);
33 TEST(ceil, 6, 6);
34 TEST(round, 6, 6);
35 TEST(lround, 6, 6);
36 TEST(llround, 6, 6);
37 TEST(lfloor, 6, 6);
38 TEST(llfloor, 6, 6);
39 TEST(lceil, 6, 6);
40 TEST(llceil, 6, 6);
41
42 TEST(trunc, -8, -8);
43 TEST(floor, -8, -8);
44 TEST(ceil, -8, -8);
45 TEST(round, -8, -8);
46 TEST(lround, -8, -8);
47 TEST(llround, -8, -8);
48 TEST(lfloor, -8, -8);
49 TEST(llfloor, -8, -8);
50 TEST(lceil, -8, -8);
51 TEST(llceil, -8, -8);
52
53 TEST(trunc, 3.2, 3);
54 TEST(floor, 3.2, 3);
55 TEST(ceil, 3.2, 4);
56 TEST(round, 3.2, 3);
57 TEST(lround, 3.2, 3);
58 TEST(llround, 3.2, 3);
59 TEST(lfloor, 3.2, 3);
60 TEST(llfloor, 3.2, 3);
61 TEST(lceil, 3.2, 4);
62 TEST(llceil, 3.2, 4);
63
64 TEST(trunc, -2.8, -2);
65 TEST(floor, -2.8, -3);
66 TEST(ceil, -2.8, -2);
67 TEST(round, -2.8, -3);
68 TEST(lround, -2.8, -3);
69 TEST(llround, -2.8, -3);
70 TEST(lfloor, -2.8, -3);
71 TEST(llfloor, -2.8, -3);
72 TEST(lceil, -2.8, -2);
73 TEST(llceil, -2.8, -2);
74
75 TEST(trunc, 0.01, 0);
76 TEST(floor, 0.01, 0);
77 TEST(ceil, 0.01, 1);
78 TEST(round, 0.01, 0);
79 TEST(lround, 0.01, 0);
80 TEST(llround, 0.01, 0);
81 TEST(lfloor, 0.01, 0);
82 TEST(llfloor, 0.01, 0);
83 TEST(lceil, 0.01, 1);
84 TEST(llceil, 0.01, 1);
85
86 TEST(trunc, -0.7, 0);
87 TEST(floor, -0.7, -1);
88 TEST(ceil, -0.7, 0);
89 TEST(round, -0.7, -1);
90 TEST(lround, -0.7, -1);
91 TEST(llround, -0.7, -1);
92 TEST(lfloor, -0.7, -1);
93 TEST(llfloor, -0.7, -1);
94 TEST(lceil, -0.7, 0);
95 TEST(llceil, -0.7, 0);
96
97 TEST(trunc, 2.5, 2);
98 TEST(floor, 2.5, 2);
99 TEST(ceil, 2.5, 3);
100 TEST(round, 2.5, 3);
101 TEST(lround, 2.5, 3);
102 TEST(llround, 2.5, 3);
103 TEST(lfloor, 2.5, 2);
104 TEST(llfloor, 2.5, 2);
105 TEST(lceil, 2.5, 3);
106 TEST(llceil, 2.5, 3);
107
108 TEST(trunc, -1.5, -1);
109 TEST(floor, -1.5, -2);
110 TEST(ceil, -1.5, -1);
111 TEST(round, -1.5, -2);
112 TEST(lround, -1.5, -2);
113 TEST(llround, -1.5, -2);
114 TEST(lfloor, -1.5, -2);
115 TEST(llfloor, -1.5, -2);
116 TEST(lceil, -1.5, -1);
117 TEST(llceil, -1.5, -1);
118
119 return 0;
120 }
121