divconst-2.c: Rewrite to check for standards-compliant result rather than specific...
authorHans-Peter Nilsson <hp@bitrange.com>
Sat, 18 Mar 2000 03:26:47 +0000 (03:26 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Sat, 18 Mar 2000 03:26:47 +0000 (03:26 +0000)
* execute/divconst-2.c: Rewrite to check for standards-compliant
result rather than specific constants.  Put test-values in array.

From-SVN: r32615

gcc/testsuite/gcc.c-torture/ChangeLog
gcc/testsuite/gcc.c-torture/execute/divconst-2.c

index 20499e867db422c2a5ea6fe54b9f2849a3ee8594..b13552900717da9d3366fb1170d845ba211a1736 100644 (file)
@@ -1,3 +1,8 @@
+Fri Mar 10 01:15:19 2000  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * execute/divconst-2.c: Rewrite to check for standards-compliant
+       result rather than specific constants.  Put test-values in array.
+
 Sun Mar  5 23:25:12 2000  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * execute/20000224-1.c (main): Expected return-value is 1, not
index d3adaf3a0af4de6351d807a4424b5fa768665ca3..b58f1bfddc45530d981843909e1900491adee8a5 100644 (file)
@@ -4,9 +4,36 @@ f (long x)
   return x / (-0x7fffffffL - 1L);
 }
 
+long
+r (long x)
+{
+  return x % (-0x7fffffffL - 1L);
+}
+
+/* Since we have a negative divisor, this equation must hold for the
+   results of / and %; no specific results are guaranteed.  */
+long
+std_eqn (long num, long denom, long quot, long rem)
+{
+  /* For completeness, a check for "ABS (rem) < ABS (denom)" belongs here,
+     but causes trouble on 32-bit machines and isn't worthwhile.  */
+  return quot * (-0x7fffffffL - 1L) + rem == num;
+}
+
+long nums[] =
+{
+  -1L, 0x7fffffffL, -0x7fffffffL - 1L
+};
+
 main ()
 {
-  if (f (-1L) != 0L || f (0x7fffffffL) != 0L || f (-0x7fffffffL - 1L) != 1l)
-    abort ();
+  int i;
+
+  for (i = 0;
+       i < sizeof (nums) / sizeof (nums[0]);
+       i++)
+    if (std_eqn (nums[i], -0x7fffffffL - 1L, f (nums[i]), r (nums[i])) == 0)
+      abort ();
+
   exit (0);
 }