Commit | Line | Data |
---|---|---|
7f918cf1 CE |
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" |