+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
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);
}