(* This test works only for 32-bit implementations! *) val maxint = 1073741823;val minint = ~maxint -1;infix seqfun e1 seq e2 = e2; (~minint seq "WRONG") handle Overflow => "OK";(abs minint seq "WRONG") handle Overflow => "OK";(maxint+1 seq "WRONG") handle Overflow => "OK";(minint-1 seq "WRONG") handle Overflow => "OK"; if maxint = 0x3fffffff then "OK" else "WRONG";if maxint = 0x3FFFFFFF then "OK" else "WRONG";if minint = ~0x40000000 then "OK" else "WRONG"; val sum = (op+) : int * int -> int;val diff = (op-) : int * int -> int;(sum (maxint,1) seq "WRONG") handle Overflow => "OK";(diff (minint,1) seq "WRONG") handle Overflow => "OK"; (minint * ~1 seq "WRONG") handle Overflow => "OK"; val prod = (op * ) : int * int -> int;(prod (minint,~1) seq "WRONG") handle Overflow => "OK"; fun checkDivMod i d = let val q = i div d val r = i mod d in printVal i seq TextIO.output(TextIO.stdOut, " "); printVal d seq TextIO.output(TextIO.stdOut, " "); if (d * q + r = i) andalso ((0 <= r andalso r < d) orelse (d < r andalso r <= 0)) then "OK" else "WRONG: problems with div, mod" end; checkDivMod 23 10;checkDivMod ~23 10;checkDivMod 23 ~10;checkDivMod ~23 ~10; checkDivMod 100 10;checkDivMod ~100 10;checkDivMod 100 ~10;checkDivMod ~100 ~10; checkDivMod 100 1;checkDivMod 100 ~1;checkDivMod 0 1;checkDivMod 0 ~1; (100 div 0 seq "WRONG") handle Div => "OK";(100 mod 0 seq "WRONG") handle Div => "OK";(minint div ~1 seq "WRONG") handle Overflow => "OK"; val maxri = real maxint;val minri = real minint; if floor 3.0 = 3 then "OK" else "WRONG";if floor 3.14 = 3 then "OK" else "WRONG";if floor ~3.0 = ~3 then "OK" else "WRONG";if floor ~3.14 = ~4 then "OK" else "WRONG";if floor(maxri + 0.9) = maxint then "OK" else "WRONG";if floor minri = minint then "OK" else "WRONG";(floor (minri - 0.1) seq "WRONG") handle Overflow => "OK";(floor (maxri + 1.0) seq "WRONG") handle Overflow => "OK";
(* This test works only for 32-bit implementations! *)
val maxint = 1073741823;
val minint = ~maxint -1;
infix seq
fun e1 seq e2 = e2;
(~minint seq "WRONG") handle Overflow => "OK";
(abs minint seq "WRONG") handle Overflow => "OK";
(maxint+1 seq "WRONG") handle Overflow => "OK";
(minint-1 seq "WRONG") handle Overflow => "OK";
if maxint = 0x3fffffff then "OK" else "WRONG";
if maxint = 0x3FFFFFFF then "OK" else "WRONG";
if minint = ~0x40000000 then "OK" else "WRONG";
val sum = (op+) : int * int -> int;
val diff = (op-) : int * int -> int;
(sum (maxint,1) seq "WRONG") handle Overflow => "OK";
(diff (minint,1) seq "WRONG") handle Overflow => "OK";
(minint * ~1 seq "WRONG") handle Overflow => "OK";
val prod = (op * ) : int * int -> int;
(prod (minint,~1) seq "WRONG") handle Overflow => "OK";
fun checkDivMod i d =
let val q = i div d
val r = i mod d
in
printVal i seq TextIO.output(TextIO.stdOut, " ");
printVal d seq TextIO.output(TextIO.stdOut, " ");
if (d * q + r = i) andalso
((0 <= r andalso r < d) orelse (d < r andalso r <= 0))
then "OK" else "WRONG: problems with div, mod"
end;
checkDivMod 23 10;
checkDivMod ~23 10;
checkDivMod 23 ~10;
checkDivMod ~23 ~10;
checkDivMod 100 10;
checkDivMod ~100 10;
checkDivMod 100 ~10;
checkDivMod ~100 ~10;
checkDivMod 100 1;
checkDivMod 100 ~1;
checkDivMod 0 1;
checkDivMod 0 ~1;
(100 div 0 seq "WRONG") handle Div => "OK";
(100 mod 0 seq "WRONG") handle Div => "OK";
(minint div ~1 seq "WRONG") handle Overflow => "OK";
val maxri = real maxint;
val minri = real minint;
if floor 3.0 = 3 then "OK" else "WRONG";
if floor 3.14 = 3 then "OK" else "WRONG";
if floor ~3.0 = ~3 then "OK" else "WRONG";
if floor ~3.14 = ~4 then "OK" else "WRONG";
if floor(maxri + 0.9) = maxint then "OK" else "WRONG";
if floor minri = minint then "OK" else "WRONG";
(floor (minri - 0.1) seq "WRONG") handle Overflow => "OK";
(floor (maxri + 1.0) seq "WRONG") handle Overflow => "OK";