Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / regression / int-inf.2.sml
1 val big: IntInf.int = 0x80000000
2
3 fun try (barg: IntInf.int): unit =
4 let
5 val small = SOME (IntInf.toInt barg)
6 handle Overflow => NONE
7 val bstr = IntInf.toString barg
8 val _ = print (concat ["trying ", bstr, "\n"])
9 fun fail msg = print ("Fail " ^ msg ^ ": " ^ bstr ^ "\n")
10 val isSmall = ~ big <= barg andalso barg < big
11 in case small of
12 NONE => if isSmall
13 then fail "1"
14 else ()
15 | SOME sarg => if isSmall
16 then let val sstr = Int.toString sarg
17 in if bstr = sstr
18 andalso barg = IntInf.fromInt sarg
19 then ()
20 else fail "2"
21 end
22 else fail "3"
23 end
24
25 fun spin (low: IntInf.int, limit: IntInf.int): unit =
26 let fun loop (arg: IntInf.int): unit =
27 if arg = limit
28 then ()
29 else (
30 try arg;
31 try (~ arg);
32 loop (arg + 1)
33 )
34 in loop low
35 end
36
37 val _ = spin (0, 1000)
38 val _ = spin (0x40000000 - 1000, 0x40000000 + 1000)
39 val _ = spin (big - 1000, big + 1000)
40
41 val _ = print "All ok\n"