67 lines · 1.9 KB · Standard ML
RawDownload
(* 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";