Import Upstream version 20180207
[hcoop/debian/mlton.git] / benchmark / tests / merge.sml
CommitLineData
7f918cf1
CE
1(* Written by Stephen Weeks (sweeks@sweeks.com). *)
2fun 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
11structure 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