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