summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/builtins-25.c188
-rw-r--r--gcc/testsuite/gcc.dg/builtins-26.c105
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;
+}
+