aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meissner <meissner@cygnus.com>1998-05-31 20:31:09 +0000
committerMichael Meissner <meissner@gcc.gnu.org>1998-05-31 20:31:09 +0000
commit655ccec163bee97c9e38fbe2cca7eb651eb7be93 (patch)
treecf9d43a9687f5621fe2264521f94c50381086364
parent726e2d544cdcb3e91ac2e0ced52bf7ef592b18f3 (diff)
downloadgcc-655ccec163bee97c9e38fbe2cca7eb651eb7be93.zip
gcc-655ccec163bee97c9e38fbe2cca7eb651eb7be93.tar.gz
gcc-655ccec163bee97c9e38fbe2cca7eb651eb7be93.tar.bz2
Add minus zero test
From-SVN: r20152
-rw-r--r--gcc/testsuite/gcc.c-torture/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c58
2 files changed, 62 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/ChangeLog b/gcc/testsuite/gcc.c-torture/ChangeLog
index 773bc64..1cd126d 100644
--- a/gcc/testsuite/gcc.c-torture/ChangeLog
+++ b/gcc/testsuite/gcc.c-torture/ChangeLog
@@ -1,3 +1,7 @@
+Sun May 31 23:23:29 1998 Michael Meissner <meissner@cygnus.com>
+
+ * execute/ieee/mzero2.c: New test to better test IEEE -0 support.
+
Wed Apr 8 13:09:15 1998 Jim Wilson <wilson@cygnus.com>
* execute/980407-1.c: Delete test. Is duplicate of loop-4.c.
diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c b/gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c
new file mode 100644
index 0000000..0da53d2
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/ieee/mzero2.c
@@ -0,0 +1,58 @@
+/* Test IEEE +0/-0 rules */
+
+static double pzero = +0.0;
+static double nzero = -0.0;
+static double pinf = +1.0 / 0.0;
+static double ninf = -1.0 / 0.0;
+static double nan = 0.0 / 0.0;
+
+void
+expect (double value, double expected)
+{
+ if (expected != expected) /* expected value is Not a number */
+ {
+ if (value == value) /* actual value is a number */
+ abort ();
+ }
+
+ else if (value != value)
+ abort (); /* actual value is a NaN */
+
+ else if (memcmp ((void *)&value, (void *)&expected, sizeof (double)) != 0)
+ abort (); /* values don't match */
+}
+
+main ()
+{
+ expect (pzero + pzero, pzero);
+ expect (pzero + nzero, pzero);
+ expect (nzero + pzero, pzero);
+ expect (nzero + nzero, nzero);
+
+ expect (pzero - pzero, pzero);
+ expect (pzero - nzero, pzero);
+ expect (nzero - pzero, nzero);
+ expect (nzero - nzero, pzero);
+
+ expect (pzero * pzero, pzero);
+ expect (pzero * nzero, nzero);
+ expect (nzero * pzero, nzero);
+ expect (nzero * nzero, pzero);
+
+ expect (+1.00 * pzero, pzero);
+ expect (-1.00 * pzero, nzero);
+ expect (+1.00 * nzero, nzero);
+ expect (-1.00 * nzero, pzero);
+
+ expect (pzero / pzero, nan);
+ expect (pzero / nzero, nan);
+ expect (nzero / pzero, nan);
+ expect (nzero / nzero, nan);
+
+ expect (+1.00 / pzero, pinf);
+ expect (-1.00 / pzero, ninf);
+ expect (+1.00 / nzero, ninf);
+ expect (-1.00 / nzero, pinf);
+
+ exit (0);
+}