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