1structure ScaledTests =
2struct
3
4fun usr_time f x = let
5  val t0 = #usr (Timer.checkCPUTimer Globals.hol_clock)
6  val _ = f x
7in
8  Time.-(#usr (Timer.checkCPUTimer Globals.hol_clock), t0)
9end
10
11fun average (gen, test) m n = let
12  val prob = gen n
13  fun recurse m acc =
14      if m = 0 then acc
15      else recurse (m - 1) (Time.toReal (usr_time test prob) + acc)
16in
17  recurse m 0.0 / real m
18end
19
20fun test_upto {f,ntrials,max_size,filename} = let
21  val outstr = TextIO.openOut filename
22  fun recurse x =
23      if x > max_size then ()
24      else let
25          val _ = print ("Run #"^Int.toString x^" ... ");
26          val res = average f ntrials x
27          val _ = print "done\n"
28        in
29          TextIO.output(outstr,
30                        Int.toString x ^ "  " ^ Real.toString res ^ "\n");
31          TextIO.flushOut outstr;
32          recurse (x + 1)
33        end
34in
35  recurse 1 ; TextIO.closeOut outstr
36end
37
38end
39