Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / benchmark / tests / wc-input1.sml
1 (* Written by Stephen Weeks (sweeks@sweeks.com). *)
2
3 structure Main =
4 struct
5 fun doit n =
6 let
7 open TextIO
8 val f = OS.FileSys.tmpName ()
9 val out = openOut f
10 val _ =
11 output (out,
12 String.implode
13 (List.tabulate (1000000, fn i =>
14 if i mod 10 = 0 then #"\n" else #"a")))
15 val _ = closeOut out
16 fun wc f =
17 let
18 val ins = openIn f
19 fun loop (i: int): int =
20 case input1 ins of
21 NONE => i
22 | SOME c => loop (if c = #"\n" then i + 1 else i)
23 val n = loop 0
24 val _ = if n <> 100000 then raise Fail "bug" else ()
25 val _ = closeIn ins
26 in n
27 end
28 val rec loop =
29 fn 0 => ()
30 | n => (wc f; loop (n - 1))
31 val _ = loop n
32 val _ = OS.FileSys.remove f
33 in ()
34 end
35 end