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