Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | (* Written by Stephen Weeks (sweeks@sweeks.com). *) |
2 | fun merge (l1: int list, l2) = | |
3 | case (l1, l2) of | |
4 | ([], _) => l2 | |
5 | | (_, []) => l1 | |
6 | | (x1 :: l1', x2 :: l2') => | |
7 | if x1 <= x2 | |
8 | then x1 :: merge (l1', l2) | |
9 | else x2 :: merge (l1, l2') | |
10 | ||
11 | structure Main = | |
12 | struct | |
13 | fun doit size = | |
14 | let | |
15 | val len = 100000 | |
16 | val l1 = List.tabulate (len, fn i => i * 2) | |
17 | val l2 = List.tabulate (len, fn i => i * 2 + 1) | |
18 | ||
19 | fun test () = | |
20 | if 0 = hd (merge (l1, l2)) | |
21 | then () | |
22 | else raise Fail "bug" | |
23 | ||
24 | fun loop n = | |
25 | if n = 0 | |
26 | then () | |
27 | else (test (); loop (n - 1)) | |
28 | in | |
29 | loop size | |
30 | end | |
31 | end |