File: textio.2.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (43 lines) | stat: -rw-r--r-- 1,540 bytes parent folder | download | duplicates (5)
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
39
40
41
42
43
(* Notice: This test will not be passed on platforms like Win32!
           (due to behind-the-scenes CR/LF <=> LF conversions). *)

val filename = OS.FileSys.tmpName ()

fun testRange (start, length) =
      let
        val allChars = CharVector.tabulate(length, fn i => chr ((i + start) mod 256))

        val outStr = TextIO.openOut filename
        val _ = TextIO.output (outStr, allChars)
        val _ = TextIO.closeOut outStr

        val inStr = TextIO.openIn filename
        val readChars = TextIO.inputAll inStr
        val _ = TextIO.closeIn inStr

        val _ = OS.FileSys.remove filename

        fun testCharF (c, cnt) =
              let
                val readC = CharVector.sub(readChars, cnt)
                val _ = if c = readC then
                          ()
                        else
                          print ("Error at index: " ^ (Int.toString cnt) ^ ": " ^
                                 (Char.toString c) ^ " <> " ^ (Char.toString readC) ^ "\n")
              in
                cnt + 1
              end

        val _ = CharVector.foldl testCharF 0 allChars
      in
        ()
      end

val _ = testRange (0, 256)
val _ = print "basic test of writing and reading back all characters done\n"
val _ = List.tabulate(256, fn i => List.tabulate(257, fn i2 => testRange (i, i2)))
val _ = print "test of writing files of all possible characters in strings of lengths 0-256 finished\n"
val _ = List.tabulate(6, fn i => List.tabulate(5000, fn i2 => testRange (i, i2)))

val _ = print "test finished\n"