diff options
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/builtins-25.c | 188 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/builtins-26.c | 105 |
3 files changed, 298 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e4c0e659d4..b2db902de72 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-07-03 Roger Sayle <roger@eyesopen.com> + + * gcc.dg/builtins-25.c: New testcase. + * gcc.dg/builtins-26.c: New testcase. + 2003-07-03 Janis Johnson <janis187@us.ibm.com> * gcc.dg/compat/vector-defs.h: New file. diff --git a/gcc/testsuite/gcc.dg/builtins-25.c b/gcc/testsuite/gcc.dg/builtins-25.c new file mode 100644 index 00000000000..495056615ca --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtins-25.c @@ -0,0 +1,188 @@ +/* Copyright (C) 2003 Free Software Foundation. + + Check that constant folding of built-in math functions doesn't + break anything and produces the expected results. + + Written by Roger Sayle, 28th June 2003. */ + +/* { dg-do link } */ +/* { dg-options "-O2" } */ + +extern void link_error(void); + +extern double trunc(double); +extern double floor(double); +extern double ceil(double); + +extern float truncf(float); +extern float floorf(float); +extern float ceilf(float); + +extern long double truncl(long double); +extern long double floorl(long double); +extern long double ceill(long double); + +void test() +{ + if (trunc (0.0) != 0.0) + link_error (); + if (floor (0.0) != 0.0) + link_error (); + if (ceil (0.0) != 0.0) + link_error (); + + if (trunc (6.0) != 6.0) + link_error (); + if (floor (6.0) != 6.0) + link_error (); + if (ceil (6.0) != 6.0) + link_error (); + + if (trunc (-8.0) != -8.0) + link_error (); + if (floor (-8.0) != -8.0) + link_error (); + if (ceil (-8.0) != -8.0) + link_error (); + + if (trunc (3.2) != 3.0) + link_error (); + if (floor (3.2) != 3.0) + link_error (); + if (ceil (3.2) != 4.0) + link_error (); + + if (trunc (-2.8) != -2.0) + link_error (); + if (floor (-2.8) != -3.0) + link_error (); + if (ceil (-2.8) != -2.0) + link_error (); + + if (trunc (0.01) != 0.0) + link_error (); + if (floor (0.01) != 0.0) + link_error (); + if (ceil (0.01) != 1.0) + link_error (); + + if (trunc (-0.7) != 0.0) + link_error (); + if (floor (-0.7) != -1.0) + link_error (); + if (ceil (-0.7) != 0.0) + link_error (); +} + +void testf() +{ + if (truncf (0.0f) != 0.0f) + link_error (); + if (floorf (0.0f) != 0.0f) + link_error (); + if (ceilf (0.0f) != 0.0f) + link_error (); + + if (truncf (6.0f) != 6.0f) + link_error (); + if (floorf (6.0f) != 6.0f) + link_error (); + if (ceilf (6.0f) != 6.0f) + link_error (); + + if (truncf (-8.0f) != -8.0f) + link_error (); + if (floorf (-8.0f) != -8.0f) + link_error (); + if (ceilf (-8.0f) != -8.0f) + link_error (); + + if (truncf (3.2f) != 3.0f) + link_error (); + if (floorf (3.2f) != 3.0f) + link_error (); + if (ceilf (3.2f) != 4.0f) + link_error (); + + if (truncf (-2.8f) != -2.0f) + link_error (); + if (floorf (-2.8f) != -3.0f) + link_error (); + if (ceilf (-2.8f) != -2.0f) + link_error (); + + if (truncf (0.01f) != 0.0f) + link_error (); + if (floorf (0.01f) != 0.0f) + link_error (); + if (ceilf (0.01f) != 1.0f) + link_error (); + + if (truncf (-0.7f) != 0.0f) + link_error (); + if (floorf (-0.7f) != -1.0f) + link_error (); + if (ceilf (-0.7f) != 0.0f) + link_error (); +} + +void testl() +{ + if (truncl (0.0l) != 0.0l) + link_error (); + if (floorl (0.0l) != 0.0l) + link_error (); + if (ceill (0.0l) != 0.0l) + link_error (); + + if (truncl (6.0l) != 6.0l) + link_error (); + if (floorl (6.0l) != 6.0l) + link_error (); + if (ceill (6.0l) != 6.0l) + link_error (); + + if (truncl (-8.0l) != -8.0l) + link_error (); + if (floorl (-8.0l) != -8.0l) + link_error (); + if (ceill (-8.0l) != -8.0l) + link_error (); + + if (truncl (3.2l) != 3.0l) + link_error (); + if (floorl (3.2l) != 3.0l) + link_error (); + if (ceill (3.2l) != 4.0l) + link_error (); + + if (truncl (-2.8l) != -2.0l) + link_error (); + if (floorl (-2.8l) != -3.0l) + link_error (); + if (ceill (-2.8l) != -2.0l) + link_error (); + + if (truncl (0.01l) != 0.0l) + link_error (); + if (floorl (0.01l) != 0.0l) + link_error (); + if (ceill (0.01l) != 1.0l) + link_error (); + + if (truncl (-0.7l) != 0.0l) + link_error (); + if (floorl (-0.7l) != -1.0l) + link_error (); + if (ceill (-0.7l) != 0.0l) + link_error (); +} + +int main() +{ + test (); + testf (); + testl (); + return 0; +} + diff --git a/gcc/testsuite/gcc.dg/builtins-26.c b/gcc/testsuite/gcc.dg/builtins-26.c new file mode 100644 index 00000000000..c4d03cd7da6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtins-26.c @@ -0,0 +1,105 @@ +/* Copyright (C) 2003 Free Software Foundation. + + Check that constant folding of built-in math functions doesn't + break anything and produces the expected results. + + Written by Roger Sayle, 28th June 2003. */ + +/* { dg-do link } */ +/* { dg-options "-O2 -ffast-math" } */ + +extern void link_error(void); + +extern double trunc(double); +extern double floor(double); +extern double ceil(double); + +extern float truncf(float); +extern float floorf(float); +extern float ceilf(float); + +extern long double truncl(long double); +extern long double floorl(long double); +extern long double ceill(long double); + +void test(double x) +{ + if (trunc (trunc (x)) != trunc (x)) + link_error (); + if (trunc (floor (x)) != floor (x)) + link_error (); + if (trunc (ceil (x)) != ceil (x)) + link_error (); + + if (floor (trunc (x)) != trunc (x)) + link_error (); + if (floor (floor (x)) != floor (x)) + link_error (); + if (floor (ceil (x)) != ceil (x)) + link_error (); + + if (ceil (trunc (x)) != trunc (x)) + link_error (); + if (ceil (floor (x)) != floor (x)) + link_error (); + if (ceil (ceil (x)) != ceil (x)) + link_error (); +} + +void testf(float x) +{ + if (truncf (truncf (x)) != truncf (x)) + link_error (); + if (truncf (floorf (x)) != floorf (x)) + link_error (); + if (truncf (ceilf (x)) != ceilf (x)) + link_error (); + + if (floorf (truncf (x)) != truncf (x)) + link_error (); + if (floorf (floorf (x)) != floorf (x)) + link_error (); + if (floorf (ceilf (x)) != ceilf (x)) + link_error (); + + if (ceilf (truncf (x)) != truncf (x)) + link_error (); + if (ceilf (floorf (x)) != floorf (x)) + link_error (); + if (ceilf (ceilf (x)) != ceilf (x)) + link_error (); +} + +void testl(long double x) +{ + if (truncl (truncl (x)) != truncl (x)) + link_error (); + if (truncl (floorl (x)) != floorl (x)) + link_error (); + if (truncl (ceill (x)) != ceill (x)) + link_error (); + + if (floorl (truncl (x)) != truncl (x)) + link_error (); + if (floorl (floorl (x)) != floorl (x)) + link_error (); + if (floorl (ceill (x)) != ceill (x)) + link_error (); + + if (ceill (truncl (x)) != truncl (x)) + link_error (); + if (ceill (floorl (x)) != floorl (x)) + link_error (); + if (ceill (ceill (x)) != ceill (x)) + link_error (); +} + + +int main() +{ + test (3.2); + testf (3.2f); + testl (3.2l); + return 0; +} + |