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