File: conv.sml

package info (click to toggle)
mlton 20130715-3
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 60,900 kB
  • ctags: 69,386
  • sloc: xml: 34,418; ansic: 17,399; lisp: 2,879; makefile: 1,605; sh: 1,254; pascal: 256; python: 143; asm: 97
file content (38 lines) | stat: -rw-r--r-- 1,334 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
val big: IntInf.int = 0x80000000

fun try (barg: IntInf.int): unit =
       let val small = SOME (IntInf.toInt barg)
                  handle Overflow => NONE
           val bstr = IntInf.toString barg
           fun fail msg = print ("Fail " ^ msg ^ ": " ^ bstr ^ "\n")
           val isSmall = ~ big <= barg andalso barg < big
       in case small of
             NONE => if isSmall
                        then fail "1"
                        else ()
             | SOME sarg => if isSmall
                               then let val sstr = Int.toString sarg
                                    in if bstr = sstr
                                       andalso barg = IntInf.fromInt sarg
                                          then ()
                                          else fail "2"
                                    end
                               else fail "3"
       end

fun spin (low: IntInf.int, limit: IntInf.int): unit =
       let fun loop (arg: IntInf.int): unit =
                  if arg = limit
                     then ()
                     else (
                        try arg;
                        try (~ arg);
                        loop (arg + 1)
                     )
       in loop low
       end

val _ = spin (0, 1000)
val _ = spin (big - 1000, big + 1000)

val _ = print "All ok\n"